var vlaCalendar = new Class({
	'slideDuration': 500,
	'fadeDuration': 500,
	'transition': Fx.Transitions.Quart.easeOut,
	
	'startMonday': false,
	'leadingZero': true,
	'twoDigitYear': false,
	'filePath': 'inc/',
	'rejse_id': '',
	
	'style': '',


	initialize: function(_container, _arguments) {
		//Add the provided arguments to this object by extending
		if(_arguments) $extend(this, _arguments);

		//alert(111);

		this.loading = false;
		this.container = _container = $(_container);
		var _class = this;
		
		//Insert the base into the container and initialize elements
		this.u('base', '', function() { 
			_class.mainLoader = _container.getElement('div[class=loaderA]');
			_class.tempLoader = _container.getElement('div[class=loaderB]');
			_class.label 	  = _container.getElement('span[class=label]');
			_class.arrowLeft  = _container.getElement('div[class=arrowLeft]');
			// _class.arrowLeft  = _container.getElement('span[class=arrowLeft]');
			_class.arrowRight = _container.getElement('div[class=arrowRight]');
			//_class.arrowRight = _container.getElement('span[class=arrowRight]');
			// alert("Test: " + _class.arrowRight);
			_class.initializeCalendarFunctions();
		}, _container);
	},
	
	initializeCalendarFunctions: function() {
		
		this.resetArrows();
		
		//Retrieve data (label, timestamp etc) which are stored as a Json string in a table attribute
		var vars = Json.evaluate(this.mainLoader.getElement('table').getProperty('summary'));
		var _class = this; 
		
		//Change the label
		this.label.removeClass('noHover').setHTML(vars.label)
			.onclick = vars.parent ? function() { _class.u(vars.parent, 'ts=' + vars.ts + '&parent=' + vars.current, function() { _class.fade(); }); } : null;
			
		//Add arrow click events
		if(vars.hide_left_arrow) this.hideLeftArrow();
		else if(vars.hide_right_arrow) this.hideRightArrow();
		
		this.arrowLeft.onclick = function() { _class.u(vars.current, 'ts=' + vars.pr_ts, function() { _class.slideLeft(); }); }
		this.arrowRight.onclick = function() { _class.u(vars.current, 'ts=' + vars.nx_ts, function() { _class.slideRight(); }); }		
		
		//Add cell click events
		var clickables = this.mainLoader.getElements('td');
		switch(vars.current) {				
			case 'month':
				if(this.picker) {
					clickables.each(function(_clickable) {
						_clickable.onclick = function() { _class.pick(Json.evaluate(_clickable.getProperty('date'))); }
					});
				}
				break;
			case 'year':
				clickables.each(function(_clickable) {
					_clickable.onclick = function() { _class.u('month', 'ts=' + _clickable.getProperty('ts'), function() { _class.fade(); }); }
				});
				break;
			case 'decade':
				this.label.addClass('noHover');
				clickables.each(function(_clickable) {
					_clickable.onclick = function() { _class.u('year', 'ts=' + _clickable.getProperty('ts') + '&m_ts=' + _clickable.getProperty('m_ts'), function() { _class.fade(); }); }
				});
				break;
		}
	},
	
	//Ajax update function which handles all requests
	u: function(_url, _pars, _onComplete, _id) {
		
		var _class = this;
		var dato   = '';
		var vrejse_id = '';
		
		if(!this.loading) {
			this.loading = true;
			//if(this.arrowLeft) this.resetArrows();
			// new Ajax( this.filePath + _url + '.php',
			// console.log('filepath: ' + this.filePath);
			// console.log('url: ' + _url);
			
			new Ajax( '/ajax/kalender/' + _url + '.php',
					  { method: 'post',
						update: _id ? _id : this.tempLoader,
						data: _pars + '&picker=' + (this.picker ? 1 : 0) + '&startMonday=' + (this.startMonday ? 1 : 0) + '&leadingZero=' + (this.leadingZero ? 1 : 0)
							   + '&twoDigitYear=' + (this.twoDigitYear ? 1 : 0) + '&style=' +  this.style + '&rejse_id=' + this.rejse_id,
						onComplete: function() { 
							_onComplete(); 
							_class.loading = false;
							var vrejse_id = _class.rejse_id;
							$$('.green').addEvent('click', function(){
								
								//var datoObject = Json.evaluate(this.getProperty('date'));
								var datoObject = Json.evaluate(this.getProperty('abbr'));
								var dag = datoObject.day;
								var maaned = datoObject.month;
								var aar = datoObject.year;
								
								var dato = dag + '/' + maaned + '-' + aar;
								//alert(dato);
								
								var vrejse_id = this.getProperty('title');
								
								// document.location = \'../kort/\';
								
								if (dato != '' && vrejse_id != '') {
									document.location = 'bestilling/?rid=' + vrejse_id + '&ankomst_dato=' + dato;
								}								
							});
							
							
							 
						},
						evalScripts: true } ).request();
		}
	},
	
	slideLeft: function() {
		var _class = this;
		this.loading = true;
		this.tempLoader.effect('margin-left', {duration: this.slideDuration, transition: this.transition}).start(-164, 0);
		this.mainLoader.effect('margin-left', {duration: this.slideDuration, transition: this.transition}).start(0, 164).
			addEvent('onComplete', function() { _class.loading = false; } );
		this.switchLoaders();
	},
	
	slideRight: function() {
		var _class = this;
		this.loading = true;
		this.mainLoader.effect('margin-left', {duration: this.slideDuration, transition: this.transition}).start(0, -164);
		this.tempLoader.effect('margin-left', {duration: this.slideDuration, transition: this.transition}).start(164, 0).
			addEvent('onComplete', function() { _class.loading = false; } );
		this.switchLoaders();
	},
	
	fade: function() {
		var _class = this;
		this.loading = true;
		this.tempLoader.setStyles({'opacity': 0, 'margin-left': 0});
		this.mainLoader.effect('opacity', {duration: this.fadeDuration, transition: this.transition}).start(1, 0);
		this.tempLoader.effect('opacity', {duration: this.fadeDuration, transition: this.transition}).start(0, 1)
			.addEvent('onComplete',function() {
				_class.tempLoader.setStyles({'opacity': 1, 'margin-left': -999});
				_class.loading = false;
			});
		this.switchLoaders();
	},
	
	switchLoaders: function() {
		this.mainLoader = this.mainLoader.className == 'loaderA' ? this.container.getElement('div[class=loaderB]') : this.container.getElement('div[class=loaderA]');
		this.tempLoader = this.tempLoader.className == 'loaderA' ? this.container.getElement('div[class=loaderB]') : this.container.getElement('div[class=loaderA]');
		this.initializeCalendarFunctions();
	},
	
	resetArrows: function() {
		this.arrowLeft.setStyle('visibility', 'visible');
		this.arrowRight.setStyle('visibility', 'visible');
	},
	
	hideLeftArrow: function() {
		this.arrowLeft.setStyle('visibility', 'hidden');
	},
	
	hideRightArrow: function() {
		this.arrowRight.setStyle('visibility', 'hidden');
	}
	 
});

