var optionsPageHandler = {
	total_elements: 0,
	maxImagesOnPage: 16,
	pages: 0
};


var paginationHandler = Class.create();
paginationHandler.prototype = {
	initialize: function(ul_list, index) {
		this.ul_list = ul_list;
		pages = this.ul_list.length; // quante pagine ci sono
		
		/* Prima pagina.  */


		/* link per prev pagina */
		var objPrevPage = document.createElement("div");
		$(objPrevPage).addClassName('prevgallery');
		$(objPrevPage).addClassName('left');
		$(objPrevPage).setAttribute('id','prev');
		
		if (pages > 1){
			new Insertion.Top($(objPrevPage), '&laquo; Anterior'); // all'inizio non c'e' link
			$('pagination').appendChild(objPrevPage);
			
			//Se index e' > 1 devo attivare il link per tornare indietro
			if (index > 1) {
				// devo creare il link per tornare indietro, solo quando passo a pagina 1
				this.enableLink($('prev'), '&laquo; Anterior');
				Event.observe($('prev'), 'click', this.changePage.bind(this, $('prev')));
			}
		}
		else{
			new Insertion.Top($(objPrevPage), '&nbsp;');
			$('pagination').appendChild(objPrevPage);
		}
		
		/* div counter */
		$A(ul_list).each(function (single_ul) {
			var li_list = single_ul.immediateDescendants()
			optionsPageHandler.total_elements += li_list.length;
		}.bind(this));
		
		var objNavigation = document.createElement("div");
		$(objNavigation).setAttribute('id','counter');
		$(objNavigation).addClassName('gallerycounter');
		$(objNavigation).addClassName('left');
		$('pagination').appendChild(objNavigation);
		
		var maxImages = 0;
		if ( optionsPageHandler.maxImagesOnPage < optionsPageHandler.total_elements) {
			maxImages = optionsPageHandler.maxImagesOnPage;
		}
		else {
			maxImages = optionsPageHandler.total_elements;
		}
		var htmlString = "";
		if ( index == 1) {
			htmlString = "1 - " + maxImages + " de " + optionsPageHandler.total_elements;
		}
		else {
			htmlString = ((index - 1) * optionsPageHandler.maxImagesOnPage + 1) +"  - " + maxImages + " de " + optionsPageHandler.total_elements;
		}
		new Insertion.Top('counter', htmlString);
		
		/* div next pagina */
		var objNextPage = document.createElement("div");
		$(objNextPage).setAttribute('id','next');
		$(objNextPage).addClassName('nextgallery');
		$(objNextPage).addClassName('right');
		
		
		if (pages > 1){
		var objNextLink = document.createElement("a");
		$(objNextLink).setAttribute('href','javascript:void(0);');
		new Insertion.Top($(objNextLink), 'Siguiente &raquo;');
		Event.observe(objNextLink, 'click', this.changePage.bind(this, objNextPage));
		$(objNextPage).appendChild(objNextLink);
		}else{
			//new Insertion.Top($(objNextPage), 'Siguiente &raquo;');
			new Insertion.Top($(objNextPage), '&nbsp;');
		}
		$('pagination').appendChild(objNextPage);

	},
	
	changePage: function(clickedLink) {
		/* Parametro in ingresso: oggetto DIV che contiene il link. La discriminazione sul link viene fatta a partire dalle classi
			di questo DIV.
			per cambiare la pagina, devo prima determinare:
				- Quale numero di pagina e' quella corrente
				- Se devo andare una pagina prima o una dopo
			e infine aggionare il counter.
		*/
		var newMax, newMin; 
		var stringCounter = $('counter').innerHTML;
		var arrayString = stringCounter.split(" - ");
		
		var arrayString2 = arrayString[1].split(" de ");
		
		var curIndex = Math.ceil(parseInt(arrayString[0]) / optionsPageHandler.maxImagesOnPage);
		
		if (clickedLink.hasClassName('prevgallery')){
			/*** PREV ***/
			// set dell'indice
			indexToShow = curIndex - 1; 
			if (indexToShow < 1 ) indexToShow = 1;

			// Verifico di essere alla prima pagina, in questo caso non posso tornare indietro
			if (indexToShow <= 1){
				this.disableLink($('prev'), '&laquo; Anterior');
				Event.stopObserving($('prev'), 'click', this.changePage.bind(this, $('prev')));
			}
			newMin = parseInt(arrayString[0]) - optionsPageHandler.maxImagesOnPage;
			newMax = parseInt(arrayString2[0]) - optionsPageHandler.maxImagesOnPage; 
			if (newMax < optionsPageHandler.maxImagesOnPage) {
				newMax = optionsPageHandler.maxImagesOnPage;
			}
			else {
				newMax = optionsPageHandler.total_elements;
			}
			if (newMin < 1) {
				newMin = 1;
			}
		} else {
			/*** NEXT ***/
			indexToShow = curIndex + 1;
			if (curIndex == 1) {
				// devo creare il link per tornare indietro, solo quando passo a pagina 1
				this.enableLink($('prev'), '&laquo; Anterior');
				Event.observe($('prev'), 'click', this.changePage.bind(this, $('prev')));
			}
			
			if (indexToShow > pages) { 
				// sono all'ultima pagina, devo ricominciare dalla prima.
				indexToShow = 1;
				newMin = "1";
				newMax = optionsPageHandler.maxImagesOnPage; 
				this.disableLink($('prev'), '&laquo; Anterior');
				Event.stopObserving($('prev'), 'click', this.changePage.bind(this, $('prev')));

			} else {
				newMin = parseInt(arrayString[0]) + optionsPageHandler.maxImagesOnPage;
				newMax = parseInt(arrayString2[0]) + optionsPageHandler.maxImagesOnPage; 
				if (newMax > optionsPageHandler.total_elements) {
					newMax = optionsPageHandler.total_elements;
			}
		}
		}
		
			$("pag" + curIndex).style.display = 'none';
			$("pag" + indexToShow).style.display = 'block';
			$('counter').innerHTML = newMin + " - " + newMax + " de " + optionsPageHandler.total_elements;
	},

	enableLink: function(parent, text) {
		// crea l'oggetto link, lo inserisce nel parent passato come parametro. L'anchor ha come testo quello scelto dall'utente.
		// restituisce l'oggetto cosi' creato.
		var objLink = document.createElement("a");
		objLink.setAttribute('href','javascript:void(0);');
		new Insertion.Top(objLink, text); 
		parent.innerHTML = ' ';
		parent.appendChild(objLink);			
	},

	disableLink: function(parent, text) {
		//elimina il link dall'oggetto div e lo sostiuisce con il testo passato in parametro.
		parent.innerHTML = '';
		new Insertion.Top(parent, text); 
	}

}


