ProjectNavigation = Class.create();
Object.extend(ProjectNavigation.prototype, {
	actives: null,
	label: null,
	
	initialize: function(label, slider, previous, next, on, off, duration, page_len) {
		var me = this;
		
		me.actives = [];
		me.label = label ? label : "PrjName";
		me.slider = slider ? slider : "projects";
		me.next = next ? next : "next";
		me.previous = previous ? previous : "previous";
		me.duration = duration ? duration : 0.9999;
		me.page_len = page_len ? page_len : 19;
		me.on = on ? on : { visibility: "inherit", width: "23px" };
		me.off = off ? off : { visibility: "hidden", width: "0px" };
		
		me.countPages();
	},
	
	over: function(btn) {
		var me = this;
		if (me.actives[btn.id]) { me.actives[btn.id].cancel(); }
		me.actives[btn.id] = null;

		var pos = Position.cumulativeOffset(btn);
		Element.setStyle(me.label, { left: (pos[0]-7) + "px", top: (pos[1]-25) + "px", display: "inline" });
		Element.setOpacity(me.label, 0);
		$(me.label).getElementsByTagName("span")[0].innerHTML = btn.previousSibling.firstChild.innerHTML;

		me.actives[btn.id] = new Effect.Parallel( 
		[
			new Effect.Opacity(
				btn, 
				{
					to: 0.9999,
					sync: true
				}
			),
			
			new Effect.Opacity(
				me.label, 
				{ 
					to: 0.9999,
					sync: true
				}
			)
		], 
		{ 
			duration: Math.abs(me.duration), 
			afterFinish: function() {
				me.actives[btn.id] = null;
			} 
		});
	},
	
	out: function(btn) {
		var me = this;
		if (me.actives[btn.id]) me.actives[btn.id].cancel();
		me.actives[btn.id] = null;
		
		me.actives[btn.id] = new Effect.Parallel( 
		[
			new Effect.Opacity(
				btn, 
				{  
					to: btn.parentNode.className == "On" ? .9999 : .0001,
					sync: true
				}
			),
			
			new Effect.Opacity(
				me.label, 
				{ 
					to: 0.0001,
					sync: true
				}
			)
		], 
		{ 
			duration: Math.abs(me.duration) / 2, 
			afterFinish: function() {
				me.actives[btn.id] = null;
			} 
		});
	},
	
	nextPage: function() {
		var me = this;
		if (!me.pageCount) me.countPages();
		if (!me.currentPage) me.currentPage = 1;
		var lis = $(me.slider).getElementsByTagName("li");
		
		if (me.currentPage < me.pageCount) {
			if (me.duration > 0) {
				new Effect.Slide(
					$(me.slider).firstChild,
					{ 
						direction: rightToLeft,
						duration: Math.abs(me.duration),
						x: lis[me.currentPage-1].offsetWidth * me.page_len,
						afterFinish: function() {
							if (me.afterPageChange) me.afterPageChange();
						}
					}
				);
			} else {
				new Effect.Fade(
					$(me.slider).firstChild.getElementsByTagName("li").item(me.currentPage-1),
					{ 
						direction: leftToRight,
						duration: Math.abs(me.duration),
						from: 1,
						to: 0.0000001,
						afterFinish: function() {
							if (me.afterPageChange) me.afterPageChange();
						} 
					}
				);
			}
			
			me.currentPage++;
		}
		
		if (me.currentPage >= me.pageCount) {
			me.currentPage = me.pageCount;
			Element.setStyle(me.next, me.off);
		}
		
		if (me.currentPage > 1) {
			Element.setStyle(me.previous, me.on);
		}
	},
	
	previousPage: function() {
		var me = this;
		if (!me.pageCount) me.countPages();
		if (!me.currentPage) me.currentPage = 1;
		var lis = $(me.slider).getElementsByTagName("li");
				
		if (me.currentPage > 1) {
			if (me.duration > 0) {
				new Effect.Slide(
					$(me.slider).firstChild,
					{ 
						direction: leftToRight,
						duration: Math.abs(me.duration),
						x: lis[me.currentPage-2].offsetWidth * me.page_len,
						afterFinish: function() {
							if (me.afterPageChange) me.afterPageChange();
						} 
					}
				);
			} else {
				new Effect.Fade(
					$(me.slider).firstChild.getElementsByTagName("li").item(me.currentPage-2),
					{ 
						direction: leftToRight,
						duration: Math.abs(me.duration),
						from: 0.0000001,
						to: 1,
						afterFinish: function() {
							if (me.afterPageChange) me.afterPageChange();
						} 
					}
				);
			}
			me.currentPage--;
		}
		
		if (me.currentPage <= 1) {
			me.currentPage = 1;
			Element.setStyle(me.previous, me.off);
		}
		
		if (me.currentPage < me.pageCount) {
			Element.setStyle(me.next, me.on);
		}
	},
	
	countPages: function() {
		var me = this;
		var lis = $(me.slider).getElementsByTagName("li");
		
		me.pageCount = Math.ceil(lis.length / me.page_len);
		me.pageWidth = lis[0].offsetWidth * me.page_len;
		
		var ulWidth = 0;
		for (var i=0; i<lis.length; i++) ulWidth += lis[i].offsetWidth;
		
		
		Element.setStyle($(me.slider).firstChild, { width: ulWidth + "px"});
	}
});

var Nav = null, Imgs = null;
Event.observe(window, 'load', function() {
	// PROJECTS PAGER
	Nav = new ProjectNavigation();
	
	// PROECT IMAGES PAGER
	Imgs = new ProjectNavigation(null, "imgs", $Class("images", "btnleft"), $Class("images", "btnright"), { display: "block"}, { display: "none" }, -.5, 1);
	Imgs.afterPageChange = function() {
		var lis = $(this.slider).getElementsByTagName("li");
		resizeImagesBox(lis[this.currentPage-1].firstChild);
	}
});
