function updateTopRight(fromLogin) {
	$.ajax({
		type: 'POST', 
		url: 'tickets/engine/loginOutButton.php',
		data: [{}], 
		success: function(transport) {
			$('#globalLoginLogoutButton').html(transport);
			
			if (fromLogin != undefined && fromLogin) {
				if ($('loginTask').val() == 'logout' && $('#checkoutTask').val() != '') {
					$.ajax({
						url: 'tickets/engine/loginSuccess.php',
						type: 'POST',
						success: function(transport) {
							$('#loginBoxContents').html(transport);
							showLogin();
						}
					});
				}
				
				if ($('#registerTask').val() != '')
					getNewContent('events');
			}
		}
	});
}

function postNewContent(target, parameters) {
	parameters[parameters.length] = { name: 'topic', value: target };
	$('#mutableContentContainer').fadeOut('fast', function() {
			$('#mutableContentContainerLoader').css({ display: 'block' });
			$.ajax({
				url: 'tickets/engine/events.php',
				type: 'POST',
				data: parameters,
				success: function(transport) {
					showNewResults(transport);
					updateTopRight();
					isConfirming = false;
				}
			});
		}
	);
}

function getNewContent(target) {
	if (target == "checkout")
		reQuantifyTicketsQuietly();
		
	$('#mutableContentContainer').fadeOut('fast', function() {
		$('#mutableContentContainerLoader').css({ display: 'block' });
		$.ajax({
			url: 'tickets/engine/events.php', 
			type: 'POST',
			data: [{ name: 'topic', value: target }],
			success: function(transport) {
				showNewResults(transport);
				updateTopRight();
			}
		});		
	});
}

function reloadNewContent(target) {
	window.location = 'shop?topic=' + String(target);
}


function getQueryContent(parameters) {
	$('#mutableContentContainer').fadeOut('fast', function() {
			$('#mutableContentContainerLoader').css({ display: 'block' });
			$.ajax({
				url: 'tickets/engine/events.php', 
				type: 'POST',
				data: parameters,
				success: function(transport) {
					showNewResults(transport);
					updateTopRight();
				}
			});
		}
	);
}

function gotoEvent(eventId) {
	$('#mutableContentContainer').fadeOut('fast', function() {
			$('#mutableContentContainerLoader').css({ display: 'block' });
			$.ajax({
				url: 'tickets/engine/events.php', 
				type: 'POST',
				data: [{ name: 'sid', value: eventId }],
				success: function(transport) {
					showNewResults(transport);
					updateTopRight();
				}
			});
		}
	);
}

function showAllEvents() {
	gotoEvent('-1');
}

function showNewResults(transport) {
	$('#mutableContentContainer').html(transport);
	$('#mutableContentContainerLoader').css({ display: 'none' });
	$('#mutableContentContainer').fadeIn('fast');
}

function buyTicketsFor(id) {
	$.ajax({
		url: 'tickets/engine/cart.php',
		type: 'POST',
		data: [{ name: 'action', value: 'buy' }, { name: 'eventId', value: id }],
		success: function(transport) {
			$('#shoppingCartContents').html(transport);
			showCart();
		}
	});
}

function doLogout() {
	var parameters = $('#logoutForm').serializeArray();
	$('#loginBoxContents').html('<center><br /><br /><br /><br /><img src="tickets/images/loader-circle-white.gif" /><br /><br /></center>');
	$.ajax({
		url: 'tickets/engine/login.php', 
		type: 'POST',
		data: parameters,
		success: function(transport) {
			try {
				if (FB.getSession())
					FB.logout(function(response) { window.location = 'index.php'; });
				else
					window.location = 'index.php';
			} catch (caught) {
				window.location = 'index.php';
			}
		}
	});
}

function doLogin() {
	var parameters = $('#loginForm').serializeArray();
	$('#loginBoxContents').html('<center><br /><br /><br /><br /><img src="tickets/images/loader-circle-white.gif" /><br /><br /></center>');
	$.ajax({
		url: 'tickets/engine/login.php',
		type: 'POST',
		data: parameters,
		success: function(transport) {
			$('#loginBoxContents').html(transport);
			if ($('#checkoutTask').val() != '')
				showLogin();
			updateTopRight(true);
		}
	});
}

function doQuietLogin() {
	var parameters = $('#loginForm').serializeArray();
	$('#loginBoxContents').html('<center><br /><br /><br /><br /><img src="tickets/images/loader-circle.gif" /><br /><br /></center>');
	$.ajax({
		url: 'tickets/engine/login.php',
		type: 'POST',
		data: parameters,
		success: function(transport) {
			hideLogin();
			updateTopRight();
		}
	});
}

