defaultNS.ModuleDefault = function() {

	var common = {
		setup : function() {
			var inputDefintion = [
				{
					id : 'searchinput',
					value : _l10n('mDefault_SearchIdOrText')
				}
			];
			defaultNS.ModuleDefault().formDefaultValue({
				inputDefintion:inputDefintion
			});

			Ext.select('.listItemImage img').hover(function(evt, target) {
				var el = Ext.get(target);
				var current = el.parent().id;
				var gallery = current.split('listItemImage')[1];
				gallery = 'listItemGallery' + gallery;
				Ext.get(gallery) ? Ext.get(gallery).removeClass('hidden') : false;
			}, function(evt, target) {
				var el = Ext.get(target);
				var current = el.parent().id;
				var gallery = current.split('listItemImage')[1];
				gallery = 'listItemGallery' + gallery;
				Ext.get(gallery) ? Ext.get(gallery).addClass('hidden') : false;
			});


		} ,
		formDefaultValue : function(_input) {
			Ext.each(_input.inputDefintion, function(input) {
				if(Ext.get(input.id)) {
					Ext.get(input.id).on('focus', function(evt, target) {
						var el = Ext.get(target);
						el.getValue() == input.value ? el.dom.value = '' : false;
					});
					Ext.get(input.id).on('blur', function(evt, target) {
						var el = Ext.get(target);
						el.getValue() == '' ? el.dom.value = input.value : false;
					});
					Ext.get(input.id).dom.value = input.value;
				}
			});
		},
		itemEnable : function(_input) {
			if(_input.enable.indexOf(parseInt(_input.real)) > -1) {
				Ext.each(_input.toggle, function(field) {
					Ext.get(field).dom.disabled = false;
				});
			}
			else {
				Ext.each(_input.toggle, function(field) {
					Ext.get(field).dom.disabled = true;
				});
			}
		},
		disableIE6 : function() {
			if(Ext.isIE6) {
				alert(_l10n('mDefault_isIE6NotSupported'));
				return true;
			}
			return false;
		}
	};
	return {

		// veřejně přistupný alias pro volání funkcí
		formDefaultValue : common.formDefaultValue,
		itemEnable : common.itemEnable,
		disableIE6 : common.disableIE6 ,

		init : function(_input) {
			common.setup();
		}
	};
};


// jquery založené
var autoscrolling = true;

