jQuery(function(){
    
    (function(){

        window.reqCache = {};

        this.makeRequest = function makeRequest(url, callback){
            if (window.reqCache[url] != undefined){
                callback(window.reqCache[url]);
            } else {
                var caching_wrapper = function(data){
                    window.reqCache[url] = data;
                    callback(data)
                };
                $.getJSON(url, caching_wrapper)
            }
        };

        this.populateWidget = function populateWidget(widgt){
            var section = widgt.attr('section');
            var info_obj = {'format':'json'};
            info_obj['cat'] = widgt.attr('cat') || "";
            info_obj['count'] = widgt.attr('count');
            if (!widgt.attr('page')) widgt.attr('page',0);
            info_obj['page'] = parseInt(widgt.attr('page'), 10) + 1;
            if (widgt.attr('full')) info_obj['full'] = true;
            var args = [];
            for(var member in info_obj){
                args.push(member + "=" + info_obj[member]);
            }
            var url = "/"+section+"/?"+args.join("&");
            var callback = function(data){
                widgt.attr('page', parseInt(widgt.attr('page'), 10)+1);
                var templ = widgt.find('.template');
                templ.siblings().remove(); //cleaup
                for(i in data){
                    var post = data[i].fields;
                    var $post = $("<div>"+templ.html()+"</div>");
                    for(field in post){
                        var $field_spot = $post.find('.'+field);
                        if ($field_spot) {
                            switch(field){
                                case 'image':
                                    if ($field_spot.hasClass('thumb')){
                                        var image_name = "/static/" + post[field].replace('.','_fb_thumb.');
                                    } else {
                                        var image_name = "/static/" + post[field];
                                    }
                                    $field_spot.attr('src', image_name);
                                    break;
                                case 'slug':
                                    var base = $field_spot.attr('href');
                                    var link = section + '/' + post[field] + '/';
                                    $field_spot.attr('href', link);
                                    break;
                                case 'body':
                                    $field_spot.html(post[field]);
                                    break;
                                default:
                                    $field_spot.text(post[field]);
                            }
                        }
                    }
                    templ.parent().append($post.contents());
                }
                widgt.trigger('loaded');
            }
            this.makeRequest(url, callback)
        };


        this.loadWidgets = function loadWidgets(){
            var widgts = $(".widgt");
            widgts.each(function(i,widgt){
                var $widgt = $(widgt);
                populateWidget($widgt);
                $widgt.find('.more').bind('click', function(event){
                    var target = $(this).parents('.widgt');
                    populateWidget(target);
                    return false;
                });
            });
        };

    })()

    loadWidgets();

});


