var AfterglowDetail = new Class({
	Implements: [Options, Events, Log],
	Extends: Page,
	
	// Constants
	MAX_ATTENDEES: 32,
	ATTENDEES_COLS: 8,
	
	// Variables
	eventFacebookId: null,
	ratingRequestUrl: null,
	rating: null,
	eventId: null,
	
	// Class instances
	tellAFriendOverlay: null,
	photoOverlay: null,
	videoOverlay: null,
	photoViewer: null,
	attendForm: null,
	commentForm: null,

	initialize: function( name, element, options )
	{
		this.enableLog();
		//this.disableLog();
		this.log("AfterglowDetail::initialize(" + name + ", " + element + ", " + options + ")");

		// Invoke parent method
		this.parent( name, element, options );

		// Event data
		this.eventId = this.element.get('class').split('event-')[1].split(' ')[0];
		this.eventFacebookId = this.element.getElement('#event-data-form input[name=event-facebook-id]').value;
		
		// Tell a friend
		var eventFacebookPage = this.element.getElement('#event-data-form input[name=event-facebook-page]').value;
		var eventName = this.element.getElement('#event-data-form input[name=event-name]').value;
		var eventDate = this.element.getElement('#event-data-form input[name=event-date]').value;
		var eventMessage = this.element.getElement('#event-data-form input[name=event-message]').value;
		var event = {
			id: this.eventId,
			facebook: eventFacebookPage,
			name: eventName,
			date: eventDate,
			message: eventMessage
		};

//		this.log("this.eventId: " + this.eventId);
//		this.log("this.eventFacebookId: " + this.eventFacebookId);
//		this.log("evenFacebookPage: " + eventFacebookPage);
//		this.log("evenName: " + eventName);
//		this.log("evenDate: " + eventDate);
//		this.log("evenMessage: " + eventMessage);

		// Rating
		this.ratingRequestUrl = this.application.getConfig().requestPath.afterglow.rate;

		this.rating = new MooStarRating({
			form: 'rating',
			half: true,
			imageFolder: 'image/icon',
			imageEmpty: 'rating_star.png',
			imageFull:  'rating_star_full.png',
			imageHover: 'rating_star_hover.png',
			width: 18,
			height: 18
		});

		this.rating.addEvent('click', function(value) {
			this.log("value: " + value);

			var params = new Object();
			params.event_id = this.eventId;
			params.rating = value;

			this.log("params.event_id: " + params.event_id);

			var requestData = {
//				method: 'get',
				url: this.ratingRequestUrl,
				params: params,
				link: 'cancel',
				onRequest: this.onRateRequest.bind(this),
				onSuccess: this.onRateSuccess.bind(this)
			}

			this.application.request(requestData);

		}.bind(this));

		// Email button
		this.tellAFriendOverlay = new OverlayTellAFriendAfterglow(event);
		this.element.getElement('.social-media .email').addEvent('click', function(event) {
			event.preventDefault();

			this.tellAFriendOverlay.show();

		}.bind(this));

		// Photo viewer
		this.photoViewer = new PhotoViewer(this.element.getElement('.photos'));
		this.photoOverlay = new OverlayPhoto(this.eventId, {eventId: this.eventId});
		
		// Show photo upload
		this.photoViewer.addEvent('showPhotoUpload', function() {
			
			this.showPhotoUpload();
			
		}.bind(this));

		// Add photos
		this.photoOverlay.addEvent('addPhotos', function(photos) {
			
			this.log("AfterglowDetail::addEvent addPhotos");
			this.photoViewer.addPhotos(photos);
			
		}.bind(this));

		// Add video button
		this.videoOverlay = new OverlayVideo({eventId: this.eventId});
		
		// Setlist
		var setlistContainer = this.element.getElement('.videos');
		this.setlist = new Setlist(setlistContainer, event);
		
		// Show video upload
		this.setlist.addEvent('showVideoUpload', function(songId) {
			
			this.showVideoUpload(songId);
			
		}.bind(this));
		
		// Add video
		this.videoOverlay.addEvent('addVideo', function(video) {
			
			this.log("AfterglowDetail::addEvent addVideo");
			this.setlist.onAddVideoToSong(video);
			
		}.bind(this));
		
		// Attend form
		var attendOptions = {
			maxAttendees: this.MAX_ATTENDEES,
			attendeesCols: this.ATTENDEES_COLS,
			attendingText: 'Ik was er ook bij!',
			declinedText: 'Ik was er niet bij'
		};
		var attendContainer = this.element.getElement('.attending');
		if(attendContainer)
		{
			this.attendForm = new AttendForm(attendContainer, this.eventFacebookId, attendOptions);
		}
		// Comments
		var commentsContainer = this.element.getElement('.event-comments');
		var commentsRequestUrl = this.application.getConfig().requestPath.afterglow.comment;
		this.commentForm = new CommentForm( commentsContainer, commentsRequestUrl, this.eventId );
	},

	showPhotoUpload: function()
	{
		this.log("AfterglowDetail::showPhotoUpload()");

		this.log("this.application.getUserData(): "+ this.application.getUserData());

		if(this.application.getUserData())
		{
			this.photoOverlay.show();
		}
		else
		{
			this.loginOverlay.addEvent('hidden', function() {
				if(this.application.getUserData())
				{
					this.photoOverlay.show();
				}
			}.bind(this));

			this.loginOverlay.show("Voordat je foto's kunt uploaden moet je eerst inloggen.");
		}
	},

	showVideoUpload: function(songId)
	{
		this.log("AfterglowDetail::showVideoUpload(" + songId + ")");

		this.log("this.application.getUserData(): "+ this.application.getUserData());

		if(this.application.getUserData())
		{
			this.videoOverlay.show(songId);
		}
		else
		{
			this.loginOverlay.addEvent('hidden', function() {
				if(this.application.getUserData())
				{
					this.videoOverlay.show(songId);
				}
			}.bind(this));

			this.loginOverlay.show("Voordat je een video kunt toevoegen moet je eerst inloggen.");
		}
	},
	
	onRateRequest: function()
	{
		this.log("AfterglowDetail::onRateRequest()");

		var votesElement = this.element.getElement('.rating .votes');
		votesElement.set('text', 'Verzenden..');
	},

	onRateSuccess: function(response)
	{
		this.log("AfterglowDetail::onRateSuccess(" + response + ")");

		this.log("response.average: "+ response.average);

		this.rating.setValue(response.average);

		var amountText = (response.total_votes == 1) ? "stem" : "stemmen";
		var votesText = response.total_votes + " " + amountText;
		var votesElement = this.element.getElement('.rating .votes');
		votesElement.set('text', votesText);

//		votesElement.highlight('#bdbdbd');
		votesElement.highlight();
	}

});