var verticalSwitcher = Class.create();
verticalSwitcher.prototype = {
	initialize: function(cnt_elements, tabs, default_open){
		this.cnt_elements = cnt_elements;
		this.tabs = tabs
		this.default_open = default_open;
		
		this.cnt_elements.each(function (element) {
			element.style.display = 'none';
		}.bind(this));
		this.tabs.each(function (tab, pos) {
			Event.observe(tab, 'click', this.showTab.bind(this, pos));
		}.bind(this));
		
		this.showTab(default_open);
		
	},
	
	showTab: function(index) {
		this.cnt_elements.each(function (element) {
			element.style.display = 'none';
		}.bind(this));
		
		this.tabs.each(function (element) {
			if (element.hasClassName('active')) {
				element.removeClassName('active');
				element.addClassName('inactive');
			}
		}.bind(this));
		
		this.cnt_elements[index].style.display = 'block';
		this.tabs[index].removeClassName('inactive');
		this.tabs[index].addClassName('active');
		// if (this.tabs[index].hasClassName('last'))
			// this.tabs[index].removeClassName('last');
		// else this.tabs[this.tabs.length -1].addClassName('last');

	}

}

var dayChanger =  Class.create();
dayChanger.prototype = {
	initialize: function(div_container, max_days, daynames){
		this.div_container = div_container;
		this.max_days = max_days;
		this.daynames = daynames;
		this.actualSel = 0;
		
		// preparo i tre link
		for (var i = 0; i < this.max_days; i++){
			var current_link = document.createElement("a");
			current_link.setAttribute('href','javascript:void(0);');
			current_link.setAttribute('id','program_' + i);
			
			if (i == 0) {
				$(current_link).addClassName('sel'); // il primo e' selezionato di default
			}
			
			$(current_link).update(daynames[i]);
			
			if (i > 0) {
				div_container.appendChild(document.createTextNode(" | "));
			}
			this.div_container.appendChild(current_link);
			Event.observe(current_link, 'click', this.changeDay.bind(this, i));			
		}
	},
	
	changeDay: function(pos) {
		
		
		var type = 'program_' + pos;
		this.wipeClassNames();
		this.hideAll();
		$(type).addClassName('sel');
		
		switch (type) {
			case 'program_0':
				$('today_programs').style.display = 'block';
				init_scroll_div('scrolldiv0',322,200,5,1); 					
				break;
			case 'program_1':
				$('tomorrow_programs').style.display = 'block';
				init_scroll_div('scrolldiv1',322,200,5,1); 					
				break;
			case 'program_2':
				$('after_tomorrow_programs').style.display = 'block';
				init_scroll_div('scrolldiv2',322,200,5,1);
				break;
		}				
	},
	
	wipeClassNames: function(){
		$('program_0').removeClassName('sel');
		$('program_1').removeClassName('sel');
		$('program_2').removeClassName('sel');
	},
	
	hideAll: function(){
		$('today_programs').style.display = 'none';
		$('tomorrow_programs').style.display = 'none';
		$('after_tomorrow_programs').style.display = 'none';		
	}
	
}

