var ProductPictures = new Class
({
	__container: null,
	__gallery: null,
	__mediumPicture: null,
	__thumbPictures: null,
	__zoomLink: null,
	
	initialize: function()
	{
		this.__container = $('productPictures');
		
		if (!this.__container)
			return false;
		
		this.__gallery = new Gallery();
		this.__mediumPicture = this.__container.getElement('div.medium img');
		this.__zoomLink = this.__container.getElement('a.zoom');
		
		if (!this.__zoomLink)
			return false;
		
		this.__thumbPictures = this.__container.getElements('div.thumbs img');
		
		this.assignEvents();
	},

	assignEvents: function()
	{
		this.__zoomLink.addEvent('click', this.__handleZoomClick.bind(this));
		this.__mediumPicture.addEvent('click', this.__handleZoomClick.bind(this));
		
		if (this.__thumbPictures)
			for (var i = 0; i < this.__thumbPictures.length; i++)
				this.__thumbPictures[i].addEvent('click', this.__handleThumbClick.bind(this));
	},
	
	showGallery: function(ajaxData)
	{
		this.__gallery.showPack(ajaxData.data.pictures, ajaxData.data.selected);
	},
	
	__handleZoomClick: function()
	{
		var pictureId = this.__mediumPicture.src.split('/').pop().split('.').shift();
		
		new Request.JSON
		({
			url: '/misc/pictures/' + pictureId + '/',
			onComplete: this.showGallery.bind(this)
		})
		.send();
		
		return false;
	},
	
	__handleThumbClick: function(event)
	{
		var thumbId = event.target.src.split('/').pop().split('.').shift();
		this.__mediumPicture.src = '/data/products/pictures/' + thumbId + '.medium.jpg';
		
		return false;
	}
});

var Gallery = new Class
({
	Extends: pl.smolenski.Gallery,
	
	initialize: function()
	{
		this.parent();
		this.__container = new Element('div', {'id': 'gallery', 'html': '<div class="background"></div><div class="frame"><div class="photo"></div><div class="label"></div><div class="navigation"><span class="prev">&#171;</span><span class="counter">1/1</span><span class="next">&#187;</span></div></div>'});
		this.__container.inject(document.body);
		this.__generate();
	},
	
	showPack: function(data, selected)
	{
		this.setGallery(data);
		this.show(selected);
	}
});

var Newsletter = new Class
({
	__container: null,
	__email: null,
	__prompt: '',
	
	initialize: function()
	{
		try
		{
			this.__container = $('newsletter');
			this.__email = this.__container.getElement('input[name=newsletterEmail]');
			this.__prompt = this.__email.value;

			this.__email.addEvent('focus', this.__handleFocus.bind(this));
			this.__email.addEvent('blur', this.__handleBlur.bind(this));
			this.__container.getElement('div.form div.newsletterSubmit').addEvent('click', this.__handleSubmit.bind(this));
			this.__container.getElement('div.message div.newsletterSubmit').addEvent('click', this.reset.bind(this));
		}
		catch (xcpt)
		{
		}
	},
	
	reset: function()
	{
		this.__container.getElement('div.form').removeClass('none');
		this.__container.getElement('div.message').addClass('none');
	},
	
	__send: function()
	{
		this.__container.getElement('div.form').addClass('none');

		new Request.JSON
		({
			url: '/misc/newsletter/',
			onComplete: this.__handleRequestComplete.bind(this)
		})
		.post
		({
			'address': this.__email.value
		});		
	},
	
	__showMessage: function(message)
	{
		this.__container.getElement('div.form').addClass('none');
		this.__container.getElement('div.message').removeClass('none');
		this.__container.getElement('div.message div.text').set('html', message);
	},
	
	__handleSubmit: function()
	{
		if (this.__checkEmail(this.__email.value))
			this.__send();
		else
			this.__showMessage(this.__container.getElement('div.invalidEmail').get('html'));
	},
	
	__handleFocus: function()
	{
		if (this.__email.value == this.__prompt)
			this.__email.value = '';
	},
	
	__handleBlur: function()
	{
		if (this.__email.value == '')
			this.__email.value = this.__prompt;
	},
	
	__checkEmail : function(email)
	{
		if (!email.match(/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,4})$/))
			return false;
		
		return true;
	},
	
	__handleRequestComplete: function(data)
	{
		this.__showMessage(data.data.message);
	}
});

