(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,
            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 < 3) {
                        $.jGetGFeed(this[0], this.methodParams, this.cnt);
                    }
                } else {
                    makeFeddElm(this.results, this.methodParams);
                }
            },
            dataType: 'json'
        }
        if(charset) { s.scriptCharset = 'utf-8'};
        return jQuery.ajax(s);
    };

    
    makeElmFuncs['shopBlogRss'] = function(json, container, options)
    {
        var entry;
        $feedInner = $('<div/>').attr('class', 'feedInner');     //temp inner
        for (var i = 0; i < json.responseData.feed.entries.length; i++) {
            entry = json.responseData.feed.entries[i];
            //title
//                var titleStr = $().trimWidthStr(entry.title, 20);
            var titleStr = entry.title;
            
            //content
//            var contentStr = $(entry.content).text();
//            contentStr = $().trimWidthStr(contentStr, 40);
            
            $div = $('<div/>').attr('class', 'blogbox');
            
            $div.append('<span>'+$().parseDate2(entry.publishedDate)+'</span>');
            $div.append('<h3><a href="'+entry.link+'">'+titleStr+'</a></h3>');
            $div.append('<div class="clear"></div>');
            
            $div.appendTo($feedInner);
        }
        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);

