﻿function PagesContent() {
	// модуль
	//this._module = $('#m-pages-content');
	this._module = $('#pop_articles');
	
	// контейнер для заполнения
	this._container = $('#m-pages-content-items');
	this._bind();
	
	// модуль включён - (да - близкие статьи будут рендериться)
	this.on = false;
	
	// отображение числа страниц в верху панели
	this._numberOfArticles = $('#inner_block_people_number');
	
	// отображение числа комментариев в верху панели
	this._numberOfComments = $('#inner_block_comments_number');
	
	// список статей
	this._list = null;
	
	// id последней показанной статьи
	this._lastShownArticleId = null;
	
	// иконка числа статей подсвечена
	this._iconIsHighlighted = false;
	
	/**
	 * статья которая должна быть показана, чтобы событие "onarticlechange" могло быть вызвано
	 */
	this.waitingFor = null;
	
	this._load();
}

PagesContent.prototype = {
	_bind: function() {
		var that = this;
		$('.m-article-title').live('click', function() {
		    var article = $(this),
		        id = article.data('article-id'),
		        subject = article.text(),
		        page_id = article.data('minpage-id'),
		        right = article.data('right') == '1';
		       
		    // сохранить новую последнюю статью
		    that._lastShownArticleId = id;
            
			// trigger 'onclickarticle' - клик по названию статьи
			that._module.trigger('onclickarticle', { id: id, subject: subject, page_id: page_id, right: right } );
			
			// триггер 'onarticlechange' - статья изменилась
			that._module.trigger('onarticlechange', { id: id, subject: subject, page_id: page_id } );
			//that.hide();
			
			// счётчик - открыть статью
            logEvent('showarticle');
            
            return false;
		});
		
		$('.m-voting-title').live('click', function() {
			that._module.trigger('showvoting', { id: $(this).data('voting-id'), subject: $(this).text(), page_id: $(this).data('minpage-id'), right: false } );
			that.hide();
			
			// счётчик - открыть голосование
            logEvent('showvoting');
            
            return false;
		});
		
		// клик на крестик "закрыть"
		
		$('.close_articles').live('click', function() {
            // спрятать модуль
            that.hide();
        });
		
		/*$('#m-pop-aricles').live('click', function() {
			// спрятать модуль
			that.hide();
		});*/
		
		// клик на иконку на панели 
		$('#inner_block_people').live('click', function() {
			// включить модуль
			//that.on = true;
			
			// показать всё виджеты
			//that.showAll();
			
			
			// переключение модуля
			if (that._module.is(':visible')) {
				that._module.hide();
			} else {
				// показать модуль
				that._module.show();
				that._module.trigger('onshow');			
			}
		});

		
		// клик на кнопку 'поделиться'
		$('#inner_block_link').live('click', function() {
			// показать окно отправки
			$("#take_link").show();
			$('#take_link_error').text('');
		});
		
		
		
		// клик на крестик в форме "поделиться"
		$('#close_take_link').live('click', function() {
			$("#take_link").hide();
			$('#enter_new_email').val('E-mail');
		});
		
		$('#enter_new_email').clearByFocus();
		
		//клик на кноку go
		$("#take_link_go").live('click', function() {
			var email = $('#enter_new_email').val();
			if (email.length == 0 || email == 'E-mail') {
				$('#take_link_error').text('*E-mail не введен');
				return;
			}
			
			if (!isValidEmail(email)) {
				$('#take_link_error').text('*E-mail невалиден');
				return;
			}
			
			$.post('/ajax/share_friend/', {
				link: document.location.hash.substr(1),
				mag: mag,
				email: email,
				success: function() {
					$("#take_link").hide();
					$('#enter_new_email').val('E-mail');
					alert('Отправлено');
				}
			});
		});
		
		// клик на кнопку фидбек
		$('#inner_block_send_friend').live('click', function() {
			$('#your_feedback').show();		
			$('#your_feedback_mess').val('Ваш отзыв');
		});
		
		// очистка по фокусу
		$('#your_feedback_mess').bind({
			focusin: function() {
				if ($(this).val() == 'Ваш отзыв') $(this).val('');
			}, 
			focusout: function() {
				if ($(this).val() == '') $(this).val('Ваш отзыв');
			}
		});
		
		// клик по кнопке отправки фидбека
		$('#your_feedback_go').click(function() {
			var text = $('#your_feedback_mess').val();
			if (account.isLogin) {
				if (!text.length || text == 'Ваш отзыв') {
					$('#your_feedback_error').text('*Отзыв не введен');
					return;
				}
					
				$.ajax({
					type: 'post',
					url: '/ajax/sergey/', 
					data: { text: text }, 
					success: function(data) {
						if (data == 0) {
							alert('Отзывы могут отправлять только зарегистрированные пользователи');
						} else {
							alert('Ваш отзыв принят');
							$('#your_feedback').hide();
							$('#your_feedback_error').text('');
						}
					}
				});
			} else {
				alert('Отзывы могут отправлять только зарегистрированные пользователи');
			}
		});
		
		// клик по кнопке закрытия фидбека
		$('#close_your_feedback ').click(function() {
			$('#your_feedback').hide();
			$('#your_feedback_error').text('');
		});
	},
	
	// показать все виджеты
	showAll: function() {
	
	},
	
	// спрятать модуль
	hide: function() {
		this._module.hide();
	},
	
	// показать модуль
	show: function() {	
	    this._module.show();
		/*var that = this;
		if (this._module.is(':empty')) {
			this._module.load('/ajax/return_articles?mag=' + mag, function() {
				that._module.show();
				that._list = that._module.find('.m-article-title, .m-voting-title');
				
				
				
				// load module
				that._module.trigger('onload');
			});
		} else {
			this._module.show();
		}*/
	},
	
	_load: function () {
	    var that = this;       
        this._module.load('/ajax/return_articles?mag=' + mag, function() {
              that._list = that._module.find('.m-article-title, .m-voting-title');
              that._module.trigger('onload');
        });
    },
	
	// подсветить в списке ближайшие элементы
	hightlightClosest: function(page) {
	
	},
	
	//
	showWidgets: function(currentPage) {
		if (!this._list) return;
		
		
		
		//var markClass = 'm-pages-content-mark';
		
		// индекс текущей статьи
		var currentIndex = false,
		
		    // подсветить иконку 
		highlightIcon = false,
		
		    // индекс ближайшей статьи
		    closestIndex = false,
		    closestDiff = 1000,
		    
		    numberOfArticles = 0,
		    
			// текущая статья
			article;
		
		this._list.each(function(index, value) {
			var $this = $(this),
				min = parseFloat($this.data('minpage-id')),
				max = parseFloat($this.data('maxpage-id')),
				page = parseFloat(currentPage);
			    
			    //отслеживать ближайшую стью если не определена текущая
			    if (!currentIndex && Math.abs(min - page) < closestDiff) {
			        closestDiff = Math.abs(min - page);
	                closestIndex = index;
			    }
			if (min == page) highlightIcon = true;
			    
			if (min <= page && max >= page) {
				currentIndex = index;
				$this.addClass('m-pages-content-mark');
				
				// если текущая статья не определена, и этот виджет - статья, то записать эту статью в текущую
				if (!article && $this.hasClass('m-article-title')) article = $this;
			} else {
				$this.removeClass('m-pages-content-mark'); 
			}
		});
		
		// показать статьи около текущей или ближайшей
		var cIndex = currentIndex || closestIndex;
		this._list.each(function(i,v) {
			if ( (cIndex >= i && cIndex - i < 4) || (cIndex <= i && i - cIndex < 6) ) {
				$(this).closest('li').show();
				numberOfArticles += 1;
			} else {
				$(this).closest('li').hide();					
			}
			
		});

		// показать число виджетов на панели
		this._numberOfArticles.text(numberOfArticles);
		
		// если найдена текущая статья и статья изменилась
		if (article && this._lastShownArticleId !== article.data('article-id')) {			
				// сохранить новую последнюю статью
				this._lastShownArticleId = article.data('article-id');
				
				// если mPagesContent скрыт - показать новую текущую статью
				if (this._module.is(':hidden')) {
				    
				    // вызывать событие 'onarticlechange', если ждать не надо или дождались нужной страницы
				    if (!this.waitingFor || this.waitingFor == this._lastShownArticleId) {
				        this.waitingFor = null;
				     // trigger 'onarticlechange' - текущая статья изменилась
	                    this._module.trigger('onarticlechange', { id: article.data('article-id'), subject: article.text(), page_id: article.data('minpage-id') } );
				    }
				    
					
				}
						
		} 
		
		// подсветка иконки числа статей
 		if (this._iconIsHighlighted !== highlightIcon) {
		    this._iconIsHighlighted = highlightIcon;
		    if (this._iconIsHighlighted) {
		        $('#inner_block_people_number').css('font-weight', 'bold');
		    } else {
		        $('#inner_block_people_number').css('font-weight', 'normal');
		    }
		}
	},
	
	// отрисовать информацию о виджетах widgets
	// выделить те, которые находятся в currentDiv
	deprecated_showWidgets: function(widgets, currentDiv) {
		// если не включён - игнорировать
		//if (!this.on) return;			
				
		var html = '', that = this,
		
			// сумма комментариев на всех виджетах в панел
			allComments = 0;
			
		//TODO !!! Зачем этот шоу здесь поставлен?:)	
//		that._module.show();
		
		// проийтись по виджетам, исколючая повторения.
		// собрать html для отображения		
		widgets.withUniqId().each(function() {
			var widget = $(this);
				
			// добавить класс 'm-page-content-mark' - выделить элемент, если он есть в текщем диве
			if (currentDiv.find(widget).length) {
				var addClass = 'm-pages-content-mark';
			} else {
				var addClass = '';
			}			
			
			if (widget.is('.article'))      html += that.htmlArticle(widget, addClass);
			else if (widget.is('.voting')) html += that.htmlVoting(widget, addClass);	

			// считать комментарии
			allComments += +widget.data('com');
		});

		
		
		// показать число комментариев на видимых виджетах
		this._numberOfComments.text(allComments);
		
		this._container.html(html);
	},
	
	htmlArticle: function(article, additionClass) {
		// additionClass - дополнительный класс
		
		var id = article.attr('id');
		var params = $.parseJSON($("#" + id + "_params").html());
		return	'<div class="m-pages-content-wrap ' + additionClass + '"><span class="m-pages-content-rating">+' + article.data('com') + '</span><a href="javascript:void(0)" class="m-article-title" data-article-id="' + id + '" data-minpage-id="' + params.minpage + '">' + params.rel + '</a></div>';
	},
	
	htmlVoting: function(voting, additionClass) {
		// additionClass - дополнительный класс
	
		var id = voting.attr('id');
		var params = $.parseJSON($("#" + id + "_params").html());
		return '<div class="m-pages-content-wrap ' + additionClass + '"><span class="m-pages-content-rating">+' + voting.data('com') + '</span><a href="javascript:void(0)" class="m-voting-title"  data-voting-id="' + id + '" data-minpage-id="' + params.minpage + '">' + params.question + '</a></div>';
	},
	
	bind: function(eventType, handler) {
        $.fn.bind.apply(this._module, arguments);
    }
}
