
var BytyPoseidonUI = function() {
	
	/* Privatni promenne a funkce */
	var photoslideInt;
	
	
	
	function forms()
	{
		// hvezdicka u povinnych polozek
		$('form label.required').each(function () {
			$(this).html($(this).text() + '<span class="red">*</span>');
		});
		
		// vyhledavaci pole
		$('#q').attr('value', 'Hledaný výraz…')
			.css('color', '#999')
			.bind('focus', function() {
				if ($(this).attr('value') != 'Hledaný výraz…')
					return;
				$(this).attr('value', '').css('color', '#fff');
			})
			.bind('blur', function() {
				if ($(this).attr('value'))
					return;
				$(this).attr('value', 'Hledaný výraz…').css('color', '#999');
			});
		$('#search form').bind('submit', function() {
			if ($('#q').attr('value') == '' || $('#q').attr('value') == 'Hledaný výraz…') {
				alert('Zadejte hledaný výraz…');
				return false;
			}
		});
	}
	
	
	
	function slidePhoto(selector, dir, duration, style, delay)
	{
		var photos = $(selector);
		if (!($(selector).get(0))) return;
		// [fadeOutDuration, fadeInDuration]
		var duration = (typeof duration == 'number') ? [duration, duration] : ((typeof duration[0] == 'number' && typeof duration[1] == 'number') ? [duration[0], duration[1]] : [500, 500]);
		var style = (style) ? style : 'morph';
		var delay = (delay) ? delay : 500;
		
		switch (dir) {
		case 'prev':
			var prevPhoto = $(photos.get(photos.length - 1)).insertBefore(photos.get(0));
			if (style == 'morph') prevPhoto.show();
			$(photos.get(0)).fadeOut(duration[0], function() {
				if (style == 'fade') {
					setTimeout(function() {
						prevPhoto.fadeIn(duration[1]);
					}, delay);
				}
			});
			break;
		case 'next':
		default:
			if (style == 'fade') {
				$(photos.get(0)).fadeOut(duration[0], function() {
					$(this).hide().insertAfter(photos.get(photos.length - 1));
					setTimeout(function() {
						$(photos.get(1)).fadeIn(duration[1]);
					}, delay);
				});
			} else
			if (style == 'morph') {
				$(photos.get(1)).fadeIn(duration[1], function() {
					$(photos.get(0)).hide().insertAfter(photos.get(photos.length - 1));
				});
			}

		}
	}



	function initPhotoslides()
	{
		// Fotogalerie
		if ($('#photoslide').get(0)) {
			photoslideInt = setInterval(function() {
				slidePhoto('#photoslide .photo', 'next', 500);
			}, 4000);

			$('#photoslide .control').bind('mouseenter mouseleave click', function(e) {
				var type = $(this).hasClass('next') ? 'next' : 'prev';
				if (e.type == 'click') {
					clearTimeout(photoslideInt);
					slidePhoto('#photoslide .photo', type, 200);
				} else {
					var pos = (e.type == 'mouseenter') ?
						// mouse enter
						((type == 'next') ? '421px' : '10px') :
						// mouse leave
						((type == 'next') ? '480px' : '-49px');
					$(this).animate({ backgroundPosition: pos }, 50, 'swing');
				}
			});
		} else

		// Homepage
		if ($('#slideshow').get(0)) {
			photoslideInt = setInterval(function() {
				slidePhoto('#slideshow .slide', 'next', [200, 750], 'fade', 50);
			}, 6000);
			
			$('#slideshow .control').bind('mouseenter mouseleave click', function(e) {
				var type = $(this).hasClass('next') ? 'next' : 'prev';
				if (e.type == 'click') {
					clearTimeout(photoslideInt);
					slidePhoto('#slideshow .slide', type, 200, 'fade');
				} else {
					var pos = (e.type == 'mouseenter') ?
						// mouse enter
						((type == 'next') ? '421px' : '10px') :
						// mouse leave
						((type == 'next') ? '480px' : '-49px');
					$(this).animate({ backgroundPosition: pos }, 50, 'swing');
				}
			});
		}

	}
	
	
	
	function changeFloor(num)
	{
		$('#floor-control a').removeClass('active');
		$('#floor-control a.np' + num).addClass('active');
		$('#poseidon-model').css('background-image', 'url(../images/mask/poseidon-' + num + 'np.png)');
	}
	
	
	
	function initPoseidonModel()
	{
		// preload rezu modelu
		for (var i = 1; i <= 6; i++) { $('<img>').attr('src', '../images/mask/poseidon-' + i + 'np.png'); }

		// zmena rezu
		$('#floor-control a').click(function() {
			var floor = $(this).text().replace(/^([0-9]).*/, '$1');
			changeFloor(floor);
		});
		
		// zvyrazneni bytovych jednotek
		$('#flats-table tbody tr, .pricelist.links tbody tr').livequery('mouseenter mouseleave click', function(e) {
			var hl = $('#poseidon-model img[class=' + $(this).attr('class').replace(/[^1-9\.]+$/, '') + ']');
			switch (e.type) {
			case 'mouseenter':
				hl.fadeIn(100);
				rowBackground = $(this).css('background');
				$(this).addClass('tr-hover');
				$('a', this).css({ textDecoration: 'none', color: '#fff' });
				break;
			case 'mouseleave':
				hl.fadeOut(50);
				$(this).removeClass('tr-hover');
				$('a', this).css({ textDecoration: 'underline', color: '#2c8fb6' });
				break;
			case 'click':
				var href = $('a', this).get(0).href;
				if (!$(this).parents('#flats-table').length || ($.browser.msie && $.browser.version < 8)) {
					// IE<8 workaround
					window.location.href = href.replace(/&do=[^&]*/, '');
				} else {
					$.get(href);
				}
				break;
			} 
		});
		
		$('#content').ajaxSend(function(e, request, opt) {
			switch (parseUrl(opt.url).params['do']) {
			case 'changeFloor':
				var div = $('#__flatsTable');
				break;
			case 'openFlat':
				var div = $('#__flatCard');
				break;
			default:
				return;
			}
			$('*', div).css('visibility', 'hidden');
			div.css('position', 'relative').prepend('<div id="ajax-spinner" style="position: absolute; top: 0; left: 0;"></div>');
		}).ajaxSuccess(function() {
			Cufon.replace('#flats-table h3, #flat-card h2, #flat-card .details .params li strong');
			// posouvani planem bytu
			activateFlatPlan();
		});

		activateFlatPlan();
	}
	
	
	
	function activateFlatPlan()
	{
		var dragSymbol = $('#flat-card .dragable-symbol');
		var planImg = $('#flat-card .plan img');
		$('#flat-card .plan div').css('cursor', 'url(/images/openhand.cur),default')
			.css('top', ((330 - planImg.height() - 1200) / 2) + 'px')
			.css('left', ((530 - planImg.width() - 1200) / 2) + 'px')
			.draggable({
				cursor: 'url(/images/closedhand.cur)',
			})
			.bind('drag', function() { if (!$.browser.msie) dragSymbol.fadeOut(200); })
			.bind('dragstop', function() { if (!$.browser.msie) dragSymbol.fadeIn(300); });
	}



	function parseUrl(url)
	{
		var a =  document.createElement('a');
		a.href = url;
		return {
			source: url,
			protocol: a.protocol.replace(':',''),
			host: a.hostname,
			port: a.port,
			query: a.search,
			params: (function(){
				var ret = {},
				seg = a.search.replace(/^\?/,'').split('&'),
				len = seg.length, i = 0, s;
				for (;i<len;i++) {
					if (!seg[i]) { continue; }
					s = seg[i].split('=');
					ret[s[0]] = s[1];
				}
				return ret;
			})(),
			file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
			hash: a.hash.replace('#',''),
			path: a.pathname.replace(/^([^\/])/,'/$1'),
			relative: (a.href.match(/tp:\/\/[^\/]+(.+)/) || [,''])[1],
			segments: a.pathname.replace(/^\//,'').split('/')
		};
	}



	// publics
	return {

		init: function() {
			
			forms();

			// cufon
			if (!$.browser.msie || ($.browser.msie && $.browser.version >= 7)) {
				Cufon.replace('#content dt, h2, h3, h4, h5, th label, .black-form label, .cufon, #flat-card .details .params li strong, #flats-comparation .details .params li strong');
				Cufon.replace('#nav a', { hover: true });
			}
			
			// captcha
			//$('input.captcha').attr('value', '13');
			//$('label.captcha, input.captcha').css('display', 'none');

			// volani rutin
			initPhotoslides();
			initPoseidonModel();
		},
		
		
		
		changeFloor: function(num) {
			changeFloor(num);
		},



		/*** Google mapa **************************************************************/
		Map: function() {
			
			// privates
			var gm = google.maps;
			var map;

			// publics
			return {
	
				// Inicializace
				init: function() {
					
					// druhy znacek
					var markImgs = {
						zajimavost: new gm.MarkerImage('/images/mask/marker-attractions.png', new gm.Size(20, 25), new gm.Point(0, 0), new gm.Point(10, 25)),
						aktivity:   new gm.MarkerImage('/images/mask/marker-activities.png', new gm.Size(20, 25), new gm.Point(0, 0), new gm.Point(10, 25)),
						ski:        new gm.MarkerImage('/images/mask/marker-ski.png', new gm.Size(20, 25), new gm.Point(0, 0), new gm.Point(10, 25)),
						priroda:    new gm.MarkerImage('/images/mask/marker-nature.png', new gm.Size(20, 25), new gm.Point(0, 0), new gm.Point(10, 25))
					}
					var markShadow = new gm.MarkerImage('/images/mask/marker-shadow.png', new gm.Size(23, 19), new gm.Point(0, 0), new gm.Point(5, 19));

					// Mapa
					var centerLatLng = new gm.LatLng(50.23278, 12.851802);
					var mapOptions = {
						zoom:        9,
						center:      centerLatLng,
						mapTypeId:   gm.MapTypeId.ROADMAP,
						scrollwheel: false
					};
					map = new gm.Map(document.getElementById('map-container'), mapOptions);
					
					// Znacky
					// - Poseidon
					var markerPoseidon = new gm.Marker({
						position: new gm.LatLng(50.23278, 12.851802),
						title:    'Bytový dům Poseidon',
						icon:     new gm.MarkerImage('/images/mask/marker-poseidon.png', new gm.Size(35, 56), new gm.Point(0, 0), new gm.Point(18, 54)),
						shadow:   new gm.MarkerImage('/images/mask/marker-poseidon-shadow.png', new gm.Size(40, 33), new gm.Point(0, 0), new gm.Point(3, 29)),
						zIndex:   1000,
						map:      map
					});
					// - Zajimavosti
					new gm.Marker({ title: 'Lázeňské centrum K. Varů', position: new gm.LatLng(50.223982,12.883615), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Středověký hrad Loket', position: new gm.LatLng(50.187045,12.753689), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Zřícenina Andělská Hora', position: new gm.LatLng(50.205562,12.963701), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Hvězdárna Karlovy Vary', position: new gm.LatLng(50.215202,12.905341), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Zámek Ostrov', position: new gm.LatLng(50.302608,12.937067), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Rozhledna Diana', position: new gm.LatLng(50.218818,12.871519), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Divadlo Karlovy Vary', position: new gm.LatLng(50.221034,12.881727), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Radium Palace – léčebné lázně Jáchymov', position: new gm.LatLng(50.358573,12.934288), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Mariánské Lázně', position: new gm.LatLng(49.961546,12.70174), icon: markImgs.zajimavost, shadow: markShadow, map: map });
					
					// - Aktivity
					new gm.Marker({ title: 'KV Aréna (HC Energie K. Vary)', position: new gm.LatLng(50.224607,12.844509), icon: markImgs.aktivity, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Golf & Racing Club Karlovy Vary (dostihové závodiště, golf)', position: new gm.LatLng(50.222362,12.834606), icon: markImgs.aktivity, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Golf Resort Karlovy Vary', position: new gm.LatLng(50.213424,12.929749), icon: markImgs.aktivity, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Koupaliště Rolava', position: new gm.LatLng(50.237105,12.846065), icon: markImgs.aktivity, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Astoria Golf Club Cihelny', position: new gm.LatLng(50.177008,12.843404), icon: markImgs.aktivity, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Golf Club Sokolov', position: new gm.LatLng(50.159113,12.660413), icon: markImgs.aktivity, shadow: markShadow, map: map });

					// - Ski arealy
					new gm.Marker({ title: 'Lyžařský areál Neklid (Boží Dar)', position: new gm.LatLng(50.40343,12.937828), icon: markImgs.ski, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Skiareál Klínovec', position: new gm.LatLng(50.396933,12.96891), icon: markImgs.ski, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Skiareál Potůčky', position: new gm.LatLng(50.418766,12.732242), icon: markImgs.ski, shadow: markShadow, map: map });

					// - Priroda
					new gm.Marker({ title: 'Národní přírodní rezervace Soos', position: new gm.LatLng(50.148815,12.404273), icon: markImgs.priroda, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Stolová hora Vladař', position: new gm.LatLng(50.078845,13.212004), icon: markImgs.priroda, shadow: markShadow, map: map });
					new gm.Marker({ title: 'Svatošské skály', position: new gm.LatLng(50.193059,12.814425), icon: markImgs.priroda, shadow: markShadow, map: map });

					return this;
				}
		
			};
		}()
		
	};
}();

