mpapp.gallery = function() {

	var pub = {};

	pub.selectedCategoryID = 0;

	pub.getCategories = function(callback) {
		$.getJSON(
			mpapp.tomcatURL + '/merkphotographyjava/MPGatewayServlet?action=' + mpapp.actions.ACTION_GET_CATEGORIES,
			null,
			function(result) {
				mpapp.categories = result.data;

				pub.getAllGalleryPhotos();

				if (callback) {
					callback.call();
				}
			}
		);
	};

	pub.populateCategoryList = function() {

		var categoriesList = $('#categoriesList');
		categoriesList.empty();
		var categories = mpapp.categories;

		$.each(categories, function(index) {
			categoriesList.append('<tr id="catID_' + this.catID + '"><td>' + this.catName + '</td></tr>');
			var newRow = $('#catID_' + this.catID);
			newRow.mouseover(
				function(event, ui) {
					newRow.addClass('categoriesListRollover');
				}).mouseout(
				function(event, ui) {
					newRow.removeClass('categoriesListRollover');
				}).click(function(event, ui) {

					pub.clearAllSelects(categoriesList);

					newRow.addClass('categoriesListSelected');

					pub.selectedCategoryID = this.id.toString().split('_')[1];
					mpapp.galleryPhotosForCategory = pub.filterGalleryPhotos(mpapp.galleryPhotos, pub.selectedCategoryID);

					var gallerySlideShowImageURLS = pub.makeSlideShowArray(mpapp.galleryPhotosForCategory);
					pub.startSlideshow(gallerySlideShowImageURLS);

				});
		});
	};

	pub.getAllGalleryPhotos = function() {
		$.getJSON(
			mpapp.tomcatURL + '/merkphotographyjava/MPGatewayServlet?action=' + mpapp.actions.ACTION_GET_PHOTOS,
			null,
			function(result) {
				mpapp.galleryPhotos = result.data;
				mpapp.cacheUtils.cacheFiles(mpapp.galleryPhotos);
			}
		);
	};

	pub.filterGalleryPhotos = function(galleryPhotos, catID) {
		var galleryPhotosForCategory = [];
		var numPhotos = galleryPhotos.length;

		for (var i = 0; i < numPhotos; i++) {
			var photo = galleryPhotos[i];
			if (photo.catID == catID) {
				galleryPhotosForCategory.push(photo);
			}
		}

		return galleryPhotosForCategory;
	};

	pub.makeSlideShowArray = function (galleryPhotosForCategory) {
		var slides = [];
		var numPhotos = galleryPhotosForCategory.length;
		for (var i = 0; i < numPhotos; i++) {
			var photo = galleryPhotosForCategory[i];
			slides.push('assets/photos/' + photo.photoFileName);
		}
		return slides;
	};

	pub.startSlideshow = function(slides) {

		$('#gallerySlideShowDiv').simpleSlideshow({
			slides : slides,
			preFetchImages : true,
			pause : 3500,
			fadeTime : 750,
			width : 600,
			height : 400,
			showPlayIcon : true,
			playIconPosition : 'containerBottom',
			backgroundColor : '#eee',
			borderStyle : '2px solid #2E6E9E'
		});
	};

	pub.clearAllSelects = function (categoriesList) {
		var tableRows = $('#categoriesList tr');
		$.each(tableRows, function() {
			$(this).removeClass('categoriesListSelected');
		});
	};

	pub.sendContactInfo = function() {

		var body = $('body');

		var contactFirstName = $('#contactFirstName').val();
		var contactLastName = $('#contactLastName').val();
		var contactEmail = $('#contactEmail').val();
		var contactMessage = $('#contactMessage').val();

		var radios = $('input:radio[name="contactOptIn"]');
		var contactOptIn = 0;
		if (radios[0].checked) {
			contactOptIn = 1;
		}

		$.post(mpapp.tomcatURL + '/merkphotographyjava/MPGatewayServlet', {
			'action' : 'contactUs',
			'contactFirstName' : contactFirstName,
			'contactLastName' : contactLastName,
			'contactEmail' : contactEmail,
			'contactMessage' : contactMessage,
			'contactOptIn' : contactOptIn
		}, pub.onSendContactInfoReceived, 'json');

		body.fadeTo('slow', 0.5);

	};

	pub.onSendContactInfoReceived = function(data) {
		alert(data.data + '\nError Code: ' + data.errorCode + '\nError Message: ' + data.errorMessage);
		$('body').fadeTo('slow', 1.0);
	};

	return pub;

}();

