var BnPoll = function() {
        var choice_collection = [],
        $container,
        poll_id = 95,
        onAfterVoteCallback,
        json_poll_url_base = 'http://bookclubs.barnesandnoble.com/bn/restapi/vc/polls/id/',
        json_poll_url,
        input_name = 'poll_choice_'+poll_id,
        vote_btn = 'vote_btn_'+poll_id;
        
        function setPollUrl(id) {
            if (id===undefined) {id = poll_id;}
            json_poll_url = json_poll_url_base + id
        }
        function buildPoll(data) {
        
            if (data.response.status === 'error') return;
        
            var choice_id,poll_markup = '<ul>';
            $.each(data.response.poll.choices.choice, function(i,item){
                choice_id = item.id.$

                choice_collection[choice_collection.length] = {choice_id:choice_id,choice_text:item.text.$}
                poll_markup += '<li id="li' + choice_id + '"><input type="radio" name="' + input_name + '" id="rb' + choice_id + '" value="' + choice_id + '"/><label for="rb'+ choice_id +'">' + item.text.$ + '</label></li>'
            });
            poll_markup += '</ul>'
            $(poll_markup).appendTo($container);
            $('<button type="submit" id="' + vote_btn + '">Vote</button>').appendTo($container);
            
            attachVoteHandler();
            
        }
        function makeRequest() {
            $.getJSON(json_poll_url + '?xslt=json.xsl&callback=?', function(data){buildPoll(data)});
        }
        function attachVoteHandler(){
            $('#'+vote_btn).click(function(){
                placeVote($container.find('input[@name="'+input_name+'"]:checked').val(),onAfterVoteCallback)
            });
        }
        function placeVote(selected_choice,callback){
            if (selected_choice) {
                $.getJSON(json_poll_url + '/votes/place?xslt=json.xsl&poll.choice=id/'+ selected_choice +'&callback=?', 
                    function(data){callback(data)}
                );   
            }
            else {alert('Please make a selection.')}
        }
        return {
            init:function($elm,settings){
                setPollUrl(settings.poll_id);
                $container = $elm;
                onAfterVoteCallback = settings.callback;
                makeRequest();
            }
        }
    }();
