/*encoding: utf-8 */
/*jslint onevar: false, browser: true, white: false, passfail: false, maxerr: 10, plusplus: false, regexp: false, sub: true */
/*global window */
(function($) {
	"use strict";
	
	(function self() {
		var $body = $('body');
		if (0 === $body.length || null === $body.get(0)) {
			setTimeout(self, 100);
			return;
		}
		
		$body.addClass('JSLoading');
	}());
	
	$(window.document).bind('ready', function() {
		var locale = window.poskiLocale;
		var real = window.poskiReal;
		
		(function() { // skryvani/zobrazovani podrobneho filtru
			var viditelnost = function() {
				var viditelny = $('#PartialListFilter').is(':hidden');
				if ($('#PartialListFilter').is(':hidden')) {
					$(".toggleFilter .showHide").text("Zobrazit");
				}
				
				if ($('#PartialListFilter').is(':visible')) {
					$(".toggleFilter .showHide").text("Skrýt");
				}
			};
			
			$('.toggleFilter').click(function() {
				$('#PartialListFilter').slideToggle("500", function() {
					viditelnost();
				});
			});
		
			viditelnost();
		}());
		
		//skyvani textu v inputu Lokalita
//		(function(){
//			$("#text").focus(function (){
//				$(this).val("");
//			});
			
//			$("#text").blur(function (){
//				if($(this).val() == "")
//					$(this).val("Obec, Část obce, Ulice");
//			});
//		}());
		
		
		/*(function() { // slider range
			var formatCena = function(number) {
				var regex = /(\d+)(\d{3})/;
				
				number = number.toString();
				while (regex.test(number)) {
					number = number.replace(regex, '$1 $2');
				}
				return number;
			};
			
			$('form#index-search, form#left-search').each(function(i, el) {
				var $form, handler;
				
				$form = $(el);
				handler = function(ev, ui) {
					$form.find('.SliderLabel').show();
					$form.find('.SliderLabelOd').text(formatCena(ui.values[0]));
					$form.find('.SliderLabelDo').text(formatCena(ui.values[1]));
					$form.find('#cena_od').hide().val(ui.values[0]);
					$form.find('#cena_do').hide().val(ui.values[1]);
				};
				
				$form.find('.Slider').slider({
					'range': true,
					'step': 50000,
					'min': 0,
					'max': 3000000,
					'values': [ 0, 3000000 ],
					'slide': handler
				});
				handler({}, { 'values' : [ 0, 3000000 ] });
			});
		}());*/
		(function() { // colorboxing
			$('.ColorBoxIframe').each(function(i, el) {
				var $el = $(el);
				$el.colorbox({
					'href': $el.attr('href') + (-1 === $el.attr('href').indexOf('?') ? '?' : '&') + 'ajax=1',
					'iframe': true,
					'title': $el.attr('title'),
					'height': '80%',
					'width': '80%'
				});
			});
		}());
		
		(function() { // prettyphoto
			$('a[rel^="prettyPhoto"]').prettyPhoto();
		}());
		
		(function() { // select kraj/okres
			$('form#index-search, form#left-search').each(function(i, el) {
				var $form = $(el);
				var $krajSelect = $form.find('[name="kraj"]');
				var $okresSelect = $form.find('[name="okres"]');
				var $okresy = $okresSelect.find('option').not(':first');
				
				$krajSelect.bind('change', function(ev) {
					var kraj = $krajSelect.val();
					var okres = $okresSelect.val();
					
					$okresy.detach().filter(function(i) {
						return 'vsude' === kraj || real.kraje[real.okresy[$(this).val()]] === kraj;
					}).appendTo($okresSelect);
					
					$okresSelect.val(okres).trigger('change');
				}).trigger('change');
			});
		}());
		
		(function() { // select okres/obec, obec/cobce
			var selector = 'form#index-search [name="okres"], form#index-search [name="obec"], form#left-search [name="okres"], form#left-search [name="obec"]';
			
			$('body').delegate(selector, 'change', function(ev) {
				var $form = $(ev.currentTarget).closest('form');
				var $okresSelect = $form.find('[name="okres"]');
				var $obecSelect = $form.find('[name="obec"]');
				var $cobceSelect = $form.find('[name="cobce"]');
				
				var $obce = $obecSelect.find('option').not(':first');
				var $cobce = $cobceSelect.find('option').not(':first');
				
				var okres = $okresSelect.val();
				var obec = $obecSelect.val();
				var cobce = $cobceSelect.val();
				
				$obce.detach().filter(function(i) {
					return '' === okres || real.obce[$(this).val()] === okres;
				}).appendTo($obecSelect);
				
				$cobce.detach().filter(function(i) {
					return ('' === okres || real.obce[real.cobce[$(this).val()]] === okres) && ('' === obec || real.cobce[$(this).val()] === obec);
				}).appendTo($cobceSelect);
				
				if (1 === $obecSelect.find('option[value="' + obec + '"]').length) {
					$obecSelect.val(obec);
				} else {
					$obecSelect.trigger('change');
				}
				if (1 === $cobceSelect.find('option[value="' + cobce + '"]').length) {
					$cobceSelect.val(cobce);
				} else {
					$cobceSelect.trigger('change');
				}
			});
			
			$(selector).trigger('change');
		}());
		
		(function() { // zmena titulku pri vyberu pobocky
			var $link = $('.idTabs [href$="#kancelare"]');
			var $text = $link.find('.Address');
			if (0 === $text.length) {
				return;
			}
			
			var $container = $('#kancelare');
			var $texts = $container.find('[id^="pobocka"]');
			
			var changeText = function(href) {
				$text.html($texts.filter(href).find('.Address').html());
			};
			
			changeText($container.find('.idTabs [href*="pobocka"]').bind('click', function(ev) {
				changeText($(ev.target).attr('href'));
			}).eq(0).attr('href'));
		}());

		(function() { // zvyraznovani na mapce v prehledu
			var $map = $('#Map');
			var $mapaHolder = $('#MapaHolder');
			var $ul = $('#Kraje');
			
			var mouseHandler = function(ev) {
				var $target = $(ev.target);
				if (!$target.is('area, a')) {
					return;
				}
				
				$mapaHolder.find('span').removeClass('active');
				if ('mouseover' === ev.type) {
					$mapaHolder.find('span.' + $target.attr('class').replace(/.*\b(Kraj\w+)\b.*/, '$1')).addClass('active');
				}
			};
			
			$map.bind('mouseover mouseout', mouseHandler);
			$ul.bind('mouseover mouseout', mouseHandler);
		}());
		
/*		(function() { // carousely
			var options = {
				btnsPosition: 'inside',
				autoSlideInterval: 8000,
				loop: false,
				pagination: false,
				direction: "horizontal",
				effect: "slide"
			};
			$(".CarouselHome").carousel($.extend(options, {
				prevBtn: '<img src="/web/_images/sliderPrev.png" alt="' + locale['prev'] + '" title="' + locale['prev'] + '" class="sliderPrev" />',
				nextBtn: '<img src="/web/_images/sliderNext.png" alt="' + locale['next'] + '" title="' + locale['next'] + '" class="sliderNext" />',
				animSpeed: "slower",
				dispItems: 3
			}));
			$(".CarouselDetail").carousel($.extend(options, {
				prevBtn: '<img src="/web/_images/sliderPrevDetail.png" alt="' + locale['prev'] + '" title="' + locale['prev'] + '" class="sliderPrev" />',
				nextBtn: '<img src="/web/_images/sliderNextDetail.png" alt="' + locale['next'] + '" title="' + locale['next'] + '" class="sliderNext" />',
				animSpeed: "slow",
				autoSlide: false,
				direction: "vertical",
				dispItems: 3
			}));
		}());
		*/
		(function() { // zastupne texty u inputu
			var selector = 'input[type="text"]';
			$('body').delegate(selector, 'focus blur change', function(ev) {
				var $input, $form, placeholder;
				
				$input = $(ev.target);
				$form = $input.closest('form');
				placeholder = locale[$form.attr('id') + '-' + $input.attr('name') + '-placeholder'];
				if ('undefined' === typeof placeholder) {
					return;
				}
				
				if ($input.val() === placeholder) {
					$input.val('');
				}
				if ($input.is(':focused')) {
					$input.removeClass('placeholder');
				} else if ('' === $input.val()) {
					$input.addClass('placeholder').val(placeholder);
				}
			}).delegate('form', 'submit', function(ev) {
				var $form = $(ev.currentTarget);
				$form.find(selector).each(function(i, el) {
					var $input, placeholder;
					
					$input = $(el);
					placeholder = locale[$form.attr('id') + '-' + $input.attr('name') + '-placeholder'];
					if ($input.val() === placeholder) {
						$input.val('');
					}
				});
			});
			
			$(selector).trigger('blur');
		}());
		
		(function() { // zastupne texty u selectu
			var selector = 'select[name="stari"], select[name="typsmlouvy2"], select[name="typnemovitosti2"], select[name="pobocka"], select[name="typsmlouvy"], select[name="typnemovitosti"], select[name="kraj"], select[name="okres"], select[name="obec"], select[name="cobce"], select[name="dispozice"]';
			$('body').delegate(selector, 'focus blur change', function(ev) {
				var $select = $(ev.currentTarget);
				
				$select.find('option').addClass('normal').filter(':first').removeClass('normal').addClass('placeholder');
				if ($select.find('option:first').is(':selected')) {
					$select.addClass('placeholder');
				} else {
					$select.removeClass('placeholder');
				}
			});
			$(selector).trigger('blur');
		}());
		
		(function() { // odesilani na zmenu, schovani submitu ve vypisu
			var $forms = $('form').filter('#nemovitosti-sort, #nemovitosti-limit, #hledame-filter');
			
			$forms.find('select').bind('change', function(ev) {
				$(ev.target).closest('form').trigger('submit');
			});
			
			$forms.find('.submit').hide();
		}());
		
		(function() { // odesilani na zmenu, schovani submitu ve vypisu
			var $elements = $('.AutoSubmit');
			
			$elements.bind('change', function(ev) {
				$(ev.target).closest('form').trigger('submit');
			});
		}());
		
		(function() { // nemovitosti - ajax ve filtrovacim formulari
			var $container, $partials, manager, queue, throbber, loadOnce;
			$container = $('#PartialListFilter, #PartialIndexFilter');
			$partials = $('.Partial');
			
			loadOnce = false;
			if (0 < $partials.filter('.Reroute').length) {
				loadOnce = false;
			}
			
			throbber = {
				'$el': $('.Throbber'),
				'initialize': function() {
					this.$el.hide().data('count', 'undefined' === typeof this.$el.data('count') ? 0 : this.$el.data('count'));
				},
				'showhide': function() {
					if (0 < this.$el.data('count')) {
						this.$el.show();
					} else {
						this.$el.hide();
					}
				},
				'add': function() {
					this.$el.data('count', this.$el.data('count') + 1);
					this.showhide();
				},
				'remove': function() {
					this.$el.data('count', this.$el.data('count') - 1);
					this.showhide();
				}
			};
			
			queue = new window.RequestQueue();
			manager = new window.RequestManager({
				'queue': queue,
				'getData': function() {
					return $container.find('form').serialize();
				},
				'makeRequest': function(ev, data, time) {
					var $ajaxes;
					
					if (!manager.checkTime(time)) {
						return;
					}
					queue.clear(time);
					
					$ajaxes = loadOnce ? $('body') : $partials;
					$ajaxes.each(function(i, el) {
						var $partial, url;
						$partial = $(el);
						url = ($partial.is('.Reroute') ? ('/@partial?c=' + $partial.attr('class').replace(/^.*\bController_(\w+)\b.*$/, '$1') + '&') : '?') + 'ajax=1' + ($partial.is('.Partial') ? ('&partial=' + $partial.attr('id').replace(/^Partial(.*)$/, '$1')) : '');
						throbber.add();
						$.ajax({
							'url': url,
							'type': 'GET',
							'data': data,
							'success': function(data, status, xhr) {
								var $loaders, $data;
								
								if (!manager.checkTime(time)) {
									return;
								}
								queue.clear(time);
								
								$data = $(data);
								$loaders = loadOnce ? $partials : $partial;
								$loaders.each(function(i, el) {
									var $partial, content;
									
									$partial = $(el);
									content = $data.find('#' + $partial.attr('id'));
									content = 0 === content.length ? data : content.html();
									
									$partial.html(content).find(':input').trigger('blur');
								});
							},
							'complete': function(xhr, status) {
								throbber.remove();
							}
						});
					});
				}
			});
			
			$container.delegate(':input', 'change', function(ev) {
				var $input = $(ev.currentTarget);
				if ($input.is('[name="typnemovitosti2"], [name="typsmlouvy2"]')) {
					throbber.add();
					$input.closest('form').submit();
					return;
				}
				
				manager.handle(ev);
			});
		}());
		
		(function() { // "cely popis"
			$('.item_more_button').bind('click', function(ev) {
				$('#item_more').slideToggle();
				
				var $target = $(ev.target);
				
				if (locale['more'] === $target.html()) {
					$target.html(locale['less']);
				} else {
					$target.html(locale['more']);
				}
				
				ev.preventDefault();
			});
			$('#item_more').hide();
		}());
		
		(function() { // "dalsi informace"
			$('.paramContainer').each(function(i, el) {
				var $el = $(el);
				var $table = $el.find('table.params');
				var $params1 = $table.find('tr').slice(0, 3).detach();
				var $params2 = $table.find('tr').detach();
				
				$table.empty().append(
					$('<tbody/>').addClass('param1').append($params1)).append(
					$('<tbody/>').addClass('param2').append($params2));
				$params2.animate({ 'height': 'hide' }, 1);
				
				if (0 === $params2.length) {
					return;
				}
				
				var $button = $el.find('.moreParams');
				$button.show().bind('click', function(ev) {
					if ($params2.is(':visible')) {
						$params2.stop().animate({ 'opacity': 'hide' }, 1000).animate({ 'height': 'hide' }, 1500, $.noop(), function() {
							$button.find(':contains("' + locale['less-info'] + '")').text(locale['more-info']);
						});
					} else {
						$params2.stop().animate({ 'opacity': 'show' }, 1000, $.noop(), function() {
							$button.find(':contains("' + locale['more-info'] + '")').text(locale['less-info']);
						});
					}
					ev.preventDefault();
				});
			});
		}());
		
		(function() { // meneni obrazku v detailu
			var $main = $('.DetailMainImage');
			var src = $main.attr('src');
			
			$('.DetailOtherImages img').bind('mouseover', function(ev) {
				$main.attr('src', $(ev.target).parents('a').attr('href').replace('Other', 'Main'));
			}).bind('mouseout', function(ev) {
				setTimeout(function() {
					if ($(ev.target).parents('a').attr('href').replace('Other', 'Main') === $main.attr('src')) {
						$main.attr('src', src);
					}
				}, 500);
			});
		}());
		
		(function() { // tlacitka Zpet
			$('.BackBtn').bind('click', function(ev) {
				window.history.back(-1);
				ev.preventDefault();
			});
		}());
		
		(function() { // otvirani v novem okne
			$('.OpenInNewWindow').bind('click', function(ev) {
				if (window.open($(ev.currentTarget).attr('href'))) {
					ev.preventDefault();
				}
			});
		}());
		
		(function() { // tisk
			$('.TiskButton').bind('click', function(ev) {
				window.print();
				ev.preventDefault();
			});
			
			if (0 < $('.PrintNow').length) {
				window.print();
			}
		}());
		
		(function() { // google mapa
			if ('undefined' === typeof window.google || 'undefined' === typeof window.google.maps) {
				return;
			}
			
			var maps = window.google.maps;
			
			$('.GoogleMap').each(function(i, el) {
				var $map = $(el);
				
				var lat = parseFloat($map.find('.Lat').val());
				var lng = parseFloat($map.find('.Lng').val());
				var zoom = parseInt($map.find('.Zoom').val(), 10);
				var address = $map.find('.Address').val();
				
				var gmGeocoder = new maps.Geocoder();
				var gmBounds = new maps.LatLngBounds().extend(new maps.LatLng(48.0, 7.0)).extend(new maps.LatLng(53.0, 22.0));
				
				var showMap = function(latLng, zoom) {
					if (isNaN(zoom) || 'undefined' === typeof zoom) {
						zoom = 14;
					}
					
					var gmMap = new maps.Map($map.get(0), {
						'zoom': zoom,
						'center': latLng,
						'mapTypeId': maps.MapTypeId.ROADMAP,
						'disableDefaultUI': true,
						'zoomControl': true,
						'zoomControlOptions': { 'style': maps.ZoomControlStyle.SMALL },
						'draggable': true,
						'scrollwheel': false,
						'disableDoubleClickZoom': true,
						'keyboardShortcuts': false
					});
					var gmMarkers = [];
					gmMarkers.push(new maps.Marker({
						'map': gmMap,
						'position': latLng
					}));
					$map.data('gmMap', gmMap);
					$map.data('gmMarkers', gmMarkers);
					$map.data('gmLoading', false);
				};
				
				if (!isNaN(lat) && !isNaN(lng)) {
					showMap(new maps.LatLng(lat, lng), zoom);
				} else if (address) {
					$map.data('gmLoading', true);
					gmGeocoder.geocode({
						'address': address,
						'language': locale.locale
					}, function(results, status) {
						if (maps.GeocoderStatus.ZERO_RESULTS === status) {
							return;
						}
						
						if (maps.GeocoderStatus.OK !== status) {
							return;
						}
						
						var location;
						
						$.each(results, function(i, v) {
							if (-1 === $.inArray(v.types[0], [ 'street_address', 'route', 'locality' ])) {
								return;
							}
							
							if (!gmBounds.contains(v.geometry.location)) {
								return;
							}
							
							showMap(v.geometry.location, zoom);
							return false;
						});
					});
				}
			});
			
			$('.PRMap').each(function(i, el) {
				var $el = $(el);
				var ns = $el.attr('id').replace(/^(.*)container$/, '$1');
				
				var $map = $el.find('#' + ns + 'map');
				(function self() {
					if ($map.data('gmLoading')) {
						setTimeout(self, 300);
						return;
					}
					
					var gmMap = $map.data('gmMap');
					if (null === gmMap) {
						gmMap = true;
					}
					var gmMarkers = $map.data('gmMarkers');
					if (null === gmMarkers) {
						gmMarkers = [];
					}
					
					$el.prMapSearch({
						'ns': ns,
						'map': gmMap,
						'markers': gmMarkers
					});
				}());
			});
		}());
		
		$('body').removeClass('JSLoading').addClass('JSLoaded');
	});
}(window.jQuery));

