(function ($) {
	
	$(function () {
		
		$('#make_wave').click(function () {
			$('#tag').focus();
		});


		{	/*
			 * Сортировка результатов за день / за неделю / за месяц
			 */
			$('.sort A').click(function () {
				
				var _this = this;

				$.get(this.href, {format: 'html'}, function (data) {
					
					$('.active', $('#submenu_items')).removeClass('active');
					$(_this).parents('LI:first').addClass('active');
					
					$('#left_body').append(data);
					
					$('#waves').sortAnimate({
						sortFromClass : 'waves_sorted',
						speed: 500,
						callback : function () {
							$('.waves_sorted').remove();
							initHandlers();
							_track(_this.href);

						}
					});

				})
				
				return false;

			})

		}


		{	/*
			 * обработка формы "поиска волны"
			 */
			var _defaultTextTag = $('#tag').val();
			$('#tag').defaultValue();

			$('#create_wave .buttons').click(function () {
				if ($('#tag').val() != _defaultTextTag) {
					$(this).parents('form:first').submit();
				}
				
				return false;
			});
		}


		{	/* 
			 * Обработчик ТОПа на титульной странице
			 * при наведении показываем попап последнего сообщения
			 */
			var popupHandler = function (data) {
				
				var timer = null;
				var _currentHover = null;
				$('.waves a', data).hover(function () {
	
					var _this = this
						_currentHover = this;
	
					timer = setTimeout(function () {
	
						$.get(_baseUrl + '/', {tag_id: $(_this).attr('rel'), format : 'html', indexer : 'disable'}, function (data) {

							if (!data || _currentHover != _this) return;	// нету ответа или увели мышку с элемента
						
							$('#ajax_popup').html(data);
								
							$('#popup')
								.css({
									top: $(_this).offset().top + $(_this).height(),
									left: $(_this).position().left
								})
								.fadeIn()
								.hover(function () {
									$(this)
										.stop()
										.css('opacity', 1);
	
								}, function () {
									$(this).fadeOut();
								});
								
							_track(_baseUrl + '/');
							
						});
					}, 500);	// дабы не плодить кучу коннектов
				},
				function () {
					$('#popup').fadeOut();
					clearTimeout(timer);
				});

			}
			
		}
		
		
		{	/*
			 * обработка кнопки "ещё" (следующая порция тегов в выводе всех волн)
			 */
			var buttonMoreAll_Click = function () {

				if ($('.ajax', this).length) return false;

				var _this = this;
				var _trash = $(this).is('.trash');

				$('a', this).append('<span class="ajax">&nbsp;</span>');

				$(document).scrollTop($(document).scrollTop() - 1);
				
				var _page = $('a', this).attr('rel');

				$.get(document.location.toString(), {format: 'html', page: _page, trash: _trash ? 1 : 0}, function (data) {

					$(_this).remove();

					$('#waves .wave_pull:last').addClass('last');
					$('#waves').append(data);

					initHandlers();
					
					_track(document.location.toString());
					
				})

				
				return false;
			};
			
		}
		
		


		{	// обработка поля нового сообщения

			if ($('#new_message').length) {
				$('#new_message').submit(function () {
					
					var _counter = $('#text_counter').html();
					
					if (_counter < 0) {
						$('#text_counter').fadeOut(500, function () {$(this).fadeIn(500)});
					}
					else {
						$.post($(this).attr('action'), $(this).serialize(), function () {
							$('#message')
								.val('')
								.focus();
						});
					}
					return false;
				});
				
				$('#message').bind('keyup blur focus', function () {

					if (_user != _tag) {
					
						var _val = $(this).val();
						var _wave = _tag;//$('#wave').val();
	
						var re1 = _wave + '[ \n.,]';
						var re2 = ' ' + _wave + '$';
						
						if (_val.match(re1) || _val.match(re2)) {
								
						}
						else {
	
							_val = _val.substr(0, $(this).attr('maxlength') - (_wave.length + 1));
							_val = _val + ' ' + _wave;
	
							$(this)
								.val(_val)
								.setCarretTo(0);
						}
					}
					
					var _length = $(this).val().length;
					$('#text_counter').html($(this).attr('maxlength') - _length);

					if ($(this).attr('maxlength') - _length < 0) {
						$('#text_counter').addClass('red');
					}
					else {
						$('#text_counter').removeClass('red');
					}
	 
				});
				
				$('#new_message .buttons').click(function () {
					$(this).parents('form').submit();
				});
				
				//$('#message')
					//.focus()
					//.setCarretTo(0);
			}
		}

		{	// скроллирование участников волны

			var height = 195;

			$('.scroll-pane').bind('scroll', function () {
				
				var _this = this,
					position = $(this).data('jScrollPanePosition'),
					inEnd = $(this).get(0).offsetHeight - position <= height;
				
				if ($(_this).is('.ajax') || $(_this).is('.full')) return false;

				if (inEnd) {
					
					$(_this).addClass('ajax');
					$(_this).parents('.jScrollPaneContainer').addClass('ajax');

					var _top = Math.abs($(this).position().top);
					var total = $('.scroll-pane a').length;

					$.get(_usersUrl, {format: 'html', tag: _tag, offset: total, indexer : 'disable'}, function (data) {
						
						$(_this).removeClass('ajax');
						$(_this).parents('.jScrollPaneContainer').removeClass('ajax');
							
						if (data) {

							$(_this).jScrollPaneRemove();
							
							$(_this)
								.append(data)
								.jScrollPane({ scrollbarWidth: 7 });
							
							$('.scroll-pane').get(0).scrollTo(_top);
							
						}
						else {
							$(_this).addClass('full');
						}
						
						_track(_usersUrl);
							
					})
					
					
				}
				//alert(position);
			})

			if ($('.scroll-pane').height() >= height) {
				
				$('.scroll-pane')
					.height(height)
					.jScrollPane({ scrollbarWidth: 7 });

				$('.jScrollPaneTrack').hide();
				
				$('.jScrollPaneContainer').hover(function () {
					$('.jScrollPaneTrack').fadeIn();
				}, function () {
					$('.jScrollPaneTrack').fadeOut();
				});

			}
			
		}

		

		{	// Получение следующей порции сообщений
			
			if ($('#button_more').length) {
			
				$(window).scroll(function () {
					
					if ($('#button_more').is('.ajax')) return false;
					
					var _currentBottomPos = $(document).scrollTop() + $(window).height(),
						_preloaderPos = $('#button_more').offset().top;
					
					if (_currentBottomPos >= _preloaderPos) {
						
						$('#button_more').addClass('ajax');
					
						var _last_id = $('#messages .message:last .msg_id').html(),
							_this = $('#button_more');
	
						$.get(_ajaxUrls.nextPage, {tag: _tag, format: 'html', last: _last_id}, function (data) {
	
							$(_this).remove();
		
							$('#messages .message:last').addClass('last');
							$('#messages').append(data);
							
							initHandlers($('#messages'));
		
							_track(_ajaxUrls.nextPage);
		
						});
					
					}
	
					
					
				});
				
			}
				
		}
		
		
		{	// обработка кнопки "ещё" (следующая порция картинок)
			
			var buttonMorePhotos_Click = function () {

				if ($('.ajax', this).length) return false;

				var _this = this;
				$('a', this).append('<span class="ajax">&nbsp;</span>');

				$(document).scrollTop($(document).scrollTop() - 1);
				
				var _last_id = $('#ajax_container .photo:last .msg_id').html();

				$.get(_ajaxUrls.nextPage, {tag: _tag, format: 'html', last: _last_id}, function (data) {
					
					$(_this).remove();

					$('#ajax_container .photo:last').addClass('last');
					$('#ajax_container').append(data);
					
					initHandlers($('#ajax_container'));

					_track(_ajaxUrls.nextPage);

				})

				
				return false;
			};
			
			$('#button_more_photos').click(buttonMorePhotos_Click);

		}
		

		{	// делаем ссылки списка волн уникальными для того чтобы пользователь мог узнать в какой волне есть обновления

			var makeUniqLinks = function () {
				$('.waves A').each(function () {
					$(this)
						.attr('href', $(this).attr('href') + '#' + $('.weight', this).html())
						.focus()
						.blur();
				});
			}
			
		}


		{	// пингер новых сообщений при просмотре волны

			$('#messages').bind('update', function () {
				
				$('#left_body h1').addClass('ajaxloader');
				
				var _last = $('.msg_id', $('#messages')).html();
				_last = _last ? _last : -1;

				$.ajax({
					url : _ajaxUrls.lastMessages,
					data : {tag: _tag, last: _last, format: 'html'},
					error : function  (XMLHttpRequest, textStatus, errorThrown) {
						//alert(XMLHttpRequest.status);
					},
					complete : function () {

						fixTimeMessage();

						$('#left_body .ajaxloader').removeClass('ajaxloader');
						
						setTimeout(function () {
							if (!$('#new_messages').is(':visible')) {
								$('.new').removeClass('new');
							}
							$('#messages').trigger('update');
						}, 5 * 1000);
						
						_track(_ajaxUrls.lastMessages);
						
					},
					success : function (data) {

						if (_last == -1) {
							$('#messages').html('');
						}

						$('#messages').prepend(data);
						
						if (!$('.new').length) return false;		// отбиваем мусор

						if ($(document).scrollTop() > 200 || $('#new_messages').is(':visible')) {
							$('#cnt_msg').html($('.new').length);
							$('#new_messages').slideDown(500);
						}
						else {
							$('.new_pull').slideDown(1000, function () {
								$(this).removeClass('new_pull');
							});
						}

						initHandlers($('#messages'));

					}
					
				});
				
			});
			
			
			if ($('#messages').length) {
				setTimeout(function () {
					$('#messages').trigger('update');
				}, 10 * 1000);
			}
			
			$('#new_messages').click(function () {
				
				$('#new_messages').slideUp();

				$('.new_pull').slideDown(1000, function () {
					$(this).removeClass('new_pull');
				});
				
				return false;
				
			});
			
		}

		{	/*
			 * Получаем ссылку на полную картинку из сервисов для хранения картинок
			 */
			var initPhotoThums = function (data) {

				if (!$.fn.prettyPhoto) return false;
				
				$('a[rel^="lightbox"]', data).prettyPhoto({
					callback : function () {
						$('.ppt, .pp_overlay, .pp_pic_holder').hide();
					},
					getAjaxUrl : function (_href, callback) {

						var _linkObject = $('a[href=' + _href + ']');
						
						if (_linkObject.length) {
							
							if (!_linkObject.data('image')) {
							
								$.get(_ajaxUrls.getImageUrl, {url : _href}, function (data) {
									
									_linkObject.data('image', data)
									callback(data);
									
									_track(_ajaxUrls.getImageUrl);

								})
							}
							else {
								callback(_linkObject.data('image'));
							}
						}
						else {
							callback(_href);
						}

					}
				});
		
				
			}
			
		}

		{	// кнопка ответить
			var initReply = function (data) {

				$('.reply', data).unbind('click');
				
				$('.reply', data).bind('click', function () {
					var to_user = $(this).attr('rel');
					$('#message').val(to_user + ' ' + $('#message').val());
					$('#message').focus();
					
					return false;
				});

			}

		}
		
		{	// кнопка ретвит
			var initRetweet = function (data) {

				$('.retweet', data).unbind('click');
				
				$('.retweet', data).bind('click', function () {
					
					if ($(this).is('.disable')) {
						return false;
					}
					
					var parent = $(this).parents('.message:first'),
						message = $('.msg_text', parent).html(),
						from_user = $('.msg_from_user', parent).html(),
						new_message = 'RT @' + from_user + ': ' + message,
						_this = this;;
						info = ($('.rt_info', parent).html()).substr(2),
						count_rt = 1;
						
					if (!isNaN(parseInt(info))) {
						count_rt = parseInt(info) + 1;
					}
					
					$('.rt_info', _this).html('(' + count_rt + ')');
					$(_this).addClass('disable');
					
					$.post($('#new_message').attr('action'), {message: new_message});
						
					return false;
				});

			}

		}
		
		
		var timerExpand = null;

		{	
			
			// получаем URL от картинок
			var getThumbUrl = function (element) {
				
				switch(true) {
					
					case $(element).is('.yfrog'):
							return 'http://yfrog.com/' + $(element).attr('rel') + '.th.jpg';
						break;
						
					case $(element).is('.twitpic'):
							return 'http://twitpic.com/show/thumb/' + $(element).attr('rel');
						break;
					
				}
				
			}
			
			// Предпросмотр картинок с twitpic
			var initTwitPicPreview = function (data) {
				
				var _currentHover = null;
				
				$('a.popupthumb', data).hover(function () {
					
					clearTimeout(timerExpand);
					var _this = this;
					_currentHover = this;
					
					timerExpand = setTimeout(function () {
					
						if ($(_this).is('.ajax')) return false;
						
						var _urlImg = getThumbUrl(_this);
	
						$(_this).addClass('ajax');
	
	
						$('#ajax_popup').html('');
	
						$('#popup')
							.css({top: $(_this).offset().top, left: $(_this).position().left})
							.addClass('twitpic');
	
							
						$('<img>')
							.attr('src', _urlImg)
							.appendTo('#ajax_popup')
							.load(function () {
	
								if (_currentHover != _this) return false;

								if (!$(_this).is('.ajax')) return false;	// в случае если успели увести мышку
								
								$('#popup')
									.width(this.width)
									.fadeIn();
								
								$(_this).removeClass('ajax');
								
							});

					}, 300);

				}, function () {
					$('#popup')
						.width('auto')
						.hide();
					$(this).removeClass('ajax');
					clearTimeout(timerExpand);
					_currentHover = null;
				});
				
			}
			
		}

		{	// Expander ссылок
			
			
			// Предпросмотр картинок с twitpic
			var initExpander = function (data) {
				
				var _currentHover = null;
				
				$('a.expand', data).hover(function () {
					
					clearTimeout(timerExpand);
					var _this = this;
					_currentHover = this;
					
					timerExpand = setTimeout(function () {
						
						if ($(_this).is('.ajax')) return false;
						$(_this).addClass('ajax');
						
						$('#popup')
							.css({top: $(_this).offset().top, left: $(_this).position().left})
							.addClass('expander');
						
						$('#ajax_popup').html('');

						$.get(_ajaxUrls.expandLink, {url: $(_this).attr('href')}, function (data) {
							
							if (_currentHover != _this) return false;
							
							$(_this).removeClass('ajax');
							
							$('#ajax_popup').html(data);
							$('#popup').fadeIn();
							
							_track(_ajaxUrls.expandLink);
									
							
						});
					
					}, 300);
					

					
				}, function () {
					$('#popup').hide();
					$(this).removeClass('ajax');
					clearTimeout(timerExpand);
					_currentHover = null;
				});
				
			}
			
			
		}

		{
			var fixTimeMessage = function () {
				$('.created_at_unixtimestamp').each(function () {
					$('.time', $(this).parents('.message')).html(getDateString($(this).html()));
				})
			}
		}
		
		{	// Инициализация обработчиков, после ajax зароса
			var initHandlers = function (data) {
				initReply(data);
				initRetweet(data);
				$('#button_more_all').click(buttonMoreAll_Click);
				$('#button_more_photos').click(buttonMorePhotos_Click);
				initTwitPicPreview(data);
				initExpander(data);
				popupHandler(data);
				initPhotoThums(data);
				makeUniqLinks();
			}
			
			initHandlers();

		}
		
		
		
		
		
	})
	
	
})(jQuery);

