(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['itemRankingRss'] = function(json, container, options)
    {
        var entry;
        $feedInner = $('<div/>').attr('class', 'feedInner');     //temp inner
        $dl = $('<dl />');
        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;
            
            $dd = $('<dd/>').appendTo($dl);
            $rank = $('<p/>').text(i+1);
            $dd.append($rank);
//            $rank.hide();
            $('<a/>').attr('href', entry.link).attr('target', '_blank').append($('img:first', entry.content)).appendTo($dd);
            $('<a/>').attr('href', entry.link).attr('target', '_blank').html(titleStr).appendTo($dd);
        }
        $feedInner.html($dl);
        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).show();
                $(this).css('display', 'block');
            });
        });
        return $feedInner;
    };
    
    makeElmFuncs['itemRankingRss2'] = function(json, container, options)
    {
        var entry;
        
        var catItemNum = 3; //男女ごとの件数
        var catItemCnt = 0;
        var catName = '';
        var catCnt = 0;
        $feedInner = $('<div/>').attr('class', 'feedInner');     //temp inner
        for (var i = 0; i < json.responseData.feed.entries.length; i++) {
            entry = json.responseData.feed.entries[i];
            
            var currentCatName = entry.categories.toString();
            
            if (currentCatName != catName) {
                catName = currentCatName;
                catItemCnt = 1;
                catCnt++;
                $dl = $('<dl />');
                $feedInner.append('<p class="rankCatName rankCat_'+catCnt+'">'+currentCatName+'</p>');
            } else {
                catItemCnt ++;
                if (catItemCnt > catItemNum) continue;
            }

            
            //title
//                var titleStr = $().trimWidthStr(entry.title, 20);
            var titleStr = entry.title;
            
            
            $dd = $('<dd/>').appendTo($dl);
            $rank = $('<p/>').text(catItemCnt);
            $dd.append($rank);
//            $rank.hide();
            $('<a/>').attr('href', entry.link).attr('target', '_blank').append($('img:first', entry.content)).appendTo($dd);
            $('<a/>').attr('href', entry.link).attr('target', '_blank').html(titleStr).appendTo($dd);
            
            
            if (catItemCnt == catItemNum) {
                $feedInner.append($dl);
//                $dl
            }
            
            
        }
        
        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).show();
                $(this).css('display', 'block');
            });
        });
        return $feedInner;
    };
    
    makeElmFuncs['peopleBlogRss'] = function(json, container, options)
    {
        var entry;
        $feedInner = $('<div/>').attr('class', 'feedInner');     //temp inner
        $dl = $('<dl />');
        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);
            var dt = $('<dt/>').html($().parseDate3(entry.publishedDate)).appendTo($dl);
            $dd = $('<dd/>').appendTo($dl);
            $('<a/>').attr('href', entry.link).html(titleStr).appendTo($dd);
            $('<br/>').appendTo($dd);
            if (i === 0) {
                var img = $('img', entry.content);
                if ($(img).size() > 0) {
                    $dd.append($(img)[0]);
                }
//                $('img:first', entry.content).appendTo($dd);
            }
            $('<p/>').html(contentStr).appendTo($dd);
        }
        $feedInner.html($dl);
        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).css('display', 'block').show();
            });
        });
        return $feedInner;
    };

    makeElmFuncs['peopleBlogRss2'] = 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 = entry.title;
                        
            //content
            var contentStr = $(entry.content).text();
            contentStr = $().trimWidthStr(contentStr, 40);
            //category
            var catStr = entry.categories[0];
                        
            var tb = $('<table/>').attr('class', 'newsTb');
            var tr = $('<tr/>').appendTo(tb);
            $th = $('<th/>').appendTo(tr);
            $('<p/>').text(catStr).appendTo($th);
            $('<span/>').attr('class', 'upDate')
                .html($().parseDate3(entry.publishedDate)).appendTo($th);
            
            $td = $('<td/>').appendTo(tr);
            $('<a/>').attr('href', entry.link).html(titleStr).appendTo($td);
            $td.append(contentStr);
            
            $td2 = $('<td/>').attr('class', 'linkCell').appendTo(tr);
            $('<a/>').attr('href', entry.link).html(titleStr).appendTo($td2);
            
            
            tb.appendTo($feedInner);
        }
        
        
        return $feedInner;
    };

    makeElmFuncs['showStoreNews'] = 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 = entry.title;
                        
            //category
            var catStr = entry.categories[0];
                        
            var tb = $('<table/>').attr('class', 'newsTb');
            var tr = $('<tr/>').appendTo(tb);
            $th = $('<th/>').appendTo(tr);
//                        $('<img src="../common/images/area/icon_event.gif" width="70" height="15" />').appendTo($th);
            $('<p/>').text(catStr).appendTo($th);
            $('<span/>')
                .html($().parseDate3(entry.publishedDate)).appendTo($th);
            
            $td = $('<td/>').appendTo(tr);
            $('<a/>').attr('href', entry.link).html(titleStr).appendTo($td);
                        
                        
            tb.appendTo($feedInner);
        }
        return $feedInner;
    };

    makeElmFuncs['showStoreStaff'] = 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 = entry.title;
            
            //image
            $imgs = $("img", entry.content);
            
            $img = $imgs[0];
//            $img.css({width:"200px",height:"auto"});
            $box = $('<div/>').attr('class', 'staff clearfix');
            var link = entry.link+"_"+(i+1);
            $("<a/>").attr("href", link).append($img).appendTo($box);
            $box.append('<p class="staffName">'+titleStr+'</p>');
            $('<a href="'+link+'" class="linkDetail">もっと見る</a>').appendTo($box);
            
            $box.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);