function doInlineLogin(continueToCheckout) {
	var parameters = [
		{ name: 'registerTask', value: 'login' }, 
		{ name: 'login', value: $('inline_userName').val() }, 
		{ name: 'password', value: $('inline_password').val() }
	];
	if (continueToCheckout != undefined)
		parameters[parameters.length] = { name: 'continueToCheckout', value: '1' };
		
	postNewContent('register', queryValues);
}

function updateAndShowCart() {
	$.ajax({
		url: 'tickets/engine/cart.php',
		type: 'POST',
		data: [{ }],
		success: function(transport) {
			$('#shoppingCartContents').html(transport);
			showCart();
		}
	});
}

function postToCart(theQuery, gotoCheckout) {
	try {
		$('#inlineCartContents').html('<center><br /><br /><img src="tickets/images/loader-circle.gif" /><br /><br /></center>');
		$('#shoppingCartContents').html('<center><br /><br /><img src="tickets/images/loader-circle-white.gif" /><br /><br /></center>');
	} catch (caught) {
		$('#shoppingCartContents').html('<center><br /><br /><img src="tickets/images/loader-circle-white.gif" /><br /><br /></center>');
		
	}
	
	if (!gotoCheckout || gotoCheckout == undefined)
		showCart();
	
	try {
		if ($('redrawAfterCartUpdate').val() > 0)
			getNewContent('events');
	} catch (caught) {}
	
	$.ajax({
		url: 'tickets/engine/cart.php',
		type: 'POST',
		data: theQuery,
		success: function(transport) {		
			try {
				$('#inlineCartContents').html(transport);
				try{ $('#shoppingCartContents').html(transport); } catch(caught) {}
			} catch(caught) {
				$('#shoppingCartContents').html(transport);
				if (!gotoCheckout)
					showCart();
			}
			
			try {
				var ticketCount = $('#icketCount').val();
				if ($('#partyMemberBoxes').is(':visible')) {
					var partyMemberBoxes = $('#partyMemberBoxes div');
					if (partyMemberBoxes.length > ticketCount) {
						for (var i = partyMemberBoxes.length - 1; i >= 0; i--) {
							if (i >= ticketCount)
								partyMemberBoxes[i].remove();
						}
					} else if (partyMemberBoxes.length < ticketCount) {
						for (var i = 0; i < ticketCount; i++) {
							if (i >= partyMemberBoxes.length)
								$('#partyMemberBoxes').insert('<div class="singleBox"><label for="partyMember_' + String(i) + '">Party Member ' + String(i + 1) +': </label><input type="text" class="textInput" value="" name="partyMembers[' + String(i) + ']" id="partyMembers_' + String(i) + '" /></div>');
						}
					}
				}
			} catch (caught) { alert(caught); }
			
			if (gotoCheckout != undefined && gotoCheckout) {
				getNewContent('checkout');
			} else {
				try { refreshTicketList(); } catch(caught) {}
			}
			
			$('#shoppingCart').css({
				left: 	String(($(window).width() - $('#shoppingCart').width()) / 2) + "px",
				top: 	String($(window).scrollTop() + $(window).height() / 2 - $('#shoppingCart').height() / 2) + 'px'
			});
		}
	});
}

function deleteProductFromCart(addTime, productId) {
	var baseQuery = [
		{ name: 'productId', value: productId }, 
		{ name: 'addTime', value: addTime  },
		{ name: 'cartTask', value: 'delete' },
		{ name: 'eventType', value: 'product' }
	];
	
	postToCart(baseQuery);
}

function showCart() {
	if (!($('#shoppingCart').is(':visible'))) {
		$('#shoppingCart').css({
			left: 	String(($(window).width() - $('#shoppingCart').width()) / 2) + "px",
			top: 	String($(window).scrollTop() + $(window).height() / 2 - $('#shoppingCart').height() / 2) + 'px'
		});
		
		$('#shoppingCart').fadeIn('fast');
	}
}

function hideCart(forceItHidden) {
	if ($('#shoppingCart').is(':visible') && (!$('#shoppingCartContents').hasClass('embedded') || forceItHidden))
		$('#shoppingCart').fadeOut('fast');
	if ($('#loginBox').is(':visible'))
		$('#loginBox').fadeOut('fast');
}