if ($.browser.msie) {

	var fixIE = function() {
		
		if (typeof(DD_belatedPNG) == 'object') {
			DD_belatedPNG.fix('#tag, #str, .reply_ico, .retweet_ico, .png');
			$('img[src*=.png]').each(function () {
				DD_belatedPNG.fixPng(this);
			});
		}
		
		$('#messages .message').hover(function () {$(this).addClass('hover')}, function () {$(this).removeClass('hover')});
		
	};
	
	$.ajaxSetup({ complete: fixIE });
	$(fixIE);
}


var declension = function(digit, strings) {
		
	if (!strings[2]) {
		strings[2] = strings[1];
	}
	
	var i = digit % 100;
	var res = '';

	if (i >= 5 && i <= 20)  {
		res = strings[2];
	}
	else {
		i %= 10;
		if (i == 1) {
			res = strings[0];
		}
		else if (i >= 2 && i <= 4) {
			res = strings[1];
		}
		else {
			res = strings[2];
		}
	}
	
	return res;

}

var getDateString = function(time) {
	
	var nowDate = new Date();
	var nowTime = nowDate.getTime() / 1000;
	var diff = nowTime - parseInt(time);
	var str = '', ret = '';

	switch (true) {
		case (diff / 60 < 1) :
				str = Math.round(diff);
				ret = declension(str, ['секунду', 'секунды', 'секунд']);
			break;
		case (diff / (60 * 60) < 1) :
				str = Math.round(diff / 60);
				ret = declension(str, ['минуту', 'минуты', 'минут']);
				break;
		case (diff / (60 * 60 * 24) < 1) :
				str = Math.round(diff / (60 * 60));
				ret = declension(str, ['час', 'часа', 'часов']);
				break;
		default:
		 		str = Math.round(diff / (60 * 60 * 24));
				ret = declension(str, ['день', 'дня', 'дней']);
				break;
	}

	return (str > 1 ? str : '') + ' ' + ret + ' назад';
}


var _track = function(url) {
	_gaq.push(['_trackPageview', url]);
}
