var Tops = {};
$(document).ready(function(){
    
    $.fn.mrepControl = function() {
        var el = this;
	
	var REPORTS_COUNT = 12;
	var SLIDE_TIMER = undefined;
	//get main useful objects
	var tabsObj = $(el).find('#MRControlBarTabs');
	
	var mrTopNewestDiv   = $(tabsObj).find('#MRTop01');
	var mrTopNewestUl   = $(mrTopNewestDiv).find('ul');
	
	var mrTopPopularDiv  = $(tabsObj).find('#MRTop02');
	var mrTopPopularUl   = $(mrTopPopularDiv).find('ul');
	
	var mrTopContestsDiv = $(tabsObj).find('#MRTop03');
	var mrTopContestsUl   = $(mrTopContestsDiv).find('ul');
	
	var playObj = $('#MRControlPlay').get();
	
	var objByType = {
	    'Top01': mrTopNewestUl,
	    'Top02': mrTopPopularUl,
	    'Top03': mrTopContestsUl
	};
	
	function init() {
            emptyTabs();
	    emptyPlay();
	    
	    renderTops();
	    
	    $('#MRTopNewestTab').slideDownTab();
        }
	
	function emptyTabs() {
	    $(mrTopNewestUl).children().remove();
	    $(mrTopPopularUl).children().remove();
	    $(mrTopContestsUl).children().remove();
	}
	
	function emptyPlay() {
	    $(playObj).empty();
	}
	
	function reloadPlayArea(obj) {
	    emptyPlay();
	    // id, thumb, title, author, date, views_by_month, views_by_alltime, estimation, tv
	    $('<a href="/reports/'+obj.id+'" class="ReportDirectLink"><img src="http://b1.mreporter.ru/c/'+obj.thumb+'.2.jpg" /></a>').appendTo(playObj);
	    
	    var repDataDiv = $('<div class="ReportData"></div>').appendTo(playObj);
	    
	    $('<p class="ReportTitle">'+obj.title+'</a></p>').appendTo(repDataDiv);
	    $('<p class="AuthorAndDate">'+obj.date+' <a href="/users/'+obj.author+'">'+obj.author+'</a></p>').appendTo(repDataDiv);
	    $('<p class="ViewCount" title="Просмотров: всего - '+obj.views_by_alltime+', за месяц - '+obj.views_by_month+'">'+obj.views_by_alltime+'</p>').appendTo(repDataDiv);
	    
	    if ( obj.tv == '1' ) {
		$('<p class="ShowOnTV">показано по ТВ</p>').appendTo(repDataDiv);
	    }
	    
	    var estimate_class = obj.estimation * 10;
	    $('<div title="Средняя оценка" class="Rating"><div class="MRRatingStars2 MRRS2Level_'+estimate_class+'"></div></div>').appendTo(repDataDiv);
	}
	
	function renderTops() {
	    for (var type in Tops) {
		var count = 1;
		var obj = Tops[type];
		var targetUl = objByType[type];
		for (var i=0; i<obj.length; i+=9) {
		    var oneRep = new Object;
		    // id, thumb, title, author, date, views_by_month, views_by_alltime, estimation, tv
		    oneRep.id = obj[i];
		    oneRep.thumb = obj[i+1];
		    oneRep.title = obj[i+2];
		    oneRep.author = obj[i+3];
		    oneRep.date = obj[i+4];
		    oneRep.views_by_month = obj[i+5];
		    oneRep.views_by_alltime = obj[i+6];
		    oneRep.estimation = obj[i+7];
		    oneRep.tv = obj[i+8];
		    
		    var str_tv = '';
		    if ( obj[i+8] == '1' ) str_tv = '<span class="ShowOnTvIcon"></span>';
		    
		    var liClass = '';
		    if ( !(count % 4) ) liClass = 'Last';
		    var oneRec = $('<li class="'+liClass+'">'+str_tv+'<span rel="/reports/'+obj[i]+'" class="ReportLinkIcon"></span><a rel="'+count+'" href="javascript:void(0)"><span style="background:url(http://b1.mreporter.ru/c/'+oneRep.thumb+'.3.jpg) center no-repeat"></span></a></li>')
			.appendTo(targetUl)
			.click(function(_oneRep){//вешаем обработчик
			    return function() {
				$(tabsObj).find('li').removeClass('ActiveThumb');
				$(this).addClass('ActiveThumb');
				reloadPlayArea( _oneRep );
				return false;
			    }
			}(oneRep));
		    ++count;
		}
	    }
	    
	    $('.ReportLinkIcon').click(function(){
		var direct_link = $(this).attr('rel');
		window.location.href = direct_link;
	    });
	    
	    var liArr = $(tabsObj).find('li');
	    $(liArr).each(function(){
		var el = this;
		
		$(el).mouseover(function(){
		    $(el).find('.ReportLinkIcon').show();
		});
		$(el).mouseout(function(){
		    $(el).find('.ReportLinkIcon').hide();
		});
	    });
	}
	
	//events
	$(mrTopNewestDiv).hide().css('height', '0px');
	$(mrTopPopularDiv).hide().css('height', '0px');
	$(mrTopContestsDiv).hide().css('height', '0px');
    
	$("#MRControlBarTabs .Tab").click(function(){
	    if ( $(this).hasClass('Active') ) {
		return false;
	    } else {
		var toShow = $(this).next("div.TabContent");
		var toHide = $(this).siblings("div.TabContent:visible");
		
		var blockHeight = 221;
		if ( toHide.length == 0 ) {//если нечего скрывать (все схлопнуто), то просто показываем
		    toShow.show().stop(true,true).animate(
			{ height: blockHeight+'px' },
			{
			    step: function(now) {
				var current = now;
				if ($.browser.msie || $.browser.opera || $.browser.safari) {
				    current = Math.ceil(current);
				}
				toShow.height( current );
			    }
			}, "slow" );
		} else {
		    toShow.css({ height: 0, overflow: 'hidden' }).show();
		    toHide.stop(true,true).animate(
			{ height: "hide" },
			{
			    step: function(now) {
				var current = blockHeight - now;
				if ($.browser.msie || $.browser.opera || $.browser.safari) {
				    current = Math.ceil(current);
				}
				toShow.height( current );
			    }
			},
			{
			    complete: function() {
				toShow.css("height", "auto");
			    }
			},
			"slow"
		    );
		}
		$('#MRControlBarTabs').find(".Tab").removeClass("Active");
		$(this).addClass("Active");
		$(toShow).find('li').filter(':first').trigger('click');
	    }
	    return false;
	});
	
	$.fn.slideDownTab = function() {
	    var el = this;
	    if ( $(el).hasClass('Tab') ) {
		$(el).trigger('click');
	    }
	    return false;
	}
	
	function slideStart() {
	    var curTop = $(tabsObj).find('.TabContent').filter(':visible');
	    var curRep = $(curTop).find('li.ActiveThumb');
	    
	    if ( curTop.length == 0 || curRep.length == 0 ) return;
	    
	    var nextRep;
	    var nextTab;
	    //проверяем текущий li
	    if ( $(curRep).index() == (REPORTS_COUNT-1) ) {//li последний в данном списке
		//проверяем текущий Tab
		nextTab = $(curTop).nextAll('a.Tab').filter(':first');
		if ( nextTab.length == 0 ) {//Tab последний
		    nextTab = $(tabsObj).find('a.Tab').filter(':first');
		}//есть следующий Tab
		
		$(nextTab).trigger('click');
	    } else {//есть следующий li
		nextRep = $(curRep).next('li');
		$(nextRep).trigger('click');
	    }
	    SLIDE_TIMER = setTimeout( slideStart, 3000 );
	}
	
	function slideStop() {
	    clearTimeout(SLIDE_TIMER);
	    SLIDE_TIMER = undefined;
	}
	
	init();
	SLIDE_TIMER = setTimeout( slideStart, 3000 );
	
	$(tabsObj).mouseover(function(){
	    slideStop();
	});
	
	$(tabsObj).mouseout(function(){
	    SLIDE_TIMER = setTimeout( slideStart, 3000 );
	});
    }
    $('#MRControl').mrepControl();
    
});
