(function($) {
	jQuery.fn.grid = function(options) {
		var settings = jQuery.extend({
			item: "div",
			nav: "#nav",
			navItem: "{%PAGE%}",
			navItemOn: "{%PAGE%}",
			step : 3,
			autoSlide: false,
			autoHeight: true,
			overStyle: {},
			selected: ".selected"
		}, options);

		return this.each(function() {
			var defaultStyle = {};
			var items = $(settings["item"],this);

			for(var p in settings["overStyle"])
				defaultStyle[p] = items.css(p);

			items.hover(
				function(){
					$(this).animate(settings["overStyle"]);
				},
				function(){
					$(this).animate(defaultStyle);
				}
			)


			var nbPages = Math.floor(items.length/settings['step']) + (items.length%settings['step']?1:0);
			var nav = $(settings["nav"],this);
			var navItems = [];
			var pages = [];
			var wrapper = $("<div class='coda-slider'>").width($(this).innerWidth());
			var parent = $(items.get(0)).parent();
			if(nav.length>0)
			{
				
				for(var n = 0; n<nbPages; n++)
				{
					navItems.push($('<a href="javascript:void(0)"></a>')
						.append(settings["navItem"].replace("{%PAGE%}", n+1))
						/*.mouseover(function(){
							gotoPage($(this).index());
						})*/
						.appendTo(nav));

					var page = $("<div class='panel'>&nbsp;</div>");
					page.width($(this).innerWidth());
					page.hide();
					page.appendTo(wrapper);

					pages.push(page);

					for(var nItem = n*settings['step']; nItem<((n+1)*settings['step']) && nItem<items.length; nItem++)
					{
						page.append(items.get(nItem));
					}
				}
				$(".previous, .next",nav.parent()).click(function(){
					
					if($(this).hasClass("previous"))
						gotoPage(Math.max(0,selectedNavItemIndex-1));
					else
						gotoPage(Math.min(nbPages-1,selectedNavItemIndex+1));
				});
			}

			if(pages.length<=1)
				nav.hide();
			wrapper.appendTo(parent);
			wrapper.codaSlider({
								dynamicTabs:false,
								dynamicArrows: false,
								autoSlide: true,
								crossLinking: false,
								slideEaseDuration: 1000,
								slideEaseFunction: "swing",
								autoSlideInterval: 10000,
								autoHeight:settings["autoHeight"],
								autoHeightEaseDuration: 500,
								autoHeightEaseFunction: "swing",
								autoSlide:settings['autoSlide'],
								navSelector: $("a",nav), //settings["nav"] + " a",
								navTriggerEvent: "click",

								onCurrentChange: function(n){
									selectMenuItem(n-1)
								}
							});



			var selectedPage;

			function gotoPage(nPage,force)
			{
				wrapper.each(function(){this.slideTo(nPage+1,force)})
				if(selectedPage == pages[nPage])
					return;
				//selectedPage && selectedPage.hide(200);
				selectedPage = pages[nPage];
				//selectedPage.show(200);

			   //wrapper.cycle("advance", nPage)
				selectMenuItem(nPage);
			}
			function gotoSelectedItem()
			{
				if($(settings["selected"],items).length)
					gotoPage($(settings["selected"],items).parents(".panel").index(),true);
				else
					gotoPage(0,true);

			}
			var selectedNavItem;
			var selectedNavItemIndex;
			function selectMenuItem(n)
			{
				if(selectedNavItem == navItems[n])
					return;
				if(selectedNavItem)
					selectedNavItem.html(settings["navItem"].replace("{%PAGE%}", selectedNavItemIndex+1));
				
				selectedNavItem = navItems[n]
				selectedNavItem.html(settings["navItemOn"].replace("{%PAGE%}", n+1));
				
				//Update prev/next menu
				if(n<=0)
					$(".previous",nav.parent()).hide();
				else
					$(".previous",nav.parent()).show();

				if(n>=nbPages-1)
					$(".next",nav.parent()).hide();
				else
					$(".next",nav.parent()).show();

				selectedNavItemIndex = n;


			}
			gotoSelectedItem();
		});
		return this;
	};
})(jQuery);



