/**
 * Gallery
 */

var Gallery = {
	loadImage: null,

	show: function(image, thumb) {
		$$('ul.thumbnails a.selected').each(function (node) {
			node.removeClassName("selected");
		});
		$("GalleryImageLoading").show();
		Gallery.loadImage = new Image();
		Gallery.loadImage.onload = function() {
			$("GalleryImageLoading").hide();
			$("GalleryImage").src = Gallery.loadImage.src;
		}
		Gallery.loadImage.src = image;
		$("__gt" + thumb).addClassName('selected');
	}
}

/**
 * Login
 */

var loggingInProgress = false;

function doLogin()
{
	if (loggingInProgress == true) return false;
	loggingInProgress = true;
	$('LoginProgress').show();
	$('LoginError').hide();
	$('LoginForm').request({
		onComplete: function(transport) {
			var response = transport.responseText.evalJSON();

			switch (response.result) {
				case 'error': {
					loggingInProgress = false;
					$('LoginProgress').hide();
					$('LoginError').show();
					break;
				}
				case 'ok': {
					window.location = window.location;
					break;
				}
				default: {
					$('LoginProgress').hide();
					$('LoginError').show();
					loggingInProgress = false;
					break;
				}
			}
		},

		onFailure: function() {
			$('LoginProgress').hide();
			$('LoginError').show();
			loggingInProgress = false;
		}
	});
}

/**
 * Newsletter
 */

var newsletterInProgress = false;

function addToNewsletter()
{
	if (newsletterInProgress == true) return false;
	newsletterInProgress = true;
	$('NewsletterProgress').show();
	$('NewsletterError').hide();
	$('NewsletterOk').hide();
	$('NewsletterForm').request({
		parameters: { 'do': 'add' },
		onComplete: function(transport) {
			var response = transport.responseText.evalJSON();

			switch (response.result) {
				case 'error': {
					newsletterInProgress = false;
					$('NewsletterProgress').hide();
					$('NewsletterError').update(response.message);
					$('NewsletterError').show();
					break;
				}
				case 'ok': {
					$('NewsletterProgress').hide();
					$('NewsletterOk').update(response.message);
					$('NewsletterOk').show();
					break;
				}
				default: {
					$('NewsletterProgress').hide();
					$('NewsletterError').update('Unknown error');
					$('NewsletterError').show();
					newsletterInProgress = false;
					break;
				}
			}
		},

		onFailure: function() {
			$('NewsletterProgress').hide();
			$('NewsletterError').update('Unknown error');
			$('NewsletterError').show();
			newsletterInProgress = false;
		}
	});
}

/**
 * Search
 */

function validateQuery(defaultString)
{
	queryString = $F('SearchQuery');
	return !(queryString == defaultString || queryString.length < 3);

}

/**
 * Registration
 */

var RegisterForm = {

	inProgress: false,

	dehiliteErrors: function()
	{
		$$('input.reg_input').each(function(item, index) {
			$(item).removeClassName('error');
		});
		$$('div.error_info').each(function(item, index) {
			$(item).removeClassName('visible');
		});
	},

	hiliteErrors: function(fields)
	{
		fields.each(function(item, index) {
			obj = $(item);
			obj.addClassName('error');
			obj.next('div').addClassName('visible');
		});
	},

	send: function()
	{
		if (RegisterForm.inProgress == true) return false;
		RegisterForm.inProgress = true;
		$('RegisterFormProgress').show();
		$('RegisterFormError').hide();
		$('RegisterFormButton').disabled = true;
		RegisterForm.dehiliteErrors();
		$('RegisterForm').request({
			onComplete: function(transport) {
				var response = transport.responseText.evalJSON();
				switch (response.result) {
					case 'error': {
						RegisterForm.inProgress = false;
						$('RegisterFormProgress').hide();
						$('RegisterFormError').update(response.message);
						$('RegisterFormError').show();
						$('RegisterFormButton').disabled = false;
						RegisterForm.hiliteErrors(response.fields);
						break;
					}
					case 'ok': {
						$('RegisterFormProgress').hide();
						$('RegisterFormButton').disabled = true;
						$('RegisterFormButton').hide();
						$('RegisterFormError').hide();
						$('RegisterFormOk').show();
						break;
					}
					default: {
						$('RegisterFormProgress').hide();
						$('RegisterFormError').update('Unknown error');
						$('RegisterFormError').show();
						$('RegisterFormButton').disabled = false;
						RegisterForm.inProgress = false;
						break;
					}
				}
			},

			onFailure: function() {
				$('RegisterFormProgress').hide();
				$('RegisterFormError').update('Unknown error')
				$('RegisterFormError').show();
				$('RegisterFormButton').disabled = false;
				RegisterForm.inProgress = false;
			}
		});
	}
}

