﻿(function($) {
function _sortByDate(a,b) { return b.date - a.date }
function padTwo(n){ return (n>9) ? n : "0" + n; };
function getMonthNameR(n) { return["янв","фев","мар","апр","мая","июн","июл","авг","сен","окт","ноя","дек"][n] }
function _formatDate(d) { return padTwo(d.getDate()) + " " + getMonthNameR(d.getMonth());}

function relativeDate(time){
     	var postDate = new Date(time),
	midNightDate = new Date(),
	currentDate = new Date();
	midNightDate.setHours(0,0,0,0);	
	var diff = ((postDate.getTime() - midNightDate.getTime()) / 1000);
	var diff1 = ((currentDate.getTime() - postDate.getTime()) / 1000);
	if ( 0 < diff && diff < 86400) {
		return (
		diff1 < 3600 && "только что" || //less than hour ago
		diff1 < 7200 && "час назад" || //1-2 hours ago
		diff1 < 18000 && Math.floor( diff1 / 3600 ) + " часа назад" || //2-5 hours ago
		diff1 < 36000 && Math.floor( diff1 / 3600 ) + " часов назад" || //5-10 hours ago
		diff1 < 86400 && "сегодня");
	}
	if ( -86400 < diff && diff < 0) return "вчера";
	return _formatDate(postDate);
}

function drawFeeds($container) {
	// collect entries
	var numEntries = 10;
	try {
		numEntries = parseInt($container.attr('numEntries'))
	} catch(e) {}

	var feedsInfo = [];
	$container.find("div").each(function(){
		var $this = $(this);
		var url = $this.attr('feedURL');
		var caption = $this.attr('feedCaption');
		if(!url || !caption) return false;
		feedsInfo.push({'url': url,  'caption': caption})
        })

	if(feedsInfo.length) {
		var feeds = new google.feeds.FeedControl();
		$.each(feedsInfo,function(key,val){
		feeds.addFeed(val.url, val.caption);
		})

		feeds.setNumEntries(numEntries);

		feeds.N = function(a) {
		var $result = $('<div class="gf-result"/>')
		$('<div class="gf-title"><a href="' + a.link + '" target="_self">'+a.title+'</a></div>').appendTo($result);
		$('<div class="gf-author">' + a.author.replace('(Intel)', '') + '</div>').appendTo($result);
		$('<div class="gf-relativePublishedDate">'+relativeDate(a.publishedDate)+'</div>').appendTo($result);
		$('<div class="gf-snippet">'+a.contentSnippet+'</div>').appendTo($result);
		a.html = $result[0];
            }
            $container.empty();
            feeds.draw($container.get(0), {drawMode : google.feeds.FeedControl.DRAW_MODE_TABBED}); //DRAW_MODE_LINEAR
        }
    }


    function drawCalendar($container) {
        if($container.attr('feedUrl')) {
            var feedURL = $container.attr('feedUrl')
            var calendarEntries2Parse = 30;
            try {
                calendarEntries2Parse = parseInt($container.attr('numEntries'))
            } catch(e) {}

            var feedCalendar = new google.feeds.Feed(feedURL);

            feedCalendar.setNumEntries(calendarEntries2Parse);
            feedCalendar.load(function(result) {
                if(!result.error) {
                    var calendarEvents = [];
                    // parse feeds' entries
                    for (var i = 0; i < result.feed.entries.length; i++) {
                        var entry = result.feed.entries[i];
                        // parse entrys' tags to find date
                        var eventDate = "";
                        $.each(entry.categories, function(key, val){
                            if (val.match(/(\d\d)\.(\d\d)\.(\d\d\d\d)/)||val.match(/(\d\d)\.(\d\d)\.(\d\d)/)) {
                                try {
                                    var day = parseInt(RegExp.$1,10);
                                    var month = parseInt(RegExp.$2,10);
                                    var year = parseInt(RegExp.$3,10);
                                    if (year<2000) {year+=2000;}
                                    eventDate = new Date(year, month-1, day);
                                    return false;
                               }
                               catch(e){}
                            }
                        })
                        if (eventDate != "") {
                            // push id because we'll need to reorder events
                            calendarEvents.push({idx:i,date:eventDate})
                        }
                    }
                    calendarEvents.sort(_sortByDate);
                    $container.empty();
                    $.each(calendarEvents,function(key,val){
                        var entry = result.feed.entries[val.idx]
                        $container
                            .append("<div class='calendarTitle'><a href='"+ entry.link +"' title='"+ entry.contentSnippet+"...'> "+_formatDate(val.date)+": "+entry.title+"</a></div>")
                    })
                }
            })
        }
    }


    function processFeeds() {
        $(".feed").each(function(){
            drawFeeds($(this))
        })

        $(".feedsTabs").each(function(){
            drawFeeds($(this))
        })

        $(".feedCalendar").each(function(){
            drawCalendar($(this));
        })
    }

    $.googleApiLoaded = function() {
        google.load("feeds", "1", {"callback" : processFeeds} )
    }

    $(document).ready(function() {
        $("<script><\/script>")
            .attr('type', "text/javascript")
            .attr('src', "http://www.google.com/jsapi?key=ABQIAAAA9_oipZPs9EaC4zsx5_vGBRTTLPUEgDGdOVFMGFEEeHc7UwxsRRQLJ2sFDV69218DTNiypxtWUUjqHA&hl=ru&callback=jQuery.googleApiLoaded")
            .appendTo($('head'))
    })
})(jQuery);
