window.VBC = function(){
    var doc = document;
    var groupElement;
    var groupsUrl = "http://spreadsheets.google.com/feeds/list/t1oA__z0yxekPCsCq6xCcZw/od6/public/basic?alt=json-in-script&callback=?";
    if(!window.console){
        window.console = {log:function(){}};
    }
    
    function createObject(objStr){
        var obj = {};
        console.log(objStr);
        var splitter = objStr.split(/\:\s|,\s(?=\w*:)/);
        for(var i = 0, len = splitter.length; i < len; i++){
            obj[splitter[i]] = splitter[++i];
        };
        return obj;
    }
    
    function createEmailLinks(html){
        return html.replace(/([\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)*\w[\w-]{0,66}\.[a-z]{2,6}(?:\.[a-z]{2})?)/i,"<a href='mailto:$1'>$1</a>");
    }
    
    function createGroupUI(group){
        var div = doc.createElement("div");
        div.className = "vbc-group";
        var html = [
            "<h2 class='vbc-group-title'>"+group.groupname+"</h2>",
            group.groupdescription ? "<i>"+group.groupdescription+"</i>" : "",
            "<br><br>",
            group.grouplocation ? "Location: " + group.grouplocation : "",
            group.addresstogroup ? " <a href='http://maps.google.com/maps?q=" + group.addresstogroup + "' target='_blank' title='View on Map'><img src='http://rs1.adc4gis.com/img/icons/silk/map.png' style='border:none;padding:0;margin:0;vertical-align:text-bottom;'/></a>" : "",
            group.groupleaders ? "<br>Leaders: " + group.groupleaders : "",
            group.grouptime ? "<br>Time: " + group.grouptime : "",
            group.groupstatus ? "<br>Status: " + group.groupstatus : ""
            
        ].join("");
        html = createEmailLinks(html);
        div.innerHTML = html;
        return div;
    };
    
    function generateUI(groups){
        var frag = doc.createDocumentFragment();
        
        for(var i = 0, len = groups.length; i < len; i++){
            frag.appendChild(createGroupUI(groups[i]));
        }
        
        groupElement.appendChild(frag);
    }
    
    function handleGroupData(data){
        var groups = [];
        var feedEntries = data.feed.entry
        
        for(var i = 0, len = feedEntries.length; i < len; i++){
            var entry = feedEntries[i];
            var group = createObject(entry.content.$t);
            group.groupname = entry.title.$t;
            groups.push(group);
        }
        
        generateUI(groups);
    };
    
    return {
        generateGroupsData: function(element){
            groupElement = doc.getElementById(element);
            jQuery.getJSON(groupsUrl,handleGroupData);
        }
    }
}();