/**
 * Basket
 */

var basketInProgress = false;

function addToBasket(id)
{
	if (basketInProgress == true) return false;
	basketInProgress = true;

	var params = {productId: id};

	new Ajax.Request('?p=Basket:Add', {
		method: 'get',
		parameters: params,
		onComplete: function(transport) {
			var response = transport.responseText.evalJSON();

			switch (response.result) {
				case 'error': {
					newsletterInProgress = false;
					break;
				}
				case 'ok': {
					window.location = window.location;
					break;
				}
				default: {
					newsletterInProgress = false;
					break;
				}
			}
		},

		onFailure: function() {
			basketInProgress = false;
		}
	});
}

function removeFromBasket(id)
{
	if (basketInProgress == true) return false;
	basketInProgress = true;

	var params = {productId: id};

	new Ajax.Request('?p=Basket:Remove', {
		method: 'get',
		parameters: params,
		onComplete: function(transport) {
			var response = transport.responseText.evalJSON();

			switch (response.result) {
				case 'error': {
					newsletterInProgress = false;
					break;
				}
				case 'ok': {
					window.location = window.location;
					break;
				}
				default: {
					newsletterInProgress = false;
					break;
				}
			}
		},

		onFailure: function() {
			basketInProgress = false;
		}
	});
}

function recalculateBasket(id)
{
	if (basketInProgress == true) return false;
	basketInProgress = true;

	var params = {productId: id, count: $F('cnt_' + id)};

	new Ajax.Request('?p=Basket:Recalculate', {
		method: 'get',
		parameters: params,
		onComplete: function(transport) {
			var response = transport.responseText.evalJSON();

			switch (response.result) {
				case 'error': {
					newsletterInProgress = false;
					break;
				}
				case 'ok': {
					window.location = window.location;
					break;
				}
				default: {
					newsletterInProgress = false;
					break;
				}
			}
		},

		onFailure: function() {
			basketInProgress = false;
		}
	});
}

function placeOrder()
{
	if (basketInProgress == true) return false;
	basketInProgress = true;

	$('PlaceOrder').disabled = true;

	$('Order').request({
		onComplete: function(transport) {
			var response = transport.responseText.evalJSON();

			switch (response.result) {
				case 'error': {
					basketInProgress = false;
					$('PlaceOrder').disabled = false;
					alert(response.message);
					break;
				}
				case 'ok': {
					window.location = '?p=Basket:OrderInfo';
					break;
				}
				default: {
					basketInProgress = false;
					$('PlaceOrder').disabled = false;
					break;
				}
			}
		},

		onFailure: function() {
			basketInProgress = false;
			$('PlaceOrder').disabled = false;
		}
	});
}

/**
 * form handle
 */
var vForm = {

	inProgress: false,

	dehiliteErrors: function()
	{
		$$('FORM li').each(function(item, index) {
			$(item).removeClassName('error');
		});
	},

	hiliteErrors: function(fields)
	{
		fields.each(function(item, index) {
			obj = $(item);
			obj.addClassName('error');
		});
	},

	send: function(formname)
	{
		if (vForm.inProgress == true) return false;
		vForm.inProgress = true;
		$('vFormError').hide();
		$('vFormButton').disabled = true;
		$('vFormButton').removeClassName('error');
		$('vFormButton').addClassName('inprogress');
		vForm.dehiliteErrors();
		$(formname).request({
			onComplete: function(transport) {
				var response = transport.responseText.evalJSON();
				switch (response.result) {
					case 'error': {
						vForm.inProgress = false;
						$('vFormError').update(response.message)
						$('vFormError').show();
						$('vFormButton').disabled = false;
						$('vFormButton').removeClassName('inprogress');
						$('vFormButton').addClassName('error');
						vForm.hiliteErrors(response.fields);
						break;
					}
					case 'ok': {
						if (typeof(response.url) == 'string') {
							window.location = response.url
						} else {
							$('vFormButton').disabled = true;
							$('vFormButton').hide();
							$('vFormError').hide();
							$('vFormOk').show();
						}
						break;
					}
					default: {
						$('vFormError').update('Unknown error');
						$('vFormError').show();
						$('vFormButton').disabled = false;
						$('vFormButton').removeClassName('inprogress');
						vForm.inProgress = false;
						break;
					}
				}
			},

			onFailure: function() {
				$('vFormError').update('Unknown error')
				$('vFormError').show();
				$('vFormButton').disabled = false;
				$('vFormButton').removeClassName('inprogress');
				vForm.inProgress = false;
			}
		});
	}
}

function toggleMenu(id) {
	Effect.toggle(id, 'blind');
}