$.fn.infiniteCarousel = function () {

	function repeat(str, num) {
		var arr = new Array(num + 1);
		return arr.join(str);
	}

	return this.each(function () {
		var $wrapper = $('.items', this).css('overflow', 'hidden');
		var $bullets = $('.bullets', this);

		for (var i = 0; i < $bullets.children('.bullet').size(); i++) {
			$bullets.children('.bullet').eq(i).data('index', i);
			$bullets.children('.bullet').eq(i).click(function() {
				gotoPage($(this).data('index') + 1);
				return false;
			});
		}

		var $slider = $wrapper.find('> ul');
		var $items = $slider.find('> li');
		var separators = $slider.find('> li[class*="separator vertical"]').size();
		var $single = $items.filter(':first');

		var singleWidth = 367 + 46;
		var visible = Math.ceil(780 / singleWidth); // note: doesn't include padding or border
		var currentPage = 1;
		var pages = Math.ceil(($items.length - separators) / visible);

		// 1. Pad so that 'visible' number will always be seen, otherwise create empty items
		if((($items.length - separators) % visible) != 0) {
			var spacers = repeat('<li class="empty"></li><li class="separator vertical"></li>', visible - (($items.length - separators) % visible));
			$slider.append(spacers);
			$items = $slider.find('> li');
		}

		// 2. Top and tail the list with 'visible' number of items, top has the last section, and tail has the first
		$items.filter(':first').before($items.slice(- visible).clone().addClass('cloned'));
		$items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
		$items = $slider.find('> li'); // reselect

		// 3. Set the left position to the first 'real' item
		$wrapper.scrollLeft(singleWidth * visible);
		$wrapper.data($(this).attr('id') + '_scroll', singleWidth * visible);

		// 4. paging function
		function gotoPage(page) {
			if(page == currentPage) {
				return;
			}

			if(currentPage == 0 & page == pages - 1) {
				page = -1;
			}
			var dir = page < currentPage ? -1 : 1;
			var n = Math.abs(currentPage - page);
			var left = singleWidth * dir * visible * n;

			if(dir == -1 & currentPage == 0) {
				$wrapper.scrollLeft(singleWidth * visible * pages);
				page = pages - 1;
			}
			if(dir == 1 & currentPage >= pages) {
				$wrapper.scrollLeft(0);
				page = 1;
			}

			$wrapper.filter(':not(:animated)').animate({
				scrollLeft : '+=' + left
			}, 500, function () {
				if(page == 0) {
					$wrapper.scrollLeft(singleWidth * visible * pages);
					page = pages;
				}
				else {
					if(page >= pages) {


						$wrapper.scrollLeft(0);
						page = 0;
					}
				}


				currentPage = page;

				for (var i = 0; i < $bullets.children('.bullet').size(); i++) {
					$bullets.children('.bullet').eq(i).removeClass('active');
				}

				var activeBullet = currentPage == 0 ? pages - 1 : currentPage - 1;
				$bullets.children('.bullet').eq(activeBullet).addClass('active');

				$wrapper.data($(this).parents('.carousel').attr('id') + '_scroll', $wrapper.scrollLeft());
			});

			return false;
		}

		//$wrapper.after('<a class="arrow back">&lt;</a><a class="arrow forward">&gt;</a>');

		// 5. Bind to the forward and back buttons
		var $arrowLeft = $('[class*="arrow left"]', this);
		$arrowLeft.click(function () {
			autoscrolling = false;
			return gotoPage(currentPage - 1);
		});

		var $arrowRight = $('[class*="arrow right"]', this)
		$arrowRight.click(function () {
			autoscrolling = false;
			return gotoPage(currentPage + 1);
		});

		// create a public interface to move to a specific page
		$(this).bind('goto', function (event, page) {
			gotoPage(page);
		});

		$(this).bind('next', function () {
		  gotoPage(currentPage + 1);
		});

	});
};

$.fn.menuButtons = function() {
	var index = 0;

	this.each(function() {
		$(this).data('index', index);
		$(this).click(function() {
			var index = $(this).data('index');
			var $views = $('.view', '#topMenu');
			var $menuButtons = $('.menuButton', '#topMenu');
			for (var i = 0; i < $views.size(); i++) {
				$views.eq(i).addClass('hidden');
			}

			for (var j = 0; j < $menuButtons.size(); j++) {
				$menuButtons.eq(j).removeClass('active');
			}

			$views.eq(index).removeClass('hidden');
			$menuButtons.eq(index).addClass('active');
			var $carousel = $('.carousel', $views.eq(index));
			var $carouselItems = $('.items', $carousel);
			$carouselItems.scrollLeft($carouselItems.data($carousel.attr('id') + '_scroll'));
			//console.log($carouselItems.data($carousel.attr('id') + '_scroll'));

			return false;
		});
		index++;
	});
};

$.fn.menuItems = function() {
	this.each(function() {
		$(this).click(function(e) {
			var $self = $(this);
			if(e.target != this) {
				return;
			}
			if($self.hasClass('expanded')) {
				$self.removeClass('expanded');
			}
			else {
				$self.addClass('expanded');
			}
		});
	});
};

$.fn.searchInput = function() {
	this.each(function() {
		var $whisperer = $('.whisperer', $(this));

		var defaultText = null;

		$('#mainSearch', $(this)).focusin(function() {
			if(defaultText == null) {
				defaultText = $(this).val();
			}
			$(this).val('');
			$whisperer.show();
		});

		$('#mainSearch', $(this)).focusout(function() {
			if($(this).val().trim() == '') {
				$(this).val(defaultText);
			}
			return true;
		});
	});
};

$.fn.mapBubble = function() {
	this.each(function() {
		$('#showMapBubble').click(function() {
			$('#mapBubble').show();

			var $modal = $('#modal');

			$modal.css('width', document.body.scrollWidth);
			$modal.css('height', document.body.scrollHeight);
			$modal.show();

			return false;
		});

		$('#modal').click(function() {
			$('#mapBubble').hide();
			$('#mailBubble').hide();
			$('#modal').hide();
		});

		$('#closeMapBubble').click(function() {
			$('#modal').click();
		});
	});
};