var News = new Class
({
	__container: null,
	
	initialize: function()
	{
		try
		{
			this.__container = $('rightColumn').getElement('div.news');
			this.__assignEvents();
		}
		catch (xcpt)
		{
		}
	},
	
	__assignEvents: function()
	{
		var news = this.__container.getElements('div.singleNews');
		
		for (var i = 0; i < news.length; i++)
		{
			var moreButton = news[i].getElement('div.more');
			var lessButton = news[i].getElement('div.less');
			var continued = news[i].getElement('div.newsContinued');
			
			if (!moreButton || !lessButton || !continued)
				continue;
			
			moreButton.addEvent('click', this.show.bind(this, [news[i]]));
			lessButton.addEvent('click', this.hide.bind(this, [news[i]]));

			continued.removeClass('none');
			new Fx.Slide(continued).hide();
		}
	},
	
	show: function(singleNews)
	{
		var moreButton = singleNews.getElement('div.more');
		var lessButton = singleNews.getElement('div.less');
		var continued = singleNews.getElement('div.newsContinued');
		
		moreButton.addClass('none');
		lessButton.removeClass('none');
		
		new Fx.Slide(continued).slideIn('vertical');
		
	},
	
	hide: function(singleNews)
	{
		var moreButton = singleNews.getElement('div.more');
		var lessButton = singleNews.getElement('div.less');
		var continued = singleNews.getElement('div.newsContinued');
		
		moreButton.removeClass('none');
		lessButton.addClass('none');
		
		new Fx.Slide(continued).slideOut('vertical');
	}
});

var ContactForm = new Class
({
	__container: null,
	__fields: {},
	__prompts: {},
	
	initialize: function()
	{
		try
		{
			this.__container = $('contactForm');
			
			this.__fields.name = this.__container.getElement('input[name=name]');
			this.__fields.company = this.__container.getElement('input[name=company]');
			this.__fields.email = this.__container.getElement('input[name=email]');
			this.__fields.mobile = this.__container.getElement('input[name=mobile]');
			this.__fields.phone = this.__container.getElement('input[name=phone]');
			this.__fields.prefferedLanguage = this.__container.getElement('select[name=prefferedLanguage]');
			this.__fields.prefferedForm = this.__container.getElement('select[name=prefferedForm]');
			this.__fields.chosenSection = this.__container.getElement('select[name=chosenSection]');
			this.__fields.infoSource = this.__container.getElement('select[name=infoSource]');
			this.__fields.message = this.__container.getElement('textarea[name=message]');
			
			for (var fieldName in this.__fields)
			{
				var field = this.__fields[fieldName];
				
				if (field.hasClass('prompt'))
					this.__prompts[fieldName] = field.value;
			}

			for (var fieldName in this.__prompts)
			{
				var field = this.__fields[fieldName];
				
				field.addEvent('focus', this.__handleFocus.bind(this));
				field.addEvent('blur', this.__handleBlur.bind(this));
			}
			
			this.__container.getElement('div.sendButton').addEvent('click', this.__handleSubmit.bind(this));
		}
		catch (xcpt)
		{
		}
	},
	
//	reset: function()
//	{
//		this.__container.getElement('div.form').removeClass('none');
//		this.__container.getElement('div.message').addClass('none');
//	},
	
	__send: function()
	{
		this.__container.getElement('div.form').addClass('none');

		var postData = {};
		
		for (var fieldName in this.__fields)
		{
			var field = this.__fields[fieldName];
			postData[fieldName] = field.value;
		}
		
		new Request.JSON
		({
			url: '/misc/contact_form/',
			onComplete: this.__handleRequestComplete.bind(this)
		})
		.post(postData);		
	},
	
	__showMessage: function(message)
	{
		this.__container.getElement('p.message').removeClass('none');
	},
	
	__showErrorMessage: function()
	{
		this.__container.getElement('p.error').removeClass('none');
	},
	
	__hideErrorMessage: function()
	{
		this.__container.getElement('p.error').addClass('none');
	},
	
	__verifyForm: function()
	{
		for (var fieldName in this.__fields)
		{
			var field = this.__fields[fieldName];
			
			if (field.hasClass('required') && (field.value == '' || field.value == this.__prompts[fieldName]))
				return false;
		}		

		if (!this.__checkEmail(this.__fields.email.value))
			return false;
		
		return true;
	},
	
	__handleSubmit: function()
	{
		if (!this.__verifyForm())
			this.__showErrorMessage();
		else
			this.__send();
	},
	
	__handleFocus: function(event)
	{
		this.__hideErrorMessage();
		
		var field = event.target;
		
		if (field.value == this.__prompts[field.name])
			field.value = '';
	},
	
	__handleBlur: function(event)
	{
		var field = event.target;

		if (field.value == '')
			field.value = this.__prompts[field.name];
	},
	
	__checkEmail: function(email)
	{
		if (!email.match(/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,4})$/))
			return false;
		
		return true;
	},
	
	__handleRequestComplete: function(data)
	{
		this.__showMessage();
	}
});

var Common = new Class
({
	__logotype: null,
	__claim: null,
	
	initialize: function()
	{
		this.__logotype = $('topMenu').getElement('h1');
		this.__claim = $('topMenu').getElement('p');
		
		this.__assignEvents();
	},
	
	gotoHomePage: function()
	{
		window.location.href = '/';
	},
	
	__assignEvents: function()
	{
		this.__logotype.addEvent('click', this.gotoHomePage.bind(this));
		this.__claim.addEvent('click', this.gotoHomePage.bind(this));
	}
});


