// Timeline Setup
var timeLine = {
	
	quarterColor: '#2b85c2',
	quarterSelectedColor: '#fff',
	sliderMinWidth: Number(20),
	temp_sliderMinWidth: Number(20),
	selected_Q: new Array(),			//selected_quarters: new Array(),
	sliderInitRange: Number(4),
	Qs: new Array('Q1', 'Q2', 'Q3', 'Q4'),
	//totDays: 31,
	totQuarters: 24,
	dateFormat: new Template('#{day}#{sep}#{month}#{sep}#{year}'),
	queryDateFormat: new Template('#{year}#{month}#{day}'),
	dateFormatIndexer: new Array('day', 'month', 'year'),
	locale: 'it',
	
	initialize: function(l) {
		if(l) 
			this.locale = l;
		timeLine.addQuarters();

		// Setup handler sx e dx
		var sxHandler = new Control.Slider('tmSliderHandlerSx','tmHolderCont', {minimum: -5, alignX: 5}); 
		var dxHandler = new Control.Slider('tmSliderHandlerDx','tmHolderCont', {alignX: -2});

		sxHandler.options.onSlide = function(value) {timeLine.checkSlider('Sx');};
		dxHandler.options.onSlide = function(value) {timeLine.checkSlider('Dx');};
		sxHandler.options.onChange = function(value) {timeLine.dataGridConnector(timeLine.quarterSelectStart, timeLine.quarterSelectEnd);}
		dxHandler.options.onChange = function(value) {timeLine.dataGridConnector(timeLine.quarterSelectStart, timeLine.quarterSelectEnd);}
		
		if(locale != 'it') {
			this.dateFormat = new Template('#{month}#{sep}#{day}#{sep}#{year}');
			this.dateFormatIndexer = new Array('month', 'day', 'year');
		}
		
		$('tmSliderHandlerSx').style.left = '-9px';
		$('tmSliderHandlerDx').style.left = '113px';
		timeLine.getSelectedQuarters();
		timeLine.setInitStatus();
	},
	
	dataGridConnector: function(s, e) {
		if(s && e) {
			this.setStart = s.offsetLeft; 
			this.setEnd = e.offsetLeft;
			Datagrid.CallObj.start = this.dateObjToQuery(s);
			Datagrid.CallObj.end = this.dateObjToQuery(e, 'end');
			$('ArchivioFilterFrom').value = this.dateObjToInput(s);
			$('ArchivioFilterTo').value = this.dateObjToInput(e, 'end');
			//$('ArchivioFilterFrom').updateDatagrid('fromTimeline');
			//$('ArchivioFilterTo').updateDatagrid('fromTimeline');
			Datagrid.refreshDatas();
		}
	},
	
	dateObjToQuery: function(DateObj, t) {
		Agenda.checkLead();		// Verifico se l'anno è bisestile
		var retDate = {
			day	: '0',
			month	: (this.getQuarterIndexByMonth(DateObj.getAttribute('month')) * 3),
			year	: DateObj.getAttribute('year')
		}
		if(t && t == 'end')
			retDate.month += 2;
		if (t && t == 'end') 
			retDate.day = Agenda.defaultOptions.monthsDaycount[retDate.month];
		else 
			retDate.day = '01';
		retDate.month++;
		if(retDate.month < 10)
			retDate.month = new String('0' + retDate.month);
		return this.queryDateFormat.evaluate(retDate);
	},
	
	dateObjToInput: function(DateObj, t) {
		Agenda.checkLead();		// Verifico se l'anno è bisestile
		var retDate = {
			sep	: '/',
			day	: '0',
			month	: (this.getQuarterIndexByMonth(DateObj.getAttribute('month')) * 3),
			year	: DateObj.getAttribute('year')
		}
		if(t && t == 'end')
			retDate.month += 2;
		if (t && t == 'end') 
			retDate.day = Agenda.defaultOptions.monthsDaycount[retDate.month];
		else 
			retDate.day = '01';
		retDate.month++;
		if(retDate.month < 10)
			retDate.month = new String('0' + retDate.month);
		return this.dateFormat.evaluate(retDate);
	},
	
	getQuarterByDate: function(DateObj) {
		return this.Qs[this.getQuarterIndexByMonth(DateObj.getMonth())];
	},
	
	getQuarterIndexByMonth: function(m) {
		if(m < 3)
			return 0; 
		if(m >= 3 && m < 6)
			return 1; 
		if(m >= 6 && m < 9)
			return 2; 
		if(m >= 9 && m < 12)
			return 3; 
	},
	
	getNextQuarterByDate: function(DateObj) {
		var next = DateObj;
		if(DateObj.getMonth() < 9)
			return new Date(next.setMonth(DateObj.getMonth()+3));
		else {
			next.setMonth(0);
			next.setFullYear(DateObj.getFullYear()+1);
			return new Date(next);
		}
	},
	
	checkDateInQuarter: function(DateObj, QObj) {
		if(
			this.getQuarterByDate(DateObj) == this.getQuarterByDate(QObj) && 
			DateObj.getFullYear() == QObj.getFullYear()
		) return true;
		else 
			return false;
	},
	
	addQuarters: function() {
		
		var today = new Date();
		today.setDate(1);
		today.setMonth(0);
		
		var start = new Date();
		start.setFullYear(today.getFullYear()-5);
		start.setDate(1);
		start.setMonth(0);
		
		this.startQ = start;
		this.endQ = today;
		this.curQ = start;
		
		for (var i=0; i < timeLine.totQuarters; i++) {
			var newQuarter = new Element('div', {
				title: timeLine.getQuarterByDate(this.curQ), 
				id: timeLine.curQ.getFullYear() + '_' + timeLine.getQuarterByDate(this.curQ)
			}).addClassName('singleQHolder').update(timeLine.getQuarterByDate(this.curQ));
			newQuarter.writeAttribute('day', timeLine.curQ.getDate());
			newQuarter.writeAttribute('month', timeLine.curQ.getMonth());			
			newQuarter.writeAttribute('year', timeLine.curQ.getFullYear());
			if(this.curQ.getFullYear() != timeLine.curY) {
				newQuarter.addClassName('newYearContainer');
				var newYear = new Element('div').addClassName('tm_month').update(timeLine.curQ.getFullYear());
				newQuarter.appendChild(newYear);
				timeLine.curY = timeLine.curQ.getFullYear();
			}
			this.curQ = this.getNextQuarterByDate(this.curQ);
			if(this.curQ.getFullYear() != timeLine.curY) 
				newQuarter.style.background = 'none'

			$('tmDays').appendChild(newQuarter);
			
		}
	},
	
	setInitStatus: function() {
		timeLine.setPosition(400, 440);
	},
	
	selectCurrentDay: function(d) {
		this.quarterSelectStart = d;
		this.quarterSelectEnd = d;
	},
	
	setPositionByDate: function(date, t)
	{
		var date = date.split('/');
		var d = new Date();
		d.setFullYear(date[timeLine.dateFormatIndexer.indexOf('year')]);
		d.setMonth(date[timeLine.dateFormatIndexer.indexOf('month')]-1);
		d.setDate(date[timeLine.dateFormatIndexer.indexOf('day')]);
		if(t == 'from') {
			var q = $(d.getFullYear() + '_' + this.getQuarterByDate(d));
			this.setPosition(q.offsetLeft, this.setEnd);
		} else {
			var q = $(d.getFullYear() + '_' + this.getQuarterByDate(d));
			this.setPosition(this.setStart, q.offsetLeft);
		}			
	},
	
	setPosition: function(start, end) {
		if(typeof start == 'object')
			start = start.offsetLeft;
		if(typeof end == 'object')
			end = end.offsetLeft;
		this.setStart = start;
		this.setEnd = end;
		new Effect.Move('tmSliderHandlerSx', {x: start - 6, mode: 'absolute', afterUpdate: function() {
			timeLine.getSelectedQuarters();
		}, afterFinish: function() {
			timeLine.dataGridConnector(timeLine.quarterSelectStart, timeLine.quarterSelectEnd);
		}});
		$('tmSlider').style.top = '43px';
		new Effect.Move('tmSliderHandlerDx', {x: end + 12, mode: 'absolute'});
		new Effect.Move('tmSliderSelBar', {x: start, y:0,mode: 'absolute'});
		new Effect.Move('tmSlider', {x: start, y: 43, mode: 'absolute'});
		
		$('tmSlider').morph('width: '+(end-start+20)+'px');
		$('tmSliderBar').morph('width: '+(end-start+20)+'px');
	},
	
	checkSlider: function(t) {
		var dx_x = Number($('tmSliderHandlerDx').style.left.split('px')[0]);
		var sx_x = Number($('tmSliderHandlerSx').style.left.split('px')[0]);
		var handler_x = Number($('tmSliderHandler'+t).style.left.split('px')[0]);
		var handler = $('tmSliderHandler'+t);
		
		if(t == 'Sx' && handler_x > (dx_x - timeLine.sliderMinWidth)) 
			handler.style.left = dx_x - timeLine.sliderMinWidth + 'px';
		else if(t == 'Dx' && handler_x < (sx_x + timeLine.sliderMinWidth)) 
			handler.style.left = sx_x + timeLine.sliderMinWidth + 'px';
		else {
			$('tmSliderBar').style.width = dx_x - sx_x - 2 + 'px';
			$('tmSliderSelBar').style.width = dx_x - sx_x - 2 + 'px';
			$('tmSlider').style.left = sx_x + 9 + 'px';
			$('tmSliderSelBar').style.left = sx_x + 9 + 'px';
		}
		timeLine.getSelectedQuarters();
		
	},
	
	getSelectedQuarters: function() {
		var dx_x = Number($('tmSliderHandlerDx').style.left.split('px')[0]);
		var sx_x = Number($('tmSliderHandlerSx').style.left.split('px')[0]);
		var step = parseInt(750 / 24);
		var start = parseInt(sx_x / step)+1;
		var end = parseInt((dx_x - sx_x) / step)+1;
		timeLine.selected_quarters = new Array();
		for(var i=0; i<$('tmDays').childElements().length; i++) {
			var thisDay = $('tmDays').childNodes[i];
			if(thisDay.offsetLeft > sx_x && thisDay.offsetLeft < dx_x) {
				thisDay.style.color = timeLine.quarterSelectedColor;
				timeLine.selected_quarters.push(thisDay.id);
			} else if(thisDay.className != 'tm_month') thisDay.style.color = timeLine.quarterColor;
		}
		
		this.quarterSelectStart = $(timeLine.selected_quarters[0]);
		this.quarterSelectEnd = $(timeLine.selected_quarters[timeLine.selected_quarters.length-1]);
	
	},
	
	zeroParse: function(a) {
		a = new Number(a);
		if(a<10)
			a = new String('0' + a);
		return a;
	}
	
}

timeLine.initialize(locale);