$.fn.mailBubble = function() {
	this.each(function() {
		$('.showMailBubble').click(function(event) {
			var $modal = $('#modal');
			var $bubble = $('#mailBubble');

            $('.showMailBubble').removeClass('shareEMailActive');
            $(event.currentTarget).addClass('shareEMailActive');

			$bubble.show();

			$modal.css('width', document.body.scrollWidth);
			$modal.css('height', document.body.scrollHeight);
			$modal.show();

			return false;
		});

		$('#modal').click(function() {
			$('#mailBubble').hide();
			$('#mapBubble').hide();
			$('#modal').hide();
		});

		$('#closeMailBubble').click(function() {
			$('#modal').click();
		});
	});
};


$.fn.toggleMenu = function() {
	this.each(function() {
		var loc = window.location.href;
		var re = /IPP[0-9]{1,5}/g;
		var cat = re.exec(loc);
		if(cat == null) {
			return;
		}
		reg = /[0-9]{1,5}/g;
		cat = "#menu-menuCategory" + reg.exec(cat);

		try {
			$(cat, $(this)).parents('li.expandable').addClass('expanded');
		}
		catch(e) {

		}
	});
};

// http://imgscale.kjmeath.com
(function(a){a.fn.imgscale=function(f){f=a.extend({parent:false,scale:"fill",center:true,fade:0},f);var i,e,j,k,c,d,h,b;this.each(function(){var l=a(this);var m=(!f.parent?l.parent():l.parents(f.parent));m.css({opacity:0,overflow:'hidden'});if(m.length>0){l.removeAttr("height").removeAttr("width");if(this.complete){g(l,m,false)}else{l.load(function(){g(l,m,true)})}}});function g(l,p,r){i=p.height();e=p.width();j=l.height();k=l.width();n();function n(){if(e>i){m("w")}else{if(e<i){m("t")}else{if(e==i){m("s")}}}}function m(v){if(k>j){t(v,"w")}else{if(k<j){t(v,"t")}else{if(k==j){t(v,"s")}}}}function t(w,v){if(w=="w"&&v=="w"){q()}else{if(w=="w"&&v=="t"){s("w")}else{if(w=="w"&&v=="s"){s("w")}else{if(w=="t"&&v=="w"){s("w")}else{if(w=="t"&&v=="t"){q()}else{if(w=="t"&&v=="s"){s("t")}else{if(w=="s"&&v=="w"){s("t")}else{if(w=="s"&&v=="t"){s("w")}else{if(w=="s"&&v=="s"){s("w")}}}}}}}}}}function q(){if((k*i/k)>=e){s("t")}else{s("w")}}function s(v){switch(v){case"t":if(f.scale=="fit"){l.attr("width",e)}else{l.attr("height",i)}break;case"w":if(f.scale=="fit"){l.attr("height",i)}else{l.attr("width",e)}break}if(f.center){o()}else{u()}}function o(){c=l.width();d=l.height();if(d>i){b="-"+(Math.floor((d-i)/2))+"px";l.css("margin-top",b)}if(c>e){h="-"+(Math.floor((c-e)/2))+"px";l.css("margin-left",h)}u()}function u(){if(f.fade>0&&r){p.animate({opacity:1},f.fade)}else{p.css("opacity",1)}}}}})(jQuery);

$(document).ready(function () {
	$('.menuButton', '#topMenu').menuButtons();
	$('.carousel', '#topMenu').infiniteCarousel();
	$('li.expandable', '#mainMenu').menuItems();
	$('.search', '#mainMenu').searchInput();
	$('#mapBubble').mapBubble();
	$('#mailBubble').mailBubble();
	$('#mainMenu').toggleMenu();
	window.gallery = new Gallery();
	$('#brickStore').click(function () {
		$('html, body').animate({scrollTop: $('body').height()}, 1000, function() {
			 $('#showMapBubble').click();
		});
	});

	setInterval(function () {
	  if (autoscrolling) {
	    $('.carousel', '#topMenu').trigger('next');
	  }
	}, 5000);

	/*setInterval(function () {
		if(autoScrollGallery) {
			$('.carousel', '#topMenu').trigger('next');
		}
	}, 5000);*/
});

