Array.max = function( array ){
	return Math.max.apply( Math, array );
};

$.fn.panelSlider = function(settings) {
	settings = $.extend({
		btnPrev: null,
		btnNext: null,
		btnPlayPause: null,

		menuTabs: false,		
		loadTabsFromMarkup: false,
		tabsItems: [],
		tabs: null,
		tabsColor: null,
		tabsBorderColor: null,
		tabsDim: 10,

		auto: null,
		time: 5000,
		speed: 850,
		easing: null,
		vertical: false,         	// per il momento lo slide verticale non è implementato
		circular: true,				// per il momento non è implementato
		visible: 4,
		start: 0,
		scroll: 1,
		beforeStart: null,       	// per il momento non è implementato
		afterEnd: null           	// per il momento non è implementato
	}, settings || {});

	return this.each(function(){
		var container = $(this);
		var panelWidth = container.find(".panel").width();
		var panelCount = container.find(".panel").size();
		var totalWidth = panelWidth*panelCount;
		var cPanel = 1;
		var playInterval = null;
		var playStatus = true;
		
		var panel_heights = new Array();
		$(".panel").each(function(){
			panel_heights.push($(this).height());
		})
		$("#news").height(Array.max(panel_heights))

		container.css({"overflow": "hidden", "position": "relative"})
		$(".panel", container).css("float", "left");
		$("div.panelslider_container", container).css({"width": totalWidth, "position": "absolute"});


		function createMenuTabs() {
			//tabs html
			var tab_items = settings.tabItems;
			var htmltabs = '<ul class="panelslider_tabcontainer">';
			for (i=0; i<panelCount; i++) {
				htmltabs += '<li class="tab"><a href="javascript:void(0)"><span>' + tab_items[i] + '</span></a></li>'
			}
			htmltabs +='<br class="clear"></ul>'
			$(settings.tabs).html(htmltabs);
	
			//tabs css
			//$("li.tab", settings.tabs).css({"list-style-type": "none", "float": "left", "font-size": settings.tabsDim, "height": settings.tabsDim, "width": settings.tabsDim, "margin-right": (settings.tabsDim/2)+3, "color": "#FFF", "border": "1px solid", "border-color": settings.tabsBorderColor});
			$("li.tab", settings.tabs).css({"list-style-type": "none", "float": "left"});
			//$("li.tab a", settings.tabs).css({"display": "block", "width": settings.tabsDim, "height": settings.tabsDim});
			//$("li.tab a span", settings.tabs).css({"display": "none"});
//			var firstTab = $("li.tab", settings.tabs).get(0);
//			$(firstTab).addClass("selected");
//	
//			//tabs events
//			$("li.tab a", settings.tabs).each(function(z) {
//				$(this).click(function(){
//					goToPanel(z)
//				});
//			});
		}

		function createTabs() {
			//tabs html
			var htmltabs = '<ul class="panelslider_tabcontainer">';
			for (i=0; i<panelCount; i++) {
				htmltabs += '<li class="tab"><a href="javascript:void(0)">&nbsp;<span>' + (i+1) + '</span></a></li>'
			}
			htmltabs +='<br class="clear"></ul>'
			$(settings.tabs).html(htmltabs);

			//tabs css
			$("li.tab", settings.tabs).css({"list-style-type": "none", "float": "left", "font-size": settings.tabsDim, "height": settings.tabsDim, "width": settings.tabsDim, "margin-right": (settings.tabsDim/2)+3, "color": "#FFF", "border": "1px solid", "border-color": settings.tabsBorderColor});
			$("li.tab a", settings.tabs).css({"display": "block", "width": settings.tabsDim, "height": settings.tabsDim});
			$("li.tab a span", settings.tabs).css({"display": "none"});
//			var firstTab = $("li.tab", settings.tabs).get(0);
//			$(firstTab).addClass("selected");

//			//tabs events
//			$("li.tab a", settings.tabs).each(function(z) {
//				$(this).click(function(){
//					goToPanel(z)
//				});
//			});
		}
		
		function loadTabs() {
            //per ora nulla...
		}
		
		function manageAutoSlide() {

		}

		function stoptimer() {
				clearInterval(playInterval)
				playStatus = false;
		}		
		function starttimer() {
				playInterval = setInterval(function() { 
					goNext() 
				}, settings.time);
				playStatus = true;
		}		
		


		function setCurrentTab() {
			$("li.tab", settings.tabs).removeClass("selected");
			var currentTab = $("li.tab", settings.tabs).get(cPanel-1);
			$(currentTab).addClass("selected");
		}

		
		function goPrev() {
			if (cPanel == 1) {
				var cnt = - (panelWidth*(panelCount - 1));
				cPanel = panelCount;
			} else {
				cPanel -= 1;
				var cnt = - (panelWidth*(cPanel - 1));
			};
			$("div.panelslider_container", container).animate({ left: cnt}, settings.speed, settings.easing);
			setCurrentTab();
			manageAutoSlide();
			return false;
		};

		function goNext() {
			if (cPanel == panelCount) {
				var cnt = 0;
				cPanel = 1;
			} else {
				var cnt = - (panelWidth*cPanel);
				cPanel += 1;
			};
			$("div.panelslider_container", container).animate({ left: cnt}, settings.speed, settings.easing);
			setCurrentTab();
			manageAutoSlide();
			return false;
		};

		function goToPanel(z) {
			var cnt = - (panelWidth*z);
			cPanel = z + 1;
			//$("div.panelslider_container", container).animate({ left: cnt}, settings.speed, settings.easing);
			$("div.panelslider_container", container).css("left", cnt);
			setCurrentTab();
			manageAutoSlide();
			return false;
		};
		
		//tabs
		if (settings.loadTabsFromMarkup){
		    loadTabs()
		} else { 
		    if (settings.menuTabs) {
			    createMenuTabs();
		    } else {
			    createTabs()
		    }
		}
		var firstTab = $("li.tab", settings.tabs).get(0);
		$(firstTab).addClass("selected");
	
		//tabs events
	    $("li.tab a", settings.tabs).each(function(z) {
			$(this).click(function(){
				goToPanel(z)
				stoptimer();
			});
			$(this).mouseover(function(){
				goToPanel(z);
				stoptimer();
			});			
			$(this).mouseleave(function(){
				goToPanel(z);
				starttimer();
			});	
		});
		
		
		$(settings.btnPrev).click(function(){
			goPrev()
		});

		$(settings.btnPlayPause).click(function(){
			if (playStatus) {
				clearInterval(playInterval)
				playStatus = false;
			} else {
				playInterval = setInterval(function() { 
					goNext() 
				}, settings.time);
				playStatus = true;
			}
		});

		$(settings.btnNext).click(function(){
			goNext()
		});

		if(settings.auto) {
			playInterval = setInterval(function() { 
				goNext() 
			}, settings.time);
		}

	});
}

//menu box scorrevole
$(function() {
	var options = {
		btnPrev: "a.goleft",
		btnNext: "a.goright",
		btnPlayPause: "a.playpause",
		loadTabsFromMarkup: true,
		menuTabs: true,
		tabItems: ["aaaaa", "bbbbb", "cccccc"],
		tabs: "#tabs",
		
		tabsDim:8,
		auto: true,
		time: 5000
	}
	$("#news").panelSlider(options);
	//var options1 = {
		//newsList: "#flashnews_list"
	//}
});