// show all menu options
function showAllOptions(list)
{
	var list = $(list);
	if (!$defined(list)) return false;
	
	var more = list.getElement('a.more').getParent();
	var hidden = list.getElements('li').filter(function(item) { return item.getStyle('display') == 'none'; });
	// tween more block
	var mFX = new Fx.Tween(more, { 'onComplete': function() { more.setStyle('display', 'none'); } });
	mFX.start('height', 0);
	hidden.each(function(item) { item.setStyle('opacity', 0); item.setStyle('display', 'block'); item.fade('in'); });
	
	list.getPrevious().href = 'javascript:collapseOptions("' + list.id + '");';
}

// collapse menu options
function collapseOptions(list)
{
	var list = $(list);
	if (!$defined(list)) return false;
	
	var more = list.getElement('a.more').getParent();
	var tohide = more.getAllNext('li');
	// tween more block
	more.setStyle('display', 'block');
	var mFX = new Fx.Tween(more);
	mFX.start('height', more.getPrevious().getStyle('height'));
	tohide.each(function(item) {
		item.setStyle('opacity', 1);
		item.set('tween', {
			'onComplete': function()
			{
				item.setStyle('display', 'none');
				item.set('tween', { 'onComplete': $empty });
		  }
		});
		item.fade('out');
	});
	
	list.getPrevious().href = 'javascript:showAllOptions("' + list.id + '");';
}

// subscriptions
var Subscribe = new Class({
	Implements: [Events, Options],
	options: {
	},
	
	// constructor
	initialize: function(options)
	{
		var self = this;
		
		// options
		this.setOptions(options);
		
		this.text = 'enter your email address here';
		
		window.addEvent('domready', function()
		{
			if (!$defined($('subemail'))) return;
			
			self.tcolor = $('subemail').getStyle('color');
			$('subemail').addEvent('focus', function()
			{
				if (this.value == self.text)
				{
					this.value = '';
					this.setStyle('color', '#4C1752');
				}
			});
			$('subemail').addEvent('blur', function()
			{
				if (this.value == '')
				{
					this.value = self.text;
					this.setStyle('color', self.tcolor);
				}
			});
			$('subemail').addEvent('keydown', function(event)
			{
				if (event.key == 'enter')	self.submit();
			});
		});
	},
	
	// submit email
	submit: function()
	{
		var self = this;
		var email = $('subemail').value;
		if (email == '' || email == this.text) return alert('Please, enter your email to subscribe');
		
		// validate email
		var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
		if (!emailPattern.test(email))
		{
			alert('Email ' + email + ' is not valid. Please, enter valid email address.');
			$('subemail').focus();
			return;
		}
		
		// disabling controls & sending request
		this.deControls(true);
		
		var params = new Hash({ 'email': email });
		var request = new Request({
																method: 'post',
																url: '/ajax/subscribe',
																onSuccess: function(data)
																{
																	var req = JSON.decode(data);
																	self.deControls(false);
																	if (req.status == 'ok')
																		alert('Your email is subscribed now.');
																	else if (req.status == 'double')
																		alert('Your email is already subscribed.');
																	else
																		alert('Sorry, some system error occured.');
																},
																onFailure: function(data)
																{
																	self.deControls(false);
																	alert('Sorry, Error in Request');
																}
															 }).send(params.toQueryString());
	},

	
	// disable or enable controls
	deControls: function(de)
	{
		var de = de === true;
		$('subemail').disabled = de;
		$('subbutton').disabled = de;
	}
});

var Subscribe = new Subscribe();
