(function($) {
    $.fn.youtube = function(o){
        var s = {
            query: null,
            page:  1,
            num:   10,
            pager: null,
            next_text: "Next >>",
            prev_text: "<< Prev",
            pager_join_text: "&nbsp;"
        }
        if(o) $.extend(s, o);
        return this.each(function(){
            if(!s.query)
                s.query = $(this).attr('name');
            if(!s.query) return false;
            var that = this;
            var list = $("<ul class='youtube-list'>").appendTo(this);
            var start = (s.page-1)*s.num+1;
            var url = 'http://gdata.youtube.com/feeds/api/videos?';
            url += 'q='+s.query+'&start-index='+start+'&max-results='+s.num;
            url += '&alt=json-in-script&callback=?';
            $.getJSON(url, function(data){
                $.each(data.feed.entry,function(i,item){
                    var id_w = item.id['$t'];
                    var id_s = id_w.split('/');
                    var id_v = id_s[id_s.length-1];
                    var pub = item.published['$t'];
                    var title = item.title['$t'];
                    var len_str = item['media$group']['yt$duration']['seconds'];
                    var len_sec = (len_str%60);
                    if(len_sec < 10) len_sec = "0"+len_sec;
                    var len_disp = parseInt(len_str/60)+":"+len_sec;
                    var li_text = "<li><a href='http://www.youtube.com/v/"+id_v;
                    li_text += "&hl=en&fs=1&rel=0'><img src='http://i2.ytimg.com/vi/";
                    li_text += id_v+"/default.jpg'/></a></li>"
                    var li_obj = $(li_text).appendTo(list);
                    $("<span>"+title+"</span>").appendTo(li_obj);
                    $("<span class='youtube-duration'>("+len_disp+")</span>").appendTo(li_obj);
                    li_obj.find('a').click(function(){
                        $("<object width='480' height='295'><param name='movie' value='http://www.youtube.com/v/"+id_v+"&hl=en&fs=1&rel=0'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param><embed src='http://www.youtube.com/v/"+id_v+"&hl=en&fs=1&rel=0' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='480' height='295'></embed></object>").dialog({
                            height:400,
                            width:600,
                            modal:true,
                            draggable:true,
                            resizable:false,
                            closeOnEscape:true,
                            bgiframe:true,
                            title:title
                        });
                        return false;
                    });
                })
            });
            // Reset the pager
            if(!s.pager)
                var pager = $("<span class='youtube-pager'>").appendTo(that);
            else {
                var pager = s.pager;
                pager.empty();
            }
            var prev_link = $("<a href='#' class='youtube-pager-prev'>"+s.prev_text+"</a>").appendTo(pager);
            if(s.pager_join_text)
                $("<span>"+s.pager_join_text+"</span>").appendTo(pager);
            var next_link = $("<a href='#' class='youtube-pager-next'>"+s.next_text+"</a>").appendTo(pager);
            next_link.click(function(){
                s.page = s.page + 1;
                $(that).empty();
                $(that).youtube(s);
                return false;
            });
            prev_link.click(function(){
                if(s.page > 1)
                    s.page = s.page - 1;
                $(that).empty();
                $(that).youtube(s);
                return false;
            });
        });
    }
})(jQuery);
