jQuery.fn.billBoard = function(settings) {
	settings = jQuery.extend({
					startPos: 1,
					easeFunc: "linear",
					easeInterval: 20,
					previousImgPath: "images/icons/png-24/24-arrow-previous.png",
					previousImgWidth: 24,
					previousImgHeight: 24,
					nextImgPath: "images/icons/png-24/24-arrow-next.png",
					nextImgWidth: 24,
					nextImgHeight: 24,
					fadeSpeed: 'slow',
					cycle: true,
					delay: 10000
				}, settings);

	// SETUP SOME VARS
	var bbItem;
	var bbItemPosition = "";
	var bbItems = $("#gallery").children();
	var menuItem;
	var menuItemWidth = 0;
	var menuItems;
	var selectedID = "";
	var selectedIndex = "";
	var previousSelectedID = "";
	var previousSelectedIndex = 1;
	var menuPaddingLeft = 0;	
	var marginBottom = 0;
	var marginTop = 0;
	var margin = 0;
	var posTop = 0;
	var c;

	// CREATE THE MENU BASED ON THE AMOUNT OF IMAGES IN THE GALLERY
	$("#gallery").ready(function() {
		$("#gallery").after('<ul id="galleryMenu"></ul>');
		$("#galleryMenu").ready(function() {


			// previous link
			$("#galleryMenu").append('<li id="prev"><a href="#" title="Previous"><img src="' + settings.previousImgPath + '" width="' + settings.previousImgWidth + '" height="' + settings.previousImgHeight + '" alt="Previous" /></a></li>');

			// menu items
			for(var i = 0; i < bbItems.length; i++) {
				$("#galleryMenu").append('<li id="bbItem_' + (i+1) + '"><a href="#"></a></li>');
			}

			// next link
			$("#galleryMenu").append('<li id="next"><a href="#" title="Next"><img src="' + settings.nextImgPath + '" width="' + settings.nextImgWidth + '" height="' + settings.nextImgHeight + '" alt="Next" /></a></li>');

			menuItems = $("#galleryMenu").children();

			menuItemWidth = Math.round(($("#galleryMenu").width()) / menuItems.length);
			// alert(menuItemWidth);
	
			if(menuItems.length > 0) {
				for(var i = 0; i < menuItems.length; i++) {
					$("#galleryMenu li:nth-child(" + (i+1) + ")").width(menuItemWidth);
					$("#galleryMenu li a:nth-child(" + (i+1) + ")").width(menuItemWidth - 1);
				}

				// CENTER THE MENU BY ADJUSTING WIDTH AND LEFT PADDING
				$("#galleryMenu").css("width", Math.round((menuItems.length * menuItemWidth)));
				menuPaddingLeft = ($("#galleryMenu").width() - Math.round((menuItems.length * menuItemWidth))) / 2;
				// alert(menuPaddingLeft);
				$("#galleryMenu").css("padding-left", menuPaddingLeft);


				// $("#galleryMenu #next").css("background-color", "transparent");
				// $("#galleryMenu #prev").css("background-color", "transparent");

				// $("#galleryMenu #next").css("margin-top", "-11px");
				// $("#galleryMenu #prev").css("margin-top", "-11px");
	
				// $("#galleryMenu #next a").css("text-align", "left");
				// $("#galleryMenu #prev a").css("text-align", "right");
			}


			// ADD CLICK FUNCTIONALITY TO EACH GALLERY ITEM
			$("#gallery li a").click(function () {
				/*for(var i = 0; i < menuItems.length; i++) {
					if((i+1) < menuItems.length) {
						if($("#gallery li a").eq(i).html() == $(this).html()) {
							clearSelected();
							previousSelectedID = selectedID;
							selectedID = "bbItem_" + (i+2);
							selectItem();
							return false;
							break;
						}
					} else {
						// must be on the last item, so move back to the first
						clearSelected();
						previousSelectedID = selectedID;
						selectedID = "bbItem_1";
						selectItem();
						return false;
					}
				}*/

				if((previousSelectedIndex+2) < menuItems.length) {
					clearSelected();
					previousSelectedID = selectedID;
					selectedID = "bbItem_" + (previousSelectedIndex+1);
					selectItem();
				} else {
					// at end of list

					clearSelected();
					previousSelectedID = selectedID;
					selectedID = "bbItem_1";
					selectItem();
					return false;
				}
			});
		});
	});

	// ADD CLICK FUNCTIONALITY TO EACH MENU ITEM
	$("#galleryMenu li a").click(function () {
		// alert($(this).parent().attr("id"));

		if($(this).parent().attr("id") == "prev") {

			// alert("prev");
			// alert(previousSelectedIndex);

			if(previousSelectedIndex > 1) {
				clearSelected();
				previousSelectedID = selectedID;
				selectedID = "bbItem_" + (previousSelectedIndex - 1);
				selectItem();
			} else {
				// at beginning of list
			}

		} else if($(this).parent().attr("id") == "next") {

			// alert("next");
			// alert(previousSelectedIndex);

			if((previousSelectedIndex+2) < menuItems.length) {
				clearSelected();
				previousSelectedID = selectedID;
				selectedID = "bbItem_" + (previousSelectedIndex+1);
				selectItem();
			} else {
				// at end of list

				clearSelected();
				previousSelectedID = selectedID;
				selectedID = "bbItem_1";
				selectItem();
				return false;
			}

		} else {
			clearSelected();
			previousSelectedID = selectedID;
			selectedID = $(this).parent().attr("id");
			selectItem();
		}

		return false;
	});
			
	function selectItem() {
		for(var i = 0; i < menuItems.length; i++) {
			if($("#galleryMenu li:nth-child(" + (i+1) + ")").attr("id") == selectedID) {
				showItem((i));
				previousSelectedIndex = (i);
			}
		}
	}

	function showItem(n) {
		if(n > 0) {
			bbItem = $("#gallery li:nth-child(" + (n) + ") a");
			menuItem = $("#galleryMenu li:nth-child(" + (n+1) + ") a");
			bbItem.css("display", "block");
			menuItem.addClass("selected");

			if(bbItemPosition=="") {
				bbItemPosition = bbItem.position();
			}
			
			marginBottom = bbItem.css("margin-bottom").replace("px", "");
			marginTop = bbItem.css("margin-top").replace("px", "");
			margin = marginBottom - marginTop;
			posTop = bbItemPosition.top - bbItem.height() - margin;
			//alert(posTop);

			if(previousSelectedIndex > n) {
				direction = "-=";
			} else {
				direction = "+=";
			}

			if(previousSelectedIndex < n) {
				c = n - previousSelectedIndex;
			} else {
				c = previousSelectedIndex - n;
			}

			/*alert(n);
			alert(previousSelectedID);
			alert(selectedID);*/

			if(n > 0 && (selectedID !== previousSelectedID) && (previousSelectedID != "" || n > 1)) {
				for(var i = 0; i < c; i++) {
					$("#gallery li a").animate({"top": direction + posTop + "px"}, (settings.easeInterval * (menuItems.length)) / (i+1), settings.easeFunc);
				}
			} else {
				// in here if start pos != 1 (move to correct position)
				$("#gallery li a").animate({"top": direction + posTop * c + "px"}, 0, settings.easeFunc);
				previousSelectedIndex = c+1;
			}
		} else {
			// alert("no gallery items");
		}
	}

	function clearSelected() {
		for(var i = 0; i < menuItems.length; i++) {
			$("#galleryMenu li a").removeClass("selected");
		}
	}

	// load the items
	showItem(settings.startPos);
}