(function($){
    $.fn.showfeed = function(feedParams, method, options) {
        return this.each(function() {
            $.showfeed(this, feedParams, method, options);
        });
    };

    var makeElmFuncs = new Array();

    $.showfeed = function(container, feedParams, method, options)
    {
        if (!$(container).length) return;
        if (!method) return;
        if (typeof makeElmFuncs[method] !== 'function') return;
        
        //show loading
        $loadingElm = $.showfeed.setLoading();
        $.showfeed.showLoading(container, $loadingElm);
        
        var methodParams = {
            container: container,
            method: method,
            options: options
        }
        $.jGetGFeed(feedParams, methodParams);
    };
    

    makeFeddElm = function(json, methodParams)
    {
        var method = methodParams.method;
        var container = methodParams.container;
        var options = methodParams.options;
        $loadingElm = $('.loadingElm', container);
        
        if (json.responseData.feed.entries.length < 1) {
            $.showfeed.hideLoading($loadingElm);
            return;
        }
        
        $feedInner = makeElmFuncs[method](json, container, options);
        
        //set
        $.showfeed.hideLoading($loadingElm);
        $(container).append($feedInner);
        
        $feedInner.hide();
        
        var slideIn = false;
        var slideDuration = 1000;
        
        if (slideIn) {
            var elmHeight = $feedInner.data("originalHeight");
            if (!elmHeight) {
                elmHeight = $feedInner.show().height();
                $feedInner.data("originalHeight", elmHeight);
                $feedInner.hide().css({height: 0});
            }
            $feedInner.show().animate({height: elmHeight}, slideDuration, 'linear', function(){$feedInner.css('height', 'auto');});
        } else {
            $feedInner.show();
            
//            if (method == 'peopleBlogRss2') {
//                $(".newsBoxRow2").flatHeight('.newsBox');
//            }
            
        }
    }

    $.showfeed.setLoading = function()
    {
        $loadingElm = $('<p />').attr('class', 'loadingElm').text('Loading...');
        return $loadingElm;
    };
    
    $.showfeed.showLoading = function(container, $loadingElm)
    {
        $loadingElm.appendTo(container);
    };
    
    $.showfeed.hideLoading = function($loadingElm)
    {
        $loadingElm.hide();
    };


    $.jGetGFeed = function(data, methodParams, cnt, charset)
    {
        if (!cnt) cnt = 0;
        
        var jGetGoogleParams = {
            v: '1.0',         // version
            output: 'json',   // 出力形式
            num: '5'          // 出力数
        };
        data = jQuery.extend(jGetGoogleParams, data);
        
        var s = {
            type: "GET",
            url: 'http://ajax.googleapis.com/ajax/services/feed/load?callback=?',
            data: data,
            timeout : 5000,
            maxLoop : 3,
            cnt : cnt,
            methodParams : methodParams,
            error: function(XMLHttpRequest, textStatus, errorThrown){
                this.results = false;
            },
            success: function(json, dataType){
                if (json.responseStatus == '200') {
                    this.results = json;
                } else {
                    this.results = false;
                }
            },
            complete: function(XMLHttpRequest, textStatus){
                if (this.results === false) {
                    this.cnt++;
                    if (this.cnt < this.maxLoop) {
                        $.jGetGFeed(this[0], this.methodParams, this.cnt);
                    } else {
                        $('.loadingElm', this.methodParams.container).hide();
                    }
                } else {
                    makeFeddElm(this.results, this.methodParams);
                }
            },
            dataType: 'json'
        }
        if(charset) { s.scriptCharset = 'utf-8'};
        return jQuery.ajax(s);
    };



    makeElmFuncs['twitpic'] = function(json, container, options)
    {
        var entry = json.responseData.feed.entries[0];
        $feedInner = $('<div/>').attr('class', 'feedInner');     //temp inner

//        $feedInner.append(entry.content);
        $p = $('<p />');
        $p.append(entry.content).appendTo($feedInner);
//        $p.before('a', $feedInner);
        $('<p />').append($().parseDate2(entry.publishedDate)).appendTo($feedInner);
        $('a', $feedInner).attr('target', '_blank');
        var maxWidth = 200;
        $('img', $feedInner).each(function () {
            $(this).hide();
            $(this).load(function () {
                if ($(this).width() > maxWidth) {
                    $(this).css('width', maxWidth+'px').css('height', 'auto');
                }
                $(this).attr('class', 'twitpicImg').show();
            });
        });
        return $feedInner;
    };


    makeElmFuncs['MinnaNews'] = function(json, container, options)
    {
        var entry;
        $feedInner = $('<div/>').attr('class', 'feedInner');     //temp inner
        var innerStr = "";
        innerStr += '<dl>';
        
        for (var i = 0; i < json.responseData.feed.entries.length; i++) {
            entry = json.responseData.feed.entries[i];
            
            innerStr += '<dt>'+$().parseDate2(entry.publishedDate)+'</dt>';
            innerStr += '<dd>'
                       + '<a href="'+entry.link+'" target="_blank">'+entry.title+'</a>'
                       + '</dd>';
            innerStr += '<dd class="clear"></dd>';
        }
        innerStr += '</dl>';
//        return innerStr;
        $feedInner.html(innerStr);
        return $feedInner;
    };


    makeElmFuncs['youtube'] = function(json, container, options)
    {
        var entry;
        var link;
        var video_id;
        var str = '';
        $feedInner = $('<div/>').attr('class', 'feedInner');     //temp inner

        for (var i = 0; i < json.responseData.feed.entries.length; i++) {
            entry = json.responseData.feed.entries[i];
            link = entry.link;
            link.match(/watch\?v=([^&]+)&/);
            video_id = RegExp.$1;
            if (RegExp.$1 != '') {
                str += '<div class="youtubeVideo">'
                     + '<object width="303" height="252"><param name="movie" value="http://www.youtube.com/v/'+video_id+'?fs=1&amp;hl=ja_JP&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'+video_id+'?fs=1&amp;hl=ja_JP&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="303" height="252"></embed></object>'
                     + '</div>';
            }
        }
        $feedInner.html(str);
        return $feedInner;
    };


    jQuery.fn.extend({
        //
        formatDigit : function (val) {
            var str = '00' + val;
            return str.substr(str.length - 2, 2);
        },
        //
        parseDate2 : function (val) {
            var date = new Date(val);
            var dYear = date.getFullYear();
            var dMonth = $().formatDigit(date.getMonth() + 1);
            var dDate = $().formatDigit(date.getDate());
            var dHour = $().formatDigit(date.getHours());
            var dMinute = $().formatDigit(date.getMinutes());
            var dSecond = $().formatDigit(date.getSeconds());
            
            var dateStr = dYear + '.' + dMonth + '.' + dDate;
                        + ' '
                        + dHour + ':' + dMinute + ':' + dSecond;
            
            return dateStr;
        },
        //
        parseDate3 : function (val) {
            var months = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
            var date = new Date(val);
//            var dYear = date.getFullYear();
//            var dMonth = $().formatDigit(date.getMonth() + 1);
            var dMonth = date.getMonth();
            var dDate = $().formatDigit(date.getDate());
//            var dHour = $().formatDigit(date.getHours());
//            var dMinute = $().formatDigit(date.getMinutes());
//            var dSecond = $().formatDigit(date.getSeconds());
            
//            var dateStr = dYear + '.' + dMonth + '.' + dDate;
            var dateStr = months[dMonth] + ".'" + dDate + " UP";
//                        + ' '
//                        + dHour + ':' + dMinute + ':' + dSecond;
            
            return dateStr;
        },
        //
        trimWidthStr : function (str, w, suf) {
            w = (!w)? 30: w;
            suf = (!suf)? '...': suf;
            if (str) {
                if (str.length > w) {
                    str = str.substr(0, w);
                    str += suf;
                }
            }
            return str;
        }
    });

})(jQuery);