function showLogin() {
	if (!($('#loginBox').is(':visible'))) {
		$('#loginBox').css({
			left: 	String(($(window).width() - $('#loginBox').width()) / 2) + "px",
			top: 	String($(window).scrollTop() + $(window).height() / 2 - $('#loginBox').height() / 2) + 'px'
		});
		
		$('#loginBox').fadeIn('fast');
	}
}

function hideLogin() {
	if (($('#loginBox').is(':visible')))
		$('#loginBox').fadeOut('fast');	
}

function checkInput(inputItem) {
	if ($(inputItem).val() == '') {
		$(inputItem).addClass('errorHere');
		return false;
	} else
		$(inputItem).removeClass('errorHere');
	return true;
}

function checkInputLength(inputItem, theLength, inputName) {
	if ($(inputItem).val().length >= theLength)
		return true;
	else {
		$(inputItem).addClass('errorHere');
		alert(inputName + ' must be at least ' + String(theLength) + ' characters long.');
		return false;
	}
}

function checkRadio(radioInputs, radioLabels) {
	isChecked = false
	for (var i = 0; i < radioInputs.length && !isChecked; i++)
		if ($(radioInputs[i]).attr('checked'))
			isChecked = true;
			
	if (!isChecked)
		for (var i = 0; i < radioInputs.length; i++)
			$(radioLabels[i]).addClass('errorHere');
	else
		for (var i = 0; i < radioInputs.length; i++)
			$(radioLabels[i]).removeClass('errorHere');
		
	return isChecked;
}

function checkRegisterForm() {
	isGood = true;
	
	isGood = (checkInput('firstName') ? isGood : false);
	isGood = (checkInput('lastName') ? isGood : false);
	isGood = (checkInput('username') ? isGood : false);
	isGood = (checkInput('emailAddress') ? isGood : false);
	
	isGood = (checkInput('billing_firstName') ? isGood : false);
	isGood = (checkInput('billing_lastName') ? isGood : false);
	isGood = (checkInput('billing_address') ? isGood : false);
	isGood = (checkInput('billing_city') ? isGood : false);
	isGood = (checkInput('billing_state') ? isGood : false);
	isGood = (checkInput('billing_zip') ? isGood : false);
	
	if ($('#shippingInfoBlock').is(':visible')) {
		isGood = (checkInput('address') ? isGood : false);
		isGood = (checkInput('city') ? isGood : false);
		isGood = (checkInput('state') ? isGood : false);
		isGood = (checkInput('zip') ? isGood : false);
	}
	
	if ($('password').val() != $('password_confirm').val()) {
		isGood = false;
		$('#password_confirm').addClass('errorHere');
	} else
		checkInput('password_confirm');
		
	isGood = (checkInputLength('password', 5, 'Password') ? isGood : false);
	isGood = (checkInputLength('username', 5, 'Username') ? isGood : false);
	
	if ($('#terms').attr('checked') == false || $('#termsName').val() == '') {
		alert('You must agree to the terms and conditions to continue.');
		isGood = false;
	}
	
	return isGood;
}

function doRegister(continueToCheckout) {
	if (checkRegisterForm()) {
		var queryValues = $('#registerForm').serializeArray();
		if (continueToCheckout != undefined)
			queryValues.continueToCheckout = 1;
		postNewContent('register', queryValues);
	}
}

function doFamilyRegister() {
	if ($('#terms').is(':visible') && (!$('#terms').attr('checked') || $('#termsName').val() == ''))
		alert('You must accept the terms and conditions to continue.');
	else {
		var required = $('.familyRequired');
		isGood = true;
		for (var i = 0; i < required.length; i++)
			isGood = (checkInput(required[i]) ? isGood : false);
		
		var radioContainers = $('.requiredRadioContainer');
		var theseInputs = new Array();
		for (var i = 0; i < radioContainers.length; i++) {
			theseInputs = $('#' + radioContainers[i].id + ' input');
			theseLabels = $('#' + radioContainers[i].id + ' label');
			if (theseInputs.length > 0)
				isGood = (checkRadio(theseInputs, theseLabels) ? isGood : false);
		}
	
		if (isGood) {
			var queryValues = $('#registerForm').serializeArray();
			postNewContent('register', queryValues);
		}
	}
}

