var OverlayTellAFriend = new Class({
	Implements: [Options, Events, Log],
	Extends: Overlay,
	
	options: {
	},
	
	// Constants
	AUTO_HIDE_DELAY: 5000,

	// Variables
	event: null,
	form: null,
	requestUrl: null,
	explanationMessage: null,
	
	initialize: function(event, options)
	{
		this.enableLog();
		this.log("OverlayTellAFriend::initialize()");

		this.event = event;

		this.setOptions(options);

		this.parent('tellafriend', options);
	},

	reset: function()
	{
		this.log("OverlayTellAFriend::reset()");

		// Invoke parent
		this.parent();

		// Success message
		this.successMessage.fx.set(0);
		this.successMessage.hide();
	},

	setContent: function()
	{
		this.log("OverlayTellAFriend::setContent()");
	},
	
	initilizeWindow: function()
	{
		this.log("OverlayTellAFriend::initilizeWindow()");
		
		// Invoke parent
		this.parent();

		// Window
		this.window = this.element.getElement('.window');

		// Explanation message
		this.explanationMessage = this.element.getElement('.explanation .message');

		// Set content
		this.setContent();

		// Form
		this.initForm();
	},

	/*
	 * Init form
	 */
	initForm: function(type)
	{
		this.log("OverlayTellAFriend::initForm(" + type + ")");

		// Success message
		this.successMessage = this.element.getElement('.success');
		this.successMessage.updateAccount = this.successMessage.getElement('.update-account');
		this.successMessage.fx = new Fx.Tween(this.successMessage, {
			duration: 500,
			transition: Fx.Transitions.Quad.easeOut,
			property: 'opacity',
			link: 'cancel'
		});
		this.successMessage.fx.addEvent('start', function() {
			if(this.successMessage.getStyle('opacity').toInt() == 0)
			{
				this.successMessage.show();
			}
		}.bind(this));
		this.successMessage.fx.addEvent('complete', function() {
			if(this.successMessage.getStyle('opacity').toInt() == 0)
			{
				this.successMessage.hide();
			}
		}.bind(this));
		this.successMessage.fx.set(0);

		var handlers = {
			onRequest: function()
			{
				//this.log("onRequest");

			}.bind(this),
			onSuccess: function(response)
			{
				if(response.success)
				{
					this.log("succes!");

					this.close.delay(this.AUTO_HIDE_DELAY, this);

					// Success message
					this.successMessage.fx.start(1);

					this.fireEvent('success', [response]);
				}
				else
				{
					this.log("error!");

					// Error message
					this.errorMessage.fx.start(1);
				}
			}.bind(this),
			onFailure: function(xhr)
			{
				this.log("onFailure");

				this.form.formErrorMessage.clear();
				this.form.formErrorMessage.addMessage('email', 0, "Verzenden mislukt");
				this.form.formErrorMessage.show();
			}.bind(this)
		};

		var options = {
			showLoader: true,
			allowStatus: true,
			formErrorMessage: {
				allow: true,
				container: this.element.getElement('.form-message-container'),
				allowClose: false
			}
		};

		var elementOptions = {
		};

		this.log("this.requestUrl: " + this.requestUrl);

		var form = new JsonForm(this.element.getElement('.form'), this.requestUrl, handlers, options);

		var nameElement = new FormElement(form, 'name', elementOptions);
		nameElement.addValidation(Form.REGEX_NAME, 'Vul je naam in');
		form.addElement(nameElement);

		var emailElement = new FormElement(form, 'email', elementOptions);
		emailElement.addValidation(Form.REGEX_EMAIL, 'Vul een geldig e-mailadres in');
		form.addElement(emailElement);

		var receiverNameElement = new FormElement(form, 'receiver-name', elementOptions);
		receiverNameElement.addValidation(Form.REGEX_NAME, 'Vul de naam van de ontvanger in');
		form.addElement(receiverNameElement);

		var receiverEmailElement = new FormElement(form, 'receiver-email', elementOptions);
		receiverEmailElement.addValidation(Form.REGEX_EMAIL, 'Vul het e-mailadres van de ontvanger in');
		form.addElement(receiverEmailElement);

		var messageElement = new FormElement(form, 'message', elementOptions);
		messageElement.addValidation(Form.REGEX_TEXT, 'Vul een persoonlijke boodschap in');
		form.addElement(messageElement);
		// Set message element
		if(this.event.message)
		{
			messageElement.element.set('html', this.event.message);
		}
		
		// Add buttons
		var submitButton = new FormSubmitButton(form, '.button.submit', {showLoader: true});
		form.addButton(submitButton);
		
		// Cancel button
		this.element.getElement('.cancel').addEvent('click', function(event){
			event.preventDefault();
			this.close();
		}.bind(this));

		// Save form
		this.form = form;
		this.form.addValue('event-id', this.event.id);
		this.form.addValue('type', type);
	}
	
});
