// Get Feeds from various sources like Twitter, Google News, Google Blogs, Amazon
YAHOO.namespace('engage');

// Array.insert( index, value ) - Insert value at index, without overwriting existing keys
Array.prototype.insert = function( i, v ) {
 if( i>=0 ) {
  var a = this.slice(), b = a.splice( i );
  a[i] = v;
  return a.concat( b );
 }
};

YAHOO.engage.buzz = (function () {
    _private = {};
    _public = {};

    _public.init = function(site_url) {
        _public.twitterBuzzFeed = new _public.BuzzFeed();
        _public.newsBuzzFeed = new _public.BuzzFeed();       
        _public.blogBuzzFeed = new _public.BuzzFeed();       
        _public.videoBuzzFeed = new _public.BuzzFeed();
        //_public.amazonBuzzFeed = new _public.BuzzFeed();
        _public.gsBuzzFeeds = new _public.BuzzFeeds();
        _public.gsUrl = site_url;
        _public.gsBuzzUrl = site_url + '/modules/buzz/';

        var buzzElement = document.getElementById('my_buzz_1');
        if (buzzElement == null) {
            buzzElement = document.getElementById('web_buzz_1');
        }
        if (buzzElement != null) {
            var selectedBuzz = buzzElement.firstChild.innerHTML;
            _public.selectBuzz(buzzElement, selectedBuzz);
            _public.getBuzzFeeds(selectedBuzz);
        }
    };

    _public.selectBuzz = function(elem, buzz) {
        var myBuzzMenu = document.getElementById('engage_my_buzz_menu');
        var webBuzzMenu = document.getElementById('engage_web_buzz_menu');

        var myBuzzMenuNodes = YAHOO.util.Dom.getChildren(myBuzzMenu);
        for (var i = 0; i < myBuzzMenuNodes.length; i++) {
            YAHOO.util.Dom.removeClass(myBuzzMenuNodes[i], 'active');
        }

        var webBuzzMenuNodes = YAHOO.util.Dom.getChildren(webBuzzMenu);
        for (var i = 0; i < webBuzzMenuNodes.length; i++) {
            YAHOO.util.Dom.removeClass(webBuzzMenuNodes[i], 'active');
        }

        YAHOO.util.Dom.addClass(elem.parentNode, 'active');

        var title = document.getElementById('buzz_feed_title');
        title.innerHTML = buzz;
    };

    _public.getBuzzFeeds = function(buzz) {
        _public.gsBuzzFeeds.init();
        _public.twitterBuzzFeed.init(buzz, 4, 0, 'twitter', 'YAHOO.engage.buzz.twitterBuzzFeed');
        _public.newsBuzzFeed.init(buzz, 4, 0, 'news', 'YAHOO.engage.buzz.newsBuzzFeed');
        _public.blogBuzzFeed.init(buzz, 4, 0, 'blog', 'YAHOO.engage.buzz.blogBuzzFeed');
        _public.videoBuzzFeed.init(buzz, 4, 0, 'video', 'YAHOO.engage.buzz.videoBuzzFeed');
        //_public.amazonBuzzFeed.init(buzz, 4, 0, 'amazon', 'YAHOO.engage.buzz.amazonBuzzFeed');

	_public.twitterBuzzFeed.fetch();
        _public.newsBuzzFeed.fetch();
        _public.blogBuzzFeed.fetch();
        _public.videoBuzzFeed.fetch();
        //_public.amazonBuzzFeed.fetch();

        //_public.getAmazonAds(buzz);
	
    };

    _public.filterBuzz = function(elem, type) {
        var buzzFilterMenus = YAHOO.util.Dom.getElementsByClassName('filter_color');
        for (var i = 0; i < buzzFilterMenus.length; i++) {
            YAHOO.util.Dom.removeClass(buzzFilterMenus[i], 'filter_selected');
        }
        YAHOO.util.Dom.addClass(elem, 'filter_selected');

        var feeds = _public.gsBuzzFeeds.feeds;
        
        for (var i = 0; i < feeds.length; i++) {
            feeds[i].item.style.display = 'block';
        }

        if (type == 'all') {
            return;
        }
        
        for (var i = 0; i < feeds.length; i++) {
            if (feeds[i].item.id.indexOf(type) < 0) {
                feeds[i].item.style.display = 'none';
            }
        }
    };

    _public.BuzzFeeds = function () {
        this.feeds = [];

        this.init = function () {
            this.feeds = [];

            document.getElementById('buzz_feeds').innerHTML = '';
        };

        this.addItem = function(feed) {
            var buzzDiv = document.getElementById('buzz_feeds');
            var i;
            for (i = 0; i < this.feeds.length; i++) {
                if (feed.date > this.feeds[i].date) {
                    break;
                }
            }

            //var feedDiv = document.createElement('DIV');
            //feedDiv.id = 'feed_div_' + feed.qtype + '_' + feed.idx;
            //feedDiv.innerHTML = feed.item;
            if (i == this.feeds.length) {
                buzzDiv.appendChild(feed.item);
            }
            else {
                buzzDiv.insertBefore(feed.item, document.getElementById('feed_item_' + this.feeds[i].qtype + '_' + this.feeds[i].idx));
            }
            this.feeds = this.feeds.insert(i, feed);
        }
    };

    _public.BuzzFeed = function () {
        this.q = '';
        this.rsz = '';
        this.start = 0;
        this.qtype = '';
        this.since = 0;
        this.results = [];
        this.items = [];
        this.urls = {};
        this.objname = '';

        // Initialize structures
        this.init = function(q, rsz, start, qtype, objname) {
                this.q = q;
                this.rsz = rsz;
                this.start = start;
                this.qtype = qtype;
                this.objname = objname;
                this.since = 0;

                this.results = [];
                this.items = [];
                this.urls = {};
        };

        // Fetch feed directly from the Internet without going to server
        this.fetch = function() {
                if (this.qtype == 'twitter') {
                        this.qstr = 'http://search.twitter.com/search.json?callback='+this.objname+'.parse&q='+this.q+'&rpp=2&sid='+Math.random();
                }
                else if (this.qtype == 'news') {
                        this.qstr = 'http://ajax.googleapis.com/ajax/services/search/news?v=1.0&callback='+this.objname+'.parse&q='+this.q+'&rsz=small&sid='+Math.random();
                }
                else if (this.qtype == 'blog') {
                        this.qstr = 'http://ajax.googleapis.com/ajax/services/search/blogs?v=1.0&callback='+this.objname+'.parse&q='+this.q+'&rsz=small&sid='+Math.random();
                }
                else if (this.qtype == 'video') {
                        this.qstr = 'http://ajax.googleapis.com/ajax/services/search/video?v=1.0&callback='+this.objname+'.parse&q='+this.q+'&rsz=small&sid='+Math.random();
                }
                else if (this.qtype == 'amazon') {
                        this.qstr = _public.gsBuzzUrl + 'amazon/get_ads.php?callback='+this.objname+'.parse&q='+this.q+'&sid='+Math.random();
                }

                var yui_getSuccessHandler = function (o) {
                o.purge();
                };

                var yui_getFailureHandler = function (o) {
                //alert("BuzzFeed: Get Failed");
                o.purge();
                };

                YAHOO.util.Get.script(this.qstr, {onSuccess: yui_getSuccessHandler, onFailure: yui_getFailureHandler, timeout: 20000});
        };

        // Parse the results. Handle each case separately
        this.parse = function(returnObj) {
                if (this.qtype == 'twitter') {
                        if (returnObj && returnObj.results) {
                                var results = returnObj.results;
                                for (var i = 0; i < results.length; i++) {
                                        var result = {};
                                        result.qtype = 'twitter';
                                        result.qintype = 'Twitter';
                                        result.title = '';
                                        result.content = results[i].text;
                                        result.author = results[i].from_user;
                                        result.date = (new Date(results[i].created_at)).getTime() / 1000;
                                        result.nice_date = _public.prettyDate(results[i].created_at);
                                        result.image_url = results[i].profile_image_url;
                                        var twitter_url = 'http://twitter.com/' + result.author + '/status/' + results[i].id;
                                        result.url = twitter_url;

                                        if (result.url in this.urls) {
                                                continue;
                                        }

                                        this.urls[result.url] = 1;

                                        result.idx = i + 1;
                                        result.item = this.createItem(result);
                                        _public.gsBuzzFeeds.addItem(result);
                                        /*twitterCarousel.addItem(result.item);
                                        this.results.push(result);
                                        this.items.push(result.item);*/
                                }
                        }
                }
                else if (this.qtype == 'news') {
                        if (returnObj && returnObj.responseData && returnObj.responseData.results) {
                                var results = returnObj.responseData.results;
                                for (var i = 0; i < results.length; i++) {
                                        var result = {};
                                        result.qtype = 'news';
                                        result.qintype = 'News';
                                        result.url = results[i].unescapedUrl;
                                        result.title=results[i].titleNoFormatting;
                                        result.content = results[i].content;
                                        result.author = results[i].publisher;
                                        result.date = (new Date(results[i].publishedDate)).getTime() / 1000;
                                        result.nice_date = _public.prettyDate(results[i].publishedDate);
                                        result.image_url = _public.gsBuzzUrl + 'img/news.jpg';
                                        if (results[i].image) {
                                                result.image_url = results[i].image.tbUrl;
                                        }

                                        if (result.url in this.urls) {
                                                continue;
                                        }

                                        this.urls[result.url] = 1;

                                        result.idx = i + 1;
                                        result.item = this.createItem(result);
                                        _public.gsBuzzFeeds.addItem(result);
                                        /* newsCarousel.addItem(result.item);
                                        this.results.push(result);
                                        this.items.push(result.item);*/
                                }
                        }
                }
                else if (this.qtype == 'blog') {
                        if (returnObj && returnObj.responseData && returnObj.responseData.results) {
                                var results = returnObj.responseData.results;
                                for (var i = 0; i < results.length; i++) {
                                        var result = {};
                                        result.qtype = 'blog';
                                        result.qintype = 'Blog';
                                        result.url = results[i].postUrl;
                                        result.title=results[i].titleNoFormatting;
                                        result.content = results[i].content;
                                        result.author = results[i].author;
                                        result.date = (new Date(results[i].publishedDate)).getTime() / 1000;
                                        result.nice_date = _public.prettyDate(results[i].publishedDate);
                                        result.image_url = _public.gsBuzzUrl + 'img/blog.jpg';
                                        if (results[i].image) {
                                                result.image_url = results[i].image.tbUrl;
                                        }
                                        if (results[i].tbUrl) {
                                                result.image_url = results[i].tbUrl;
                                        }

                                        if (result.url in this.urls) {
                                                continue;
                                        }

                                        this.urls[result.url] = 1;

                                        result.idx = i + 1;
                                        result.item = this.createItem(result);
                                        _public.gsBuzzFeeds.addItem(result);
                                        /* blogCarousel.addItem(result.item);
                                        this.results.push(result);
                                        this.items.push(result.item); */
                                }
                        }
                }
                else if (this.qtype == 'video') {
                        if (returnObj && returnObj.responseData && returnObj.responseData.results) {
                                var results = returnObj.responseData.results;
                                for (var i = 0; i < results.length; i++) {
                                        var result = {};
                                        result.qtype = 'video';
                                        result.qintype = 'Video';
                                        result.url = results[i].url;
                                        result.title=results[i].titleNoFormatting;
                                        result.content = results[i].content;
                                        result.author = results[i].publisher;
                                        result.date = (new Date(results[i].published)).getTime() / 1000;
                                        result.nice_date = _public.prettyDate(results[i].published);
                                        result.image_url = _public.gsBuzzUrl + 'img/video.jpg';
                                        if (results[i].tbUrl) {
                                                result.image_url = results[i].tbUrl;
                                        }

                                        if (result.url in this.urls) {
                                                continue;
                                        }

                                        this.urls[result.url] = 1;

                                        result.idx = i + 1;
                                        result.item = this.createItem(result);
                                        _public.gsBuzzFeeds.addItem(result);
                                        /* videoCarousel.addItem(result.item);
                                        this.results.push(result);
                                        this.items.push(result.item); */
                                }
                        }
                }
                else if (this.qtype == 'amazon') {
                        if (returnObj && returnObj.results) {
                                var results = returnObj.results;
                                for (var i = 0; i < results.length; i++) {
                                        var result = {};
                                        result.qtype = 'amazon';
                                        result.qintype = 'Amazon';
                                        result.url = results[i].url["0"];
                                        result.title='';
                                        result.content = results[i].title["0"];
                                        result.author = 'amazon';
                                        result.date = 2147403600;
                                        result.nice_date = '';
                                        result.image_url = _public.gsBuzzUrl + 'img/amazon_default.jpg';
                                        if (results[i].image && results[i].image["0"]) {
                                                result.image_url = results[i].image["0"];
                                        }

                                        if (result.url in this.urls) {
                                                continue;
                                        }

                                        this.urls[result.url] = 1;

                                        result.idx = i + 1;
                                        result.item = this.createItem(result);
                                        _public.gsBuzzFeeds.addItem(result);
                                        /* amazonCarousel.addItem(result.item);
                                        this.results.push(result);
                                        this.items.push(result.item); */
                                }
                        }
                }
		FB.XFBML.parse();
        };

        // Create HTML/CSS code to display the feeds
        this.createItem = function(result) {

                var logoUrl = '';
                if (result.qtype == 'twitter') {
                        logoUrl = _public.gsBuzzUrl+'img/busybuzz_default.jpg';
                }
                else if (result.qtype == 'news') {
                        logoUrl = _public.gsBuzzUrl+'img/news.jpg';
                }
                else if (result.qtype == 'blog') {
                        logoUrl = _public.gsBuzzUrl+'img/blog.jpg';
                }
                else if (result.qtype == 'video') {
                        logoUrl = _public.gsBuzzUrl+'img/video.jpg';
                }
                else if (result.qtype == 'amazon') {
                        logoUrl = _public.gsBuzzUrl+'img/amazon_default.jpg';
                }

                var feedDiv = document.createElement('div');
                feedDiv.id = 'feed_item_'+result.qtype+'_'+result.idx;
                feedDiv.className = 'bf_feed_div';
                //var feedHTML="";
                //feedHTML = '<div id="feed_item_'+result.qtype+'_'+result.idx+'" class="bf_feed_div"><div class="bf_feed_heading"><div class="bf_feed_logo"><img src="'+logoUrl+'" /></div> <div class="bf_feed_author">'+result.author+'</div> <div class="bf_feed_menu"><a onclick="inc_point2(\''+result.url+'\'); return false;" target="_blank" href="'+result.url+'">more...</a></div></div><div class="bf_feed_body"><div class="bf_feed_img"><img height="34px;" width="35px;" src="'+result.image_url+'"></div><div class="bf_feed_data"><div class="bf_feed_title">'+result.title+'</div><div class="bf_feed_content">'+result.content+'</div></div><div class="bf_feed_time">'+result.nice_date+'</div></div>';
                var feedHTML = '' +
                    '<div class="bf_feed_heading">' +
                        '<div class="bf_feed_logo"><img src="'+logoUrl+'" /></div>' +
                        '<div class="bf_feed_qintype">'+result.qintype+' | </div>' +
                        '<div class="bf_feed_author">'+result.author+'</div>' +
                        '<div class="bf_feed_menu"><a target="_blank" href="'+result.url+'">more...</a></div>' +
                    '</div>' +
                    '<div class="bf_feed_body">' +
                        '<div class="bf_feed_img"><img height="50" width="50" src="'+result.image_url+'"></div>' + 
                        '<div class="bf_feed_data">' +
                            '<div class="bf_feed_title">'+result.title+'</div>' +
                            '<div class="bf_feed_content">'+result.content+'</div>' +
                        '</div>' +
                        '<div class="fclear"></div>' +
                        '<div class="bf_feed_time">'+result.nice_date+'</div>' +
			'<fb:comments href="'+result.url+'" num_posts="2" width="450"></fb:comments>'+
                    '</div>';
                feedDiv.innerHTML = feedHTML;
                
                return feedDiv;
        };

    };

    _public.prettyDate = function (date_str) {
        var time = (new Date(date_str)).getTime().toString();
        var date = new Date((time).replace(/-/g,"/").replace(/[+0000]/g," "));
        var diff = (((new Date()).getTime() - time) / 1000);
        var day_diff = Math.floor(diff / 86400);
        if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
                return date_str;

        return day_diff == 0 && (
                        diff < 60 && "just now" ||
                        diff < 120 && "1 minute ago" ||
                        diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
                        diff < 7200 && "1 hour ago" ||
                        diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
                day_diff == 1 && "Yesterday" ||
                day_diff < 7 && day_diff + " days ago" || day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
    };

    _public.getAmazonAds = function(buzz) {
        document.getElementById('amazon_ads').innerHTML="";
        var adsCallback = {
            success: function (oResponse) {
                var jsonString = oResponse.responseText;
                try {
                    var adsStatus = YAHOO.lang.JSON.parse(jsonString);
                }
                catch (e) {
                    alert("Error!");
                }

                if (adsStatus.status == 0) {
                    return;
                }

                for(var i=0;i<adsStatus.results.length;i++) {
                    var ads_div = document.createElement('div');
                    //ads_div.style.width='220px';
                    //ads_div.style.height='auto';
                    ads_div.setAttribute('style', 'width:220px; height: auto; margin-bottom: 15px');

                    if(adsStatus.results[i]!=null && adsStatus.results[i].url != null){
                        var anchor_tag1= document.createElement('a');
                        anchor_tag1.setAttribute('href',adsStatus.results[i].url[0]);
                        anchor_tag1.setAttribute('target','_blank');
                        anchor_tag1.setAttribute('style', 'text-decoration:none');

                        var anchor_image_div = document.createElement('div');
                        anchor_image_div.className='fleft';
                        anchor_image_div.setAttribute('style', 'float:left; width:50px;');

                        var anchor_image= document.createElement('img');
                        if(adsStatus.results[i].image!=null)
                            anchor_image.src = adsStatus.results[i].image[0];
                        else
                            anchor_image.src = _public.gsBuzzUrl+'img/amazon_default.jpg';
                        anchor_image.style.width='50px';
                        anchor_image.style.height='50px';
                        anchor_image.style.border='none';

                        anchor_image_div.appendChild(anchor_image);

                        var title_rating_div =document.createElement('div');
                        //title_rating_div.className='username';
                        title_rating_div.setAttribute('style', 'width:160px; margin-left:5px; margin-right:5px; text-align:left; align:center; font-size:10px;float:left; font-weight:bold;');

                        var title=document.createElement('div');
                        title.innerHTML=adsStatus.results[i].title[0];

                        var rating=document.createElement('div');
                        if(adsStatus.results[i].rating!=null && adsStatus.results[i].rating!=undefined)
                        {
                             //start
                             var star_image="";
                             var img1=_public.gsBuzzUrl+'img/star_full.png';
                             var img2=_public.gsBuzzUrl+'img/star_none.png';
                             var img3=_public.gsBuzzUrl+'img/star_half.png';

                             var count=0;
                             for(var k=0;k<parseInt(adsStatus.results[i].rating[0].charAt(0));k++) {
                                star_image+='<img src="'+img1+'" height="15" width="15" border="none">';
                                count++;
                             }

                             if(parseInt(adsStatus.results[i].rating[0].charAt(2))!=0){
                              star_image+='<img src="'+img3+'" height="15" width="15" border="none">';
                              count++;
                             }

                             if(count<=4)
                             while(count<5) {
                                 star_image+='<img src="'+img2+'" height="15" width="15" border="none">';
                                 count++;
                               }


                            rating.innerHTML=star_image;
                            rating.setAttribute('style','margin-top:5px; font-size:13px; color:blue;');
                        }

                        var cleardiv = document.createElement('div');
                        cleardiv.className='fclear';

                        title_rating_div.appendChild(title);
                        title_rating_div.appendChild(rating);

                        anchor_tag1.appendChild(anchor_image_div);
                        anchor_tag1.appendChild(title_rating_div);
                        anchor_tag1.appendChild(cleardiv);
                        ads_div.appendChild(anchor_tag1);

                        document.getElementById('amazon_ads').appendChild(ads_div);
                        //document.getElementById('amazon_ads').appendChild(cleardiv);
                    }
                }
            },
            failure: function (oResponse) {
            }
        };

        var urlEdit = _public.gsBuzzUrl+"getAmazonAds.json?buzz="+buzz;
        var cObj = YAHOO.util.Connect.asyncRequest('GET', urlEdit, adsCallback);
    };

    return _public;
}());