function doFamilyUpdate() {
	var required = $('.familyRequired');
	isGood = true;
	for (var i = 0; i < required.length; i++)
		isGood = (checkInput(required[i]) ? isGood : false);
	
	var radioContainers = $('.requiredRadioContainer');
	var theseInputs = new Array();
	for (var i = 0; i < radioContainers.length; i++) {
		theseInputs = $('#' + radioContainers[i].id + ' input');
		theseLabels = $('#' + radioContainers[i].id + ' label');
		if (theseInputs.length > 0)
			isGood = (checkRadio(theseInputs, theseLabels) ? isGood : false);
	}

	if (isGood) {
		var queryValues = $('#updateForm').serializeArray();
		postNewContent('update', queryValues);
	}
}

function checkUpdateForm() {
	isGood = true;
	
	isGood = (checkInput('firstName') ? isGood : false);
	isGood = (checkInput('lastName') ? isGood : false);
	isGood = (checkInput('username') ? isGood : false);
	isGood = (checkInput('emailAddress') ? isGood : false);
	
	isGood = (checkInput('billing_firstName') ? isGood : false);
	isGood = (checkInput('billing_lastName') ? isGood : false);
	isGood = (checkInput('billing_address') ? isGood : false);
	isGood = (checkInput('billing_city') ? isGood : false);
	isGood = (checkInput('billing_state') ? isGood : false);
	isGood = (checkInput('billing_zip') ? isGood : false);
	
	isGood = (checkInput('address') ? isGood : false);
	isGood = (checkInput('city') ? isGood : false);
	isGood = (checkInput('state') ? isGood : false);
	isGood = (checkInput('zip') ? isGood : false);
	
	if ($('password').val() != $('password_confirm').val()) {
		isGood = false;
		$('#password_confirm').addClass('errorHere');
	} else
		$('#password_confirm').removeClass('errorHere');
		
	isGood = ($('password').val().length == 0 || checkInputLength('password', 5, 'Password') ? isGood : false);
	isGood = (checkInputLength('username', 5, 'Username') ? isGood : false);
	
	return isGood;
}

function doUpdate() {
	if (checkUpdateForm()) {
		var queryValues = $('#updateForm').serializeArray();
		postNewContent('update', queryValues);
	}
}

function getForgot() {
	hideCart();
	getNewContent('forgot');
}

function doForgot() {
	var queryValues = $('#forgotForm').serializeArray();
	postNewContent('forgot', queryValues);
}

function doCheckout() {
	if ($('#terms').is(':visible') && (!$('#terms').attr('checked') || $('#termsName').val() == '')) {
		if ($('#termsName').val() == '')
			$('#termsName').addClass('errorHere');
		else
			$('#termsName').removeClass('errorHere');
			
		alert('You must accept the terms and conditions to continue.');
	} else if ($('#emailAddress').is(':visible') && $('#emailAddress').is(':visible') && $('emailAddress').val() == '') {
		$('#emailAddress').addClass('errorHere');
		alert('Please enter a valid email address.');
	} else {
		var queryValues = $('#checkoutForm').serializeArray();
		$('#emailAddress').removeClass('errorHere');
		
		var goodToGo = true;
		$('.requiredCheckout').each(function(index) {
			if ($(this).val() == '') {
				$(this).addClass('errorHere');
				goodToGo = false;
			} else
				$(this).removeClass('errorHere');
		});
		
		if (goodToGo)
			postNewContent('confirm', queryValues);
	}
}

function checkoutBack() {
	var queryValues = $('#checkoutForm').serializeArray();
	queryValues.wentBack = 'yes';
	postNewContent('checkout', queryValues);
}

var isConfirming = false;
function doConfirm() {
	if (!isConfirming) {
		isConfirming = true;
		var queryValues = $('#checkoutForm').serializeArray();
		postNewContent('order', queryValues);
	} else {
	}
}

function toggleEventChecked(id) {
	if ($(id).attr('checked'))
		$(id).attr('checked', false);
	else
		$(id).attr('checked', true);
}

function setUsernameToEmail() {
	if ($('username').val() == '') {
		$('#username').value = $('emailAddress').val();
		$('#username').highlight();
	}
}

function setShippingToBilling() {
	$('#address').value = $('billing_address').val();
	$('#city').value = $('billing_city').val();
	$('#state').value = $('billing_state').val();
	$('#zip').value = $('billing_zip').val();
	
	$('#address').highlight();
	$('#city').highlight();
	$('#state').highlight();
	$('#zip').highlight();
}

function doSearch() {
	var queryValues = { text: $('searchText').val() };
	postNewContent('events', queryValues);
}

