﻿/* Twitter Proxy Wrapper */
/*
    Campaign Solutions - Daniel E. Ulfe - Oct/2009
    
    Requires Twitter Proxy back-end
*/
(function($) {
    $.twitterCached = function(elem, options) {
        $(elem).twitterCached(options);
    };

    $.twitterCached.inUse = false;

    $.fn.twitterCached = function(options) {
        return this.each(function() {
            // Helper
            var $this = $(this);
            // Default options
            this.options = $.extend({}, $.fn.twitterCached.defaults, options);

            if ($.twitterCached.inUse) {
                alert('Only 1 simultaneous AJAX call allowed.');
                return;
            }

            // In-Use Flag
            $.twitterCached.inUse = true;

            // Ajax Call
            $.postToDotNetService("/twitter/twitter.asmx/GetPublicStatuses", "{username:'" +
                this.options.username + "', ttl:" +
                this.options.cacheTTL + ", count:" +
                this.options.count + "}",
                function(data, status, error) {
                    // Flag
                    $.twitterCached.inUse = false;

                    // Processing results
                    if (status = 'success') {
                        if (data.d.Code == 0) {
                            var ul = $('<ul>').addClass('twitter');
                            for (var i = 0; i < data.d.Statuses.length; i++) {
                                // Converting MS JSON DateTime to JS DateTime
                                data.d.Statuses[i].CreationTime = eval(data.d.Statuses[i].CreationTime.replace(/\/Date\((\d+)\)\//gi, 'new Date($1)'));

                                if ($this[0].options.ondatarowbound == null)
                                    var li = $('<li>' + data.d.Statuses[i].Message + '</li>');
                                else
                                    var li = $('<li>' + $this[0].options.ondatarowbound(data.d.Statuses[i]) + '</li>');

                                if (i == 0)
                                    li.addClass('first');

                                if (i == data.d.Statuses.length - 1)
                                    li.addClass('last');

                                ul.append(li);
                            }
                            $this.html("");
                            $this.append(ul);

                            if ($this[0].options.onend != null)
                                $this[0].options.onend($this, 'success');
                        }
                        else {
                            $this.html($this[0].options.errorMessage_TwitterFailed);

                            if ($this[0].options.onend != null)
                                $this[0].options.onend($this, 'twittererror', data.d.code, data.d.message);
                        }
                    }
                    else {
                        $this.html($this[0].options.errorMessage_ProxyFailed);

                        if ($this[0].options.onend != null)
                            $this[0].options.onend($this, 'proxyerror', error);
                    }
                });
        });
    };

    $.fn.twitterCached.defaults = {
        username: '',
        count: 5,
        cacheTTL: 60,
        //errorMessage_TwitterFailed: 'Twitter did not respond',
        //errorMessage_ProxyFailed: 'Twitter proxy service failed',
		errorMessage_TwitterFailed: 'Welcome to RobertHurtForCongress.com!',
        errorMessage_ProxyFailed: 'Welcome to RobertHurtForCongress.com!',
        ondatarowbound: null,
        onend: null
    };
})(jQuery);
