﻿; (function ($) {

    /*
    * Create and display twitter result
    *
    * @param {string, object} data A string, jQuery object or DOM object
    * @param {object} [options] An optional object containing options overrides
    */
    $.twitterSearchResult = function (data, options) {
        return $.twitterSearchResult.impl.init(data, options);
    };


    /*
    * Chained function to create a twitter result
    *
    * @param {object} [options] An optional object containing options overrides
    */
    $.fn.twitterSearchResult = function (options) {
        return $.twitterSearchResult.impl.init(this, options);
    };

    $.twitterSearchResult.defaults = {
        screen_name: '',
        include_entities:true
    };

    $.twitterSearchResult.impl = {
        init: function (data, options) {
            var s = this;

            // don't allow multiple calls
            if (s.data) {
                return false;
            }

            s.o = $.extend({}, $.twitterSearchResult.defaults, options);

            if (typeof data === 'object') {
                if (typeof s.o.screen_name === 'string' && s.o.screen_name != '') {
                    s.data = data instanceof jQuery ? data : $(data);

                    // merge defaults and user options

                    s.url = 'https://api.twitter.com/1/statuses/user_timeline.json?callback=?';
                    s.update();
                } else {
                    // unsupported data type!
                    alert('tscreen_name is required');
                    return s;
                }

            } else {
                // unsupported data type!
                alert('twitterSearchResult Error: data type must be jQuery object or DOM object');
                return s;
            }
        },
        update: function () {
            var s = this;
            if (!s.url) {
                alert('twitterSearchResult Error: init must be  called before');
            }
            jQuery.getJSON(s.url, s.o, function(data){
                $.twitterSearchResult.impl.create(data);
            });
        },
        create: function (data) {
            var s = this;
            
            for(var i = 0; i<data.length;i++){
                //Thu Nov 24 21:02:46 +0000 2011

                var arrOrigDate = data[i].created_at.split(" ");
                var strNewDate = arrOrigDate[5] + ' ' + arrOrigDate[2] + ' ' + arrOrigDate[1];
                data[i].date = new Date(strNewDate);

                var urls = data[i].entities.urls;
                for(var j = 0; j<urls.length;j++){
                    
                    var before = data[i].text.substring(0, urls[j].indices[0]);
                    var after =  data[i].text.substring(urls[j].indices[1], data[i].text.length  );
                    var url =   urls[j].url;
 
                    data[i].text = before + '<a href="'+ url +'">' + url + '</a>' + after;
                }
                
            }
            var t = $('#tweetTemplate');
            var template = t.length > 0 ? t.html() : '<p>${text}</p>';
            $.tmpl(template, data).appendTo(s.data);
            
        }
    }

})(jQuery);

