/*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() { // nepretekani breadcrumbs
			var $breadcrumbs, $first, $last, top, originalText;
			
			$breadcrumbs = $('.breadcrumbs');
			$first = $breadcrumbs.find('.first');
			$last = $breadcrumbs.find('.last');
			
			top = $first.offset().top;
			originalText = $last.text();
			
			$last.text('...');
			setTimeout(function() {
				if ($last.offset().top !== top) {
					$last.text(originalText);
					return;
				}
				
				setTimeout(function self() {
					var text = $last.text().replace(/\.\.\.$/, '');
					
					if ('' === text) {
						$last.text(originalText);
						return;
					}
					
					$last.text(text.substr(0, text.length - 1) + '...');
					
					if ($last.offset().top === top) {
						return;
					}
					
					setTimeout(self, 10);
				}, 10);
			}, 10);
		});//()); // za pokus to stalo, ale nejak to nechce spravne fungovat
		
		(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
				});
				if (0 < $form.find('.Slider')) {
					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').detach();
				
				$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() { // 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,
				dispItems: 4
			}));
		}());
		
		(function() { // zastupne texty u inputu
			var handler = function(ev) {
				var $target = $(ev.target);
				
				if ($target.val() === $target.data('placeholder-string')) {
					$target.val('');
				}
				if ($target.is(':focused')) {
					$target.removeClass('placeholder');
				} else if ('' === $target.val()) {
					$target.addClass('placeholder').val($target.data('placeholder-string'));
				}
			};
			
			$('form').each(function(i, el) {
				var $form = $(el);
				var $inputs = $form.find('input[type="text"]');
				
				$form.bind('submit', function(ev) {
					$inputs.each(function(i, el) {
						var $el = $(el);
						if ($el.val() === $el.data('placeholder-string')) {
							$el.val('');
						}
					});
				});
				
				$inputs.each(function(i, el) {
					var $input = $(el);
					var placeholder = locale[$form.attr('id') + '-' + $input.attr('name') + '-placeholder'];
					if ('undefined' === typeof placeholder) {
						return;
					}
					
					$input.data('placeholder-string', placeholder).bind('focus blur', handler).trigger('blur');
				});
			});
		}());
		
		(function() { // zastupne texty u selectu
			$('select').filter('[name="stari"], [name="pobocka"], [name="typsmlouvy"], [name="typnemovitosti"], [name="kraj"], [name="okres"], [name="dispozice"]').bind('change', function(ev) {
				var $target = $(ev.target);
				
				if ($target.find('option:first').is(':selected')) {
					$target.addClass('placeholder');
				} else {
					$target.removeClass('placeholder');
				}
			}).trigger('change').find('option').addClass('normal').filter(':first').removeClass('normal').addClass('placeholder');
		}());
		
		(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).parents('form').trigger('submit');
			});
			
			$forms.find('.submit').hide();
		}());
		
		(function() { // faq
			var $faqs = $('.faqItem');
			$faqs.bind('click', function(ev) {
				if (!$(ev.target).is('.question')) {
					return;
				}
				
				$(ev.currentTarget).find('.answer').stop(false, true).slideToggle();
			});
			$faqs.find('.answer').hide();
			$faqs.find('.question').css({ 'cursor': 'pointer' });
		}());
		
		(function() { // "cely popis"
			var $button, $text;
			
			$text = $('#MoreInfo');
			if (0 === $text.text().length) {
				return;
			}
			
			$button = $('.MoreInfoButton');
			$button.find('a').bind('click', function(ev) {
				var $target = $(ev.target);
				
				$text.slideToggle();
				
				if (locale['more'] === $target.html()) {
					$target.html(locale['less']);
				} else {
					$target.html(locale['more']);
				}
				
				ev.preventDefault();
			});
			$button.show();
			$text.hide();
		}());
		
		(function() { // "dalsi informace"
			$('.paramContainer').each(function(i, el) {
				var $el = $(el);
				var $button = $el.find('.moreParams');
				
				if (0 === $button.length) {
					return;
				}
				
				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;
				}
				
				$button.show().bind('click', function(ev) {
					if ($params2.is(':visible')) {
						$params2.stop().animate({ 'opacity': 'hide' }, 1000).animate({ 'height': 'hide' }, 1500);
					} else {
						$params2.stop().animate({ 'opacity': 'show' }, 1000);
					}
					ev.preventDefault();
				});
			});
		}());
		
		(function() { // "dalsi makleri" - vyrazeno
			$('.MakleriContainer').each(function(i, el) {
				var $container = $(el);
				var $makleri = $container.find('.Makleri');
				var $makleri1 = $makleri.find('.Makler').slice(0, 3).detach();
				var $makleri2 = $makleri.find('.Makler').detach();
				
				$makleri.empty().append(
					$('<div/>').addClass('Makleri1').append($makleri1)).append(
					$('<div/>').addClass('Makleri2').append($makleri2));
				$makleri2.animate({ 'height': 'hide' }, 1);
				
				if (0 === $makleri2.length) {
					return;
				}
				
				$container.find('.MakleriMore').show().bind('click', function(ev) {
					if ($makleri2.is(':visible')) {
						$makleri2.stop().animate({ 'opacity': 'hide' }, 1000).animate({ 'height': 'hide' }, 1500);
					} else {
						$makleri2.stop().animate({ 'opacity': 'show' }, 1000);
					}
					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() { // hypokalkulacky
			var $cs = $('#HypoKalkulackaCS');
			var urok = parseFloat($cs.find('.Urok').val());
			
			$cs.find('#uver, #delka_uveru').bind('change keyup', function(ev) {
				var uver = $('#uver').val();
				
				var splatnost = $('#delka_uveru').val();
				
				var pocet_splatek = splatnost * 12;
				var mocnina = Math.pow(1 + (urok / 12), pocet_splatek);
				var anuita = (uver * (urok / 12) * mocnina) / (mocnina - 1);
				$('#mesicni_splatka').val(Math.round(anuita));
			});
		}());
		
		(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 = 12;
					}
					
					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
					});
				}());
			});
		}());
		
		(function() { // rozbalovani leveho menu
			var $menu = $('.ContextMenu');
			if (0 === $menu.length) {
				return;
			}
			
			var $uls = $menu.children();
			while (0 !== $uls.length && !$uls.is('ul')) {
				$uls = $uls.children();
			}
			$uls = $uls.find('ul');
			
			$menu.delegate('li:not(.active)', 'click', function(ev) {
				var $li = $(ev.currentTarget);
				var $ul = $li.children('ul');
				if (0 === $ul.length) {
					return;
				}
				
				$ul.stop(true, true).slideToggle();
				ev.preventDefault();
			});
			$uls.not('.active > *').hide();
		}());
		
		(function() { // podnikani s Evropou - formular - volba kraje
			var $map = $('#Map');
			var $ul = $('#Kraje');
			var $hidden = $('input[type="hidden"][name="kraj"]');
			
			var handler = function(ev) {
				var $target = $(ev.target);
				if (!$target.is('area, a')) {
					return;
				}
				
				 var kraj = $target.attr('class').replace(/.*\bKraj(\w+)\b.*/i, '$1').toLowerCase();
				 $hidden.val(kraj);
			};
			
			$map.bind('click', handler);
			$ul.bind('click', handler);
		}());
		
		$('body').removeClass('JSLoading').addClass('JSLoaded');
	});
}(window.jQuery));