function Gallery() {
	var GALLERY_SIZE = new function() {
		this.WIDTH = 500;
		this.HEIGHT = 335;
	};

	var BIG_SIZE = new function() {
		this.WIDTH = 400;
		this.HEIGHT = 250;
	};

	var SMALL_SIZE = new function() {
		this.WIDTH = 384;
		this.HEIGHT = 240;
	};

	var CENTER_POSITION = new function() {
		this.X = (GALLERY_SIZE.WIDTH - BIG_SIZE.WIDTH) / 2;
		this.Y = (GALLERY_SIZE.HEIGHT - BIG_SIZE.HEIGHT) / 2;
	};

	var LEFT_POSITION = new function() {
		this.X = CENTER_POSITION.X - 20;
		this.Y = CENTER_POSITION.Y + 5;
	};

	var RIGHT_POSITION = new function() {
		this.X = CENTER_POSITION.X + BIG_SIZE.WIDTH + 20 - SMALL_SIZE.WIDTH;
		this.Y = CENTER_POSITION.Y + 5;
	};

	var self = $('#gallery');
	self.currentItem = null;
	self.autoScroll = false;
	self.items = null;
	self.prevItemReqs = 0;
	self.nextItemReqs = 0;
	self.animOngoing = false;
	self.leftButton = $('#galleryPreviousButton');
	self.rightButton = $('#galleryNextButton');

	function _leftItem() {
		var index = self.currentItem - 1 < 0 ? self.items.size() - 1 : self.currentItem - 1;

		return self.items.eq(index);
	}

	function _centerItem() {
		return self.items.eq(self.currentItem);
	}

	function _rightItem() {
		var index = self.currentItem + 1 > self.items.size() - 1 ? 0 : self.currentItem + 1;

		return self.items.eq(index);
	}

	function previous() {
		if(self.animOnGoing) {
			self.prevItemReqs++;
			return;
		}

		self.animOnGoing = true;

		var leftItem = _leftItem();
		var centerItem = _centerItem();
		var rightItem = _rightItem();

		self.currentItem++;
		if(self.currentItem > self.items.size()-1) {
			self.currentItem = 0;
		}

		var futureRightItem = _rightItem();

		leftItem.removeClass('left');
		var cloned = false;
		if(self.items.size() == 3) {
			leftItem = leftItem.clone();
			self.append(leftItem);
			cloned = true;
		}
		leftItem.removeClass('left');
		leftItem.show();
		leftItem.fadeOut(250, function() {
			leftItem.hide();
			if(cloned) {
				leftItem.remove();
			}
		});

		var ciTresholdCrossed = false;

		centerItem.animate({
			top: LEFT_POSITION.Y,
			left: LEFT_POSITION.X,
			width: SMALL_SIZE.WIDTH + 'px',
			height: SMALL_SIZE.HEIGHT + 'px'
		}, {
			duration: 300,
			step: function(now, fx) {
				centerItem.children('img').imgscale();

				if(ciTresholdCrossed) {
					return;
				}

				var treshold = fx.start - ((fx.start - fx.end) / 2);
				if(fx.prop == "height" && now <= treshold) {
					ciTresholdCrossed = true;
					centerItem.addClass('futureLeft');
				}
			},
			complete: function() {
				centerItem.removeClass('center');
				centerItem.removeClass('futureLeft');
				centerItem.addClass('left');
				centerItem.children('img').imgscale();
			}
		});

		var riTresholdCrossed = false;

		rightItem.animate({
			top: CENTER_POSITION.Y,
			left: CENTER_POSITION.X,
			width: BIG_SIZE.WIDTH + 'px',
			height: BIG_SIZE.HEIGHT + 'px'
		}, {
			duration: 300,
			step: function(now, fx) {
				rightItem.children('img').imgscale();

				if(riTresholdCrossed) {
					return;
				}

				if(ciTresholdCrossed) {
					riTresholdCrossed = true;
					rightItem.addClass('futureCenter');
				}
			},
			complete: function() {
				rightItem.removeClass('right');
				rightItem.removeClass('futureCenter');
				rightItem.addClass('center');
				rightItem.children('img').imgscale();
			}
		});

		futureRightItem.addClass('right');
		futureRightItem.hide();
		futureRightItem.css('left', RIGHT_POSITION.X);
		futureRightItem.css('top', RIGHT_POSITION.Y);
		futureRightItem.fadeIn(350, function() {
			futureRightItem.show();
			self.animOnGoing = false;
			if(self.prevItemReqs != 0) {
				self.prevItemReqs--;
				previous();
			}
		});

	}

	function next() {
		if(self.animOnGoing) {
			self.prevItemReqs++;
			return;
		}

		self.animOnGoing = true;

		var leftItem = _leftItem();
		var centerItem = _centerItem();
		var rightItem = _rightItem();

		self.currentItem--;
		if(self.currentItem < 0) {
			self.currentItem = self.items.size() -1;
		}

		var futureLeftItem = _leftItem();

		rightItem.removeClass('right');
		var cloned = false;
		if(self.items.size() == 3) {
			rightItem = rightItem.clone();
			self.append(rightItem);
			cloned = true;
		}
		rightItem.removeClass('right');
		rightItem.show();
		rightItem.fadeOut(250, function() {
			rightItem.hide();
			if(cloned) {
				rightItem.remove();
			}
		});

		var ciTresholdCrossed = false;

		centerItem.animate({
			top: RIGHT_POSITION.Y,
			left: RIGHT_POSITION.X,
			width: SMALL_SIZE.WIDTH + 'px',
			height: SMALL_SIZE.HEIGHT + 'px'
		}, {
			duration: 300,
			step: function(now, fx) {
				centerItem.children('img').imgscale();

				if(ciTresholdCrossed) {
					return;
				}

				var treshold = fx.start - ((fx.start - fx.end) / 2);
				if(fx.prop == "height" && now <= treshold) {
					ciTresholdCrossed = true;
					centerItem.addClass('futureRight');
				}
			},
			complete: function() {
				centerItem.removeClass('center');
				centerItem.removeClass('futureRight');
				centerItem.addClass('right');
				centerItem.children('img').imgscale();
			}
		});

		var liTresholdCrossed = false;

		leftItem.animate({
			top: CENTER_POSITION.Y,
			left: CENTER_POSITION.X,
			width: BIG_SIZE.WIDTH + 'px',
			height: BIG_SIZE.HEIGHT + 'px'
		}, {
			duration: 300,
			step: function(now, fx) {
				leftItem.children('img').imgscale();

				if(liTresholdCrossed) {
					return;
				}

				if(ciTresholdCrossed) {
					liTresholdCrossed = true;
					leftItem.addClass('futureCenter');
				}
			},
			complete: function() {
				leftItem.removeClass('left');
				leftItem.removeClass('futureCenter');
				leftItem.addClass('center');
				leftItem.children('img').imgscale();
			}
		});


		futureLeftItem.addClass('left');
		futureLeftItem.hide();
		futureLeftItem.css('left', LEFT_POSITION.X);
		futureLeftItem.css('top', LEFT_POSITION.Y);
		futureLeftItem.fadeIn(350, function() {
			futureLeftItem.show();
			self.animOnGoing = false;
			if(self.nextItemReqs != 0) {
				self.nextItemReqs--;
				previous();
			}
		});
	}

	function init() {
		self.currentItem = 0;

		self.autoScroll = true;

		self.items = self.children('.item');
		var leftItem = self.items.last();
		var centerItem = self.items.first();
		var rightItem = self.items.eq(1);

		self.leftButton.click(function () {
			self.autoScroll = false;
			next();
		});

		self.rightButton.click(function () {
			self.autoScroll = false;
			previous();
		});

		leftItem.css('left', LEFT_POSITION.X);
		leftItem.css('top', LEFT_POSITION.Y);

		centerItem.css('left', CENTER_POSITION.X);
		centerItem.css('top', CENTER_POSITION.Y);

		rightItem.css('left', RIGHT_POSITION.X);
		rightItem.css('top', RIGHT_POSITION.Y);

		leftItem.addClass('left');
		centerItem.addClass('center');
		rightItem.addClass('right');

		leftItem.show();
		centerItem.show();
		rightItem.show();

		$('#gallery img.itemImage').imgscale();

		setInterval(function () {
			if(self.autoScroll) {
				next();
			}
		}, 5000);



	}

	init();
}