function copyCheckoutShipping() {
	$('#billing_firstName').value 	= $('firstName').val();
	$('#billing_lastName').value 	= $('lastName').val();
	
	$('#billing_address').value = $('address').val();
	$('#billing_city').value 	= $('city').val();
	$('#billing_state').value 	= $('state').val();
	$('#billing_zip').value 	= $('zip').val();
	
	$('#billing_phone').value 	= $('phone').val();
	$('#billing_email').value 	= $('email').val();
}

function addProductTickets(sendingForm, continueToCheckout) {
	var baseQuery = $(sendingForm).serializeArray();
	
	baseQuery[baseQuery.length] = { name: 'cartTask', value: 'add' };
	baseQuery[baseQuery.length] = { name: 'eventType', value: 'product' };
	
	postToCart(baseQuery, continueToCheckout);
}

function reQuantifyTickets() {
	parameters = $('#cartQuantityForm').serializeArray();
	parameters[parameters.length] = { name: 'cartTask', value: 'update' };
	postToCart(parameters);
}

function reQuantifyTicketsQuietly() {
	parameters = $('#cartQuantityForm').serializeArray();
	parameters[parameters.length] = { name: 'cartTask', value: 'update' };
	$.ajax({
		url: 'tickets/engine/cart.php',
		type: 'POST',
		data: parameters,
		success: function(transport) {
			$('#shoppingCartContents').html(transport);
		}
	});
}

function setBillingToCustomer() {
	if (!$('#billingInfoContainer').is(':visible')) {
		$('#billing_firstName').val($('#firstName').val());
		$('#billing_lastName').val($('#lastName').val());
		$('#billing_address').val($('#address').val());
		$('#billing_city').val($('#city').val());
		$('#billing_state').val($('#state').val());
		$('#billing_zip').val($('#zip').val());
		$('#billing_phone').val($('#phone').val());
		$('#billing_email').val($('#emailAddress').val());
	}
}

function toggleBillingVisibility() {
	if ($('#billingInfoContainer').is(':visible')) {
		$('#billingInfoContainer').fadeOut('fast', function() {
				$('#billingButton').html('My Billing Information is Different');
				setBillingToCustomer();
			}
		);
	} else {
		$('#billingInfoContainer').fadeIn('fast', function() {
				$('#billingButton').html('My Billing Information is The Same');
			}
		);
	}
}

function checkoutLoginFacebook() {
	try {
		FB.login(function(response) {
			if (response.session) {
				getNewContent('checkout');
			} else {
				// user cancelled login
			}
		});
	} catch (caught) {}
}

function checkoutLoginStandard() {
	$('#checkoutLoginSelector').fadeOut('fast', function() {
			$('#checkoutFormBox').fadeIn('fast');
		}
	);
}

function switchCreditCash(to) {
	if (to == "credit" && !$('#creditPaymentBox').is(':visible')) {
		$('#laterPaymentBox').css({display: 'none'});
		$('#creditPaymentBox').css({display: 'block'});
	} else if (to == "later" && !$('#laterPaymentBox').is(':visible')) {
		$('#creditPaymentBox').css({display: 'none'});
		$('#laterPaymentBox').css({display: 'block'});
	}
	$('#paymentMethod').value = to;
}

function prepareTermsCheckbox() { 
	var check = $('#terms');
	
	$(check).attr('disabled', true);
	$('#termsAndConditionsBox').attr('scrollTop', 0);
	
	// work out the scroll offset by subtracting the height of the 'terms_inner' div from the height of 'terms' div
	var offset = $('#termsAndConditionsBoxInner').height() - $('#termsAndConditionsBox').height();
	// run this function everytime the user mouses over the terms div
	// if the value of scrollTop is greater than or equal to the required offset (its scrolled right to the bottom) then enable the checkbox
	
	$('#termsAndConditionsBox').bind('scroll', function() {
		if($('#termsAndConditionsBox').attr('scrollTop') >= offset) {
			$(check).attr('disabled', false);
		}
	});
}

function showTextPopup(content) {	
	$.ajax({
		url: 'tickets/engine/services/textPopup.php', 
		data: [{ name: 'content', value: content }], 
		type: 'POST',
		success: function(transport) {
			$('#textPopupContents').html(transport);
			$('#textPopup').css({
				left: 	String(($(window).width() - $('#textPopup').width()) / 2) + "px",
				top: 	String($(window).scrollTop() + $(window).height() / 2 - $('#textPopup').height() / 2) + 'px'
			});
			
			if (!($('#textPopup').is(':visible')))
			$('#textPopup').fadeIn('fast');
		}
	});
}

function hideTextPopup() {
	if ($('#textPopup').is(':visible'))
		$('#textPopup').fadeOut('fast');
}
