(function($){$.fn.jCarouselLite=function(o){o=$.extend({btnPrev:null,btnNext:null,btnGo:null,mouseWheel:false,auto:null,speed:200,easing:null,vertical:false,circular:true,visible:3,start:0,scroll:1,beforeStart:null,afterEnd:null},o||{});return this.each(function(){var b=false,animCss=o.vertical?"top":"left",sizeCss=o.vertical?"height":"width";var c=$(this),ul=$("ul",c),tLi=$("li",ul),tl=tLi.size(),v=o.visible;if(o.circular){ul.prepend(tLi.slice(tl-v-1+1).clone()).append(tLi.slice(0,v).clone());o.start+=v}var f=$("li",ul),itemLength=f.size(),curr=o.start;c.css("visibility","visible");f.css({overflow:"hidden",float:o.vertical?"none":"left"});ul.css({margin:"0",padding:"0",position:"relative","list-style-type":"none","z-index":"1"});c.css({overflow:"hidden",position:"relative","z-index":"2",left:"0px"});var g=o.vertical?height(f):width(f);var h=g*itemLength;var j=g*v;f.css({width:f.width(),height:f.height()});ul.css(sizeCss,h+"px").css(animCss,-(curr*g));c.css(sizeCss,j+"px");if(o.btnPrev)$(o.btnPrev).click(function(){return go(curr-o.scroll)});if(o.btnNext)$(o.btnNext).click(function(){return go(curr+o.scroll)});if(o.btnGo)$.each(o.btnGo,function(i,a){$(a).click(function(){return go(o.circular?o.visible+i:i)})});if(o.mouseWheel&&c.mousewheel)c.mousewheel(function(e,d){return d>0?go(curr-o.scroll):go(curr+o.scroll)});if(o.auto)setInterval(function(){go(curr+o.scroll)},o.auto+o.speed);function vis(){return f.slice(curr).slice(0,v)};function go(a){if(!b){if(o.beforeStart)o.beforeStart.call(this,vis());if(o.circular){if(a<=o.start-v-1){ul.css(animCss,-((itemLength-(v*2))*g)+"px");curr=a==o.start-v-1?itemLength-(v*2)-1:itemLength-(v*2)-o.scroll}else if(a>=itemLength-v+1){ul.css(animCss,-((v)*g)+"px");curr=a==itemLength-v+1?v+1:v+o.scroll}else curr=a}else{if(a<0||a>itemLength-v)return;else curr=a}b=true;ul.animate(animCss=="left"?{left:-(curr*g)}:{top:-(curr*g)},o.speed,o.easing,function(){if(o.afterEnd)o.afterEnd.call(this,vis());b=false});if(!o.circular){$(o.btnPrev+","+o.btnNext).removeClass("disabled");$((curr-o.scroll<0&&o.btnPrev)||(curr+o.scroll>itemLength-v&&o.btnNext)||[]).addClass("disabled")}}return false}})};function css(a,b){return parseInt($.css(a[0],b))||0};function width(a){return a[0].offsetWidth+css(a,'marginLeft')+css(a,'marginRight')};function height(a){return a[0].offsetHeight+css(a,'marginTop')+css(a,'marginBottom')}})(jQuery);(function ($) {
    $.fn.tweet = function (o) {
        var s = {
            username: [],              // [string]   required, unless you want to display our tweets. :) it can be an array, just do ["username1","username2","etc"]
            list: null,                              //[string]   optional name of list belonging to username
            avatar_size: null,                      // [integer]  height and width of avatar if displayed (48px max)
            count: 3,                               // [integer]  how many tweets to display?
            intro_text: null,                       // [string]   do you want text BEFORE your your tweets?
            outro_text: null,                       // [string]   do you want text AFTER your tweets?
            join_text: null,                       // [string]   optional text in between date and tweet, try setting to "auto"
            auto_join_text_default: "i said,",      // [string]   auto text for non verb: "i said" bullocks
            auto_join_text_ed: "i",                 // [string]   auto text for past tense: "i" surfed
            auto_join_text_ing: "i am",             // [string]   auto tense for present tense: "i was" surfing
            auto_join_text_reply: "i replied to",   // [string]   auto tense for replies: "i replied to" @someone "with"
            auto_join_text_url: "i was looking at", // [string]   auto tense for urls: "i was looking at" http:...
            loading_text: null,                     // [string]   optional loading text, displayed while tweets load
            query: null                             // [string]   optional search query
        };
        if (o) $.extend(s, o);
        $.fn.extend({
            linkUrl: function () {
                var returning = [];
                var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
                this.each(function () {
                    returning.push(this.replace(regexp, "<a target='_blank' href=\"$1\">$1</a>"));
                });
                return $(returning);
            },
            linkUser: function () {
                var returning = [];
                var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
                this.each(function () {
                    returning.push(this.replace(regexp, "<a target='_blank' href=\"http://twitter.com/$1\">@$1</a>"));
                });
                return $(returning);
            },
            linkHash: function () {
                var returning = [];
                var regexp = /(?:^| )[\#]+([A-Za-z0-9-_]+)/gi;
                this.each(function () {
                    returning.push(this.replace(regexp, ' <a target="_blank" href="http://search.twitter.com/search?q=&tag=$1&lang=all&from=' + s.username.join("%2BOR%2B") + '">#$1</a>'));
                });
                return $(returning);
            },
            capAwesome: function () {
                var returning = [];
                this.each(function () {
                    returning.push(this.replace(/\b(awesome)\b/gi, '<span class="awesome">$1</span>'));
                });
                return $(returning);
            },
            capEpic: function () {
                var returning = [];
                this.each(function () {
                    returning.push(this.replace(/\b(epic)\b/gi, '<span class="epic">$1</span>'));
                });
                return $(returning);
            },
            makeHeart: function () {
                var returning = [];
                this.each(function () {
                    returning.push(this.replace(/(&lt;)+[3]/gi, "<tt class='heart'>&#x2665;</tt>"));
                });
                return $(returning);
            }
        });
        function parse_date(date_str) {
            // The non-search twitter APIs return inconsistently-formatted dates, which Date.parse
            // cannot handle in IE. We therefore perform the following transformation:
            // "Wed Apr 29 08:53:31 +0000 2009" => "Wed, Apr 29 2009 08:53:31 +0000"
            return Date.parse(date_str.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));
        }
        function relative_time(time_value) {
            var parsed_date = parse_date(time_value);

            /* IMPORTANT - ADD 13 HOURS TO TWITTER DATE TO GET CORRECT AUSTRLAIAN DATE */
            /* ----------------------------------------------------------------------- */
            parsed_date.setHours(parsed_date.getHours() + 13);
            /* ----------------------------------------------------------------------- */

            var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
            var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
            var r = '';
            if (delta < 60) {
                r = delta + ' seconds ago';
            } else if (delta < 120) {
                r = 'a minute ago';
            } else if (delta < (45 * 60)) {
                r = (parseInt(delta / 60, 10)).toString() + ' minutes ago';
            } else if (delta < (2 * 60 * 60)) {
                r = 'an hour ago';
            } else if (delta < (24 * 60 * 60)) {
                r = '' + (parseInt(delta / 3600, 10)).toString() + ' hours ago';
            } else if (delta < (48 * 60 * 60)) {
                r = 'a day ago';
            } else {
                r = (parseInt(delta / 86400, 10)).toString() + ' days ago';
            }
            return 'about ' + r;
        }
        function build_url() {
            var proto = ('https:' == document.location.protocol ? 'https:' : 'http:');
            if (s.list) {
                return proto + "//api.twitter.com/1/" + s.username[0] + "/lists/" + s.list + "/statuses.json?per_page=" + s.count + "&callback=?";
            } else if (s.query == null && s.username.length == 1) {
                return proto + '//api.twitter.com/1/statuses/user_timeline.json?screen_name=' + s.username[0] + '&count=' + s.count + '&include_rts=1&callback=?';
            } else {
                var query = (s.query || 'from:' + s.username.join(' OR from:'));
                return proto + '//search.twitter.com/search.json?&q=' + encodeURIComponent(query) + '&rpp=' + s.count + '&callback=?';
            }
        }
        return this.each(function (i, widget) {
            var list = $('<ul class="tweet_list">').appendTo(widget);
            var intro = '<p class="tweet_intro">' + s.intro_text + '</p>';
            var outro = '<p class="tweet_outro">' + s.outro_text + '</p>';
            var loading = $('<p class="loading">' + s.loading_text + '</p>');
            if (typeof (s.username) == "string") {
                s.username = [s.username];
            }
            if (s.loading_text) $(widget).append(loading);
            $.getJSON(build_url(), function (data) {
                if (s.loading_text) loading.remove();
                if (s.intro_text) list.before(intro);
                var tweets = (data.results || data);
                $.each(tweets, function (i, item) {
                    var from_user = item.from_user || item.user.screen_name;
                    // auto join text based on verb tense and content
                    if (s.join_text == "auto") {
                        if (item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) {
                            var join_text = s.auto_join_text_reply;
                        } else if (item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)) {
                            var join_text = s.auto_join_text_url;
                        } else if (item.text.match(/^((\w+ed)|just) .*/im)) {
                            var join_text = s.auto_join_text_ed;
                        } else if (item.text.match(/^(\w*ing) .*/i)) {
                            var join_text = s.auto_join_text_ing;
                        } else {
                            var join_text = s.auto_join_text_default;
                        }
                    } else if (s.join_text == "user") {
                        var join_text = '<a target="_blank" class="tweet_avatar" href="http://twitter.com/' + from_user + '">' + from_user + '</a>';
                    }
                    else {
                        var join_text = s.join_text;
                    };
                    var profile_image_url = item.profile_image_url || item.user.profile_image_url;
                    var join_template = '<span class="tweet_join"> ' + join_text + ' </span>';
                    var join = ((s.join_text) ? join_template : ' ');
                    var avatar_template = '<a target="_blank" class="tweet_avatar" href="http://twitter.com/' + from_user + '"><img src="' + profile_image_url + '" height="' + s.avatar_size + '" width="' + s.avatar_size + '" alt="' + from_user + '\'s avatar" title="' + from_user + '\'s avatar" border="0"/></a>';
                    var avatar = (s.avatar_size ? avatar_template : '');
                    var date = '<span class="tweet_time"><a target="_blank" href="http://twitter.com/' + from_user + '/statuses/' + item.id + '" title="view tweet on twitter">' + relative_time(item.created_at) + '</a></span>';
                    var text = '<span class="tweet_text">' + $([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0] + '</span>';
                    // until we create a template option, arrange the items below to alter a tweet's display.
                    //list.append('<li>' + avatar + join + date + text + '</li>');
                    //modified - AT
                    list.append('<li>' + avatar + '<span class="tweet_caption">' + join + date + '</span>' + text + '</li>');
                    list.children('li:first').addClass('tweet_first');
                    list.children('li:odd').addClass('tweet_even');
                    list.children('li:even').addClass('tweet_odd');
                });
                if (s.outro_text) list.after(outro);
                $(widget).trigger("loaded").trigger((tweets.length == 0 ? "empty" : "full"));
                // following line added by AT - 9 Nov 2010
                if (o.finished) o.finished();
            });
        });
    };
})(jQuery);

(function ($) {
    /*
    jquery.twitter.js v1.0
    Last updated: 26 October 2008
    Created by Damien du Toit
    http://coda.co.za/blog/2008/10/26/jquery-plugin-for-twitter
    Licensed under a Creative Commons Attribution-Non-Commercial 3.0 Unported License
    http://creativecommons.org/licenses/by-nc/3.0/
    */
    $.fn.getTwitter = function (options) {
        var o = $.extend({}, $.fn.getTwitter.defaults, options);
        // hide container element
        $(this).hide();
        // add heading to container element
        if (o.showHeading) {
            $(this).append('<h2>' + o.headingText + '</h2>');
        }
        // add twitter list to container element
        $(this).append('<ul id="twitter_update_list"><li></li></ul>');
        // hide twitter list
        $("ul#twitter_update_list").hide();
        // add preLoader to container element
        var pl = $('<p id="' + o.preloaderId + '">' + o.loaderText + '</p>');
        $(this).append(pl);
        // add Twitter profile link to container element
        if (o.showProfileLink) {
            $(this).append('<a id="profileLink" href="http://twitter.com/' + o.userName + '" target="_blank"><img src="/logo_twitter.gif"></a>');
        }
        // show container element
        $(this).show();
        $.getScript("http://twitter.com/javascripts/blogger.js");
        $.getScript("http://twitter.com/statuses/user_timeline/" + o.userName + ".json?callback=twitterCallback2&count=" + o.numTweets, function () {
            // remove preLoader from container element
            $(pl).remove();
            // show twitter list
            if (o.slideIn) {
                $("ul#twitter_update_list").slideDown(1000);
            }
            else {
                $("ul#twitter_update_list").show();
            }
            // give first list item a special class
            //$("ul#twitter_update_list li:first").addClass("firstTweet");
            // give last list item a special class
            $("ul#twitter_update_list li:last").addClass("lastTweet");
            $("ul#twitter_update_list li a").each(function () {
                var parentTag = $(this).parent().get(0).tagName;
                if (parentTag == "LI") {
                    $(this).addClass("twitLink");
                    $(this).attr("target", "_blank");
                };
            });
        });
    };
    // plugin defaults
    $.fn.getTwitter.defaults = {
        userName: null,
        numTweets: 5,
        preloaderId: "preloader",
        loaderText: "Loading tweets...",
        slideIn: false,
        showHeading: true,
        headingText: "Latest Tweets",
        showProfileLink: true
    };
})(jQuery);
/*
* jTwitter 1.0 - Twitter API abstraction plugin for jQuery
*
* Copyright (c) 2009 jQuery Howto
*
* Licensed under the GPL license:
*   http://www.gnu.org/licenses/gpl.html
*
* URL:
*   http://jquery-howto.blogspot.com
*
* Author URL:
*   http://me.boo.uz
*
*/
(function ($) {
    $.extend({
        jTwitter: function (username, fnk) {
            var url = "http://twitter.com/status/user_timeline/"
            + username + ".json?count=1&callback=?";
            var info = {};
            $.getJSON(url, function (data) {
                if (typeof fnk == 'function') fnk.call(this, data[0].user);
            });
        }
    });
})(jQuery);(function($){$.jScrollPane={active:[]};$.fn.jScrollPane=function(settings)
{settings=$.extend({},$.fn.jScrollPane.defaults,settings);var rf=function(){return false;};return this.each(function()
{var $this=$(this);var paneEle=this;var currentScrollPosition=0;var paneWidth;var paneHeight;var trackHeight;var trackOffset=settings.topCapHeight;var $container;if($(this).parent().is('.jScrollPaneContainer')){$container=$(this).parent();currentScrollPosition=settings.maintainPosition?$this.position().top:0;var $c=$(this).parent();paneWidth=$c.innerWidth();paneHeight=$c.outerHeight();$('>.jScrollPaneTrack, >.jScrollArrowUp, >.jScrollArrowDown, >.jScrollCap',$c).remove();$this.css({'top':0});}else{$this.data('originalStyleTag',$this.attr('style'));$this.css('overflow','hidden');this.originalPadding=$this.css('paddingTop')+' '+$this.css('paddingRight')+' '+$this.css('paddingBottom')+' '+$this.css('paddingLeft');this.originalSidePaddingTotal=(parseInt($this.css('paddingLeft'))||0)+(parseInt($this.css('paddingRight'))||0);paneWidth=$this.innerWidth();paneHeight=$this.innerHeight();$container=$('<div></div>').attr({'className':'jScrollPaneContainer'}).css({'height':paneHeight+'px','width':paneWidth+'px'});if(settings.enableKeyboardNavigation){$container.attr('tabindex',settings.tabIndex);}
$this.wrap($container);$container=$this.parent();$(document).bind('emchange',function(e,cur,prev)
{$this.jScrollPane(settings);});}
trackHeight=paneHeight;if(settings.reinitialiseOnImageLoad){var $imagesToLoad=$.data(paneEle,'jScrollPaneImagesToLoad')||$('img',$this);var loadedImages=[];if($imagesToLoad.length){$imagesToLoad.each(function(i,val){$(this).bind('load readystatechange',function(){if($.inArray(i,loadedImages)==-1){loadedImages.push(val);$imagesToLoad=$.grep($imagesToLoad,function(n,i){return n!=val;});$.data(paneEle,'jScrollPaneImagesToLoad',$imagesToLoad);var s2=$.extend(settings,{reinitialiseOnImageLoad:false});$this.jScrollPane(s2);}}).each(function(i,val){if(this.complete||this.complete===undefined){this.src=this.src;}});});};}
var p=this.originalSidePaddingTotal;var realPaneWidth=paneWidth-settings.scrollbarWidth-settings.scrollbarMargin-p;var cssToApply={'height':'auto','width':realPaneWidth+'px'}
if(settings.scrollbarOnLeft){cssToApply.paddingLeft=settings.scrollbarMargin+settings.scrollbarWidth+'px';}else{cssToApply.paddingRight=settings.scrollbarMargin+'px';}
$this.css(cssToApply);var contentHeight=$this.outerHeight();var percentInView=paneHeight/contentHeight;var isScrollable=percentInView<.99;$container[isScrollable?'addClass':'removeClass']('jScrollPaneScrollable');if(isScrollable){$container.append($('<div></div>').addClass('jScrollCap jScrollCapTop').css({height:settings.topCapHeight}),$('<div></div>').attr({'className':'jScrollPaneTrack'}).css({'width':settings.scrollbarWidth+'px'}).append($('<div></div>').attr({'className':'jScrollPaneDrag'}).css({'width':settings.scrollbarWidth+'px'}).append($('<div></div>').attr({'className':'jScrollPaneDragTop'}).css({'width':settings.scrollbarWidth+'px'}),$('<div></div>').attr({'className':'jScrollPaneDragBottom'}).css({'width':settings.scrollbarWidth+'px'}))),$('<div></div>').addClass('jScrollCap jScrollCapBottom').css({height:settings.bottomCapHeight}));var $track=$('>.jScrollPaneTrack',$container);var $drag=$('>.jScrollPaneTrack .jScrollPaneDrag',$container);var currentArrowDirection;var currentArrowTimerArr=[];var currentArrowInc;var whileArrowButtonDown=function()
{if(currentArrowInc>4||currentArrowInc%4==0){positionDrag(dragPosition+currentArrowDirection*mouseWheelMultiplier);}
currentArrowInc++;};if(settings.enableKeyboardNavigation){$container.bind('keydown.jscrollpane',function(e)
{switch(e.keyCode){case 38:currentArrowDirection=-1;currentArrowInc=0;whileArrowButtonDown();currentArrowTimerArr[currentArrowTimerArr.length]=setInterval(whileArrowButtonDown,100);return false;case 40:currentArrowDirection=1;currentArrowInc=0;whileArrowButtonDown();currentArrowTimerArr[currentArrowTimerArr.length]=setInterval(whileArrowButtonDown,100);return false;case 33:case 34:return false;default:}}).bind('keyup.jscrollpane',function(e)
{if(e.keyCode==38||e.keyCode==40){for(var i=0;i<currentArrowTimerArr.length;i++){clearInterval(currentArrowTimerArr[i]);}
return false;}});}
if(settings.showArrows){var currentArrowButton;var currentArrowInterval;var onArrowMouseUp=function(event)
{$('html').unbind('mouseup',onArrowMouseUp);currentArrowButton.removeClass('jScrollActiveArrowButton');clearInterval(currentArrowInterval);};var onArrowMouseDown=function(){$('html').bind('mouseup',onArrowMouseUp);currentArrowButton.addClass('jScrollActiveArrowButton');currentArrowInc=0;whileArrowButtonDown();currentArrowInterval=setInterval(whileArrowButtonDown,100);};$container.append($('<a></a>').attr({'href':'javascript:;','className':'jScrollArrowUp','tabindex':-1}).css({'width':settings.scrollbarWidth+'px','top':settings.topCapHeight+'px'}).html('Scroll up').bind('mousedown',function()
{currentArrowButton=$(this);currentArrowDirection=-1;onArrowMouseDown();this.blur();return false;}).bind('click',rf),$('<a></a>').attr({'href':'javascript:;','className':'jScrollArrowDown','tabindex':-1}).css({'width':settings.scrollbarWidth+'px','bottom':settings.bottomCapHeight+'px'}).html('Scroll down').bind('mousedown',function()
{currentArrowButton=$(this);currentArrowDirection=1;onArrowMouseDown();this.blur();return false;}).bind('click',rf));var $upArrow=$('>.jScrollArrowUp',$container);var $downArrow=$('>.jScrollArrowDown',$container);}
if(settings.arrowSize){trackHeight=paneHeight-settings.arrowSize-settings.arrowSize;trackOffset+=settings.arrowSize;}else if($upArrow){var topArrowHeight=$upArrow.height();settings.arrowSize=topArrowHeight;trackHeight=paneHeight-topArrowHeight-$downArrow.height();trackOffset+=topArrowHeight;}
trackHeight-=settings.topCapHeight+settings.bottomCapHeight;$track.css({'height':trackHeight+'px',top:trackOffset+'px'})
var $pane=$(this).css({'position':'absolute','overflow':'visible'});var currentOffset;var maxY;var mouseWheelMultiplier;var dragPosition=0;var dragMiddle=percentInView*paneHeight/2;var getPos=function(event,c){var p=c=='X'?'Left':'Top';return event['page'+c]||(event['client'+c]+(document.documentElement['scroll'+p]||document.body['scroll'+p]))||0;};var ignoreNativeDrag=function(){return false;};var initDrag=function()
{ceaseAnimation();currentOffset=$drag.offset(false);currentOffset.top-=dragPosition;maxY=trackHeight-$drag[0].offsetHeight;mouseWheelMultiplier=2*settings.wheelSpeed*maxY/contentHeight;};var onStartDrag=function(event)
{initDrag();dragMiddle=getPos(event,'Y')-dragPosition-currentOffset.top;$('html').bind('mouseup',onStopDrag).bind('mousemove',updateScroll).bind('mouseleave',onStopDrag)
if($.browser.msie){$('html').bind('dragstart',ignoreNativeDrag).bind('selectstart',ignoreNativeDrag);}
return false;};var onStopDrag=function()
{$('html').unbind('mouseup',onStopDrag).unbind('mousemove',updateScroll);dragMiddle=percentInView*paneHeight/2;if($.browser.msie){$('html').unbind('dragstart',ignoreNativeDrag).unbind('selectstart',ignoreNativeDrag);}};var positionDrag=function(destY)
{$container.scrollTop(0);destY=destY<0?0:(destY>maxY?maxY:destY);dragPosition=destY;$drag.css({'top':destY+'px'});var p=destY/maxY;$this.data('jScrollPanePosition',(paneHeight-contentHeight)*-p);$pane.css({'top':((paneHeight-contentHeight)*p)+'px'});$this.trigger('scroll');if(settings.showArrows){$upArrow[destY==0?'addClass':'removeClass']('disabled');$downArrow[destY==maxY?'addClass':'removeClass']('disabled');}};var updateScroll=function(e)
{positionDrag(getPos(e,'Y')-currentOffset.top-dragMiddle);};var dragH=Math.max(Math.min(percentInView*(paneHeight-settings.arrowSize*2),settings.dragMaxHeight),settings.dragMinHeight);$drag.css({'height':dragH+'px'}).bind('mousedown',onStartDrag);var trackScrollInterval;var trackScrollInc;var trackScrollMousePos;var doTrackScroll=function()
{if(trackScrollInc>8||trackScrollInc%4==0){positionDrag((dragPosition-((dragPosition-trackScrollMousePos)/2)));}
trackScrollInc++;};var onStopTrackClick=function()
{clearInterval(trackScrollInterval);$('html').unbind('mouseup',onStopTrackClick).unbind('mousemove',onTrackMouseMove);};var onTrackMouseMove=function(event)
{trackScrollMousePos=getPos(event,'Y')-currentOffset.top-dragMiddle;};var onTrackClick=function(event)
{initDrag();onTrackMouseMove(event);trackScrollInc=0;$('html').bind('mouseup',onStopTrackClick).bind('mousemove',onTrackMouseMove);trackScrollInterval=setInterval(doTrackScroll,100);doTrackScroll();return false;};$track.bind('mousedown',onTrackClick);$container.bind('mousewheel',function(event,delta){delta=delta||(event.wheelDelta?event.wheelDelta/120:(event.detail)?-event.detail/3:0);initDrag();ceaseAnimation();var d=dragPosition;positionDrag(dragPosition-delta*mouseWheelMultiplier);var dragOccured=d!=dragPosition;return!dragOccured;});var _animateToPosition;var _animateToInterval;function animateToPosition()
{var diff=(_animateToPosition-dragPosition)/settings.animateStep;if(diff>1||diff<-1){positionDrag(dragPosition+diff);}else{positionDrag(_animateToPosition);ceaseAnimation();}}
var ceaseAnimation=function()
{if(_animateToInterval){clearInterval(_animateToInterval);delete _animateToPosition;}};var scrollTo=function(pos,preventAni)
{if(typeof pos=="string"){try{$e=$(pos,$this);}catch(err){return;}
if(!$e.length)return;pos=$e.offset().top-$this.offset().top;}
ceaseAnimation();var maxScroll=contentHeight-paneHeight;pos=pos>maxScroll?maxScroll:pos;$this.data('jScrollPaneMaxScroll',maxScroll);var destDragPosition=pos/maxScroll*maxY;if(preventAni||!settings.animateTo){positionDrag(destDragPosition);}else{$container.scrollTop(0);_animateToPosition=destDragPosition;_animateToInterval=setInterval(animateToPosition,settings.animateInterval);}};$this[0].scrollTo=scrollTo;$this[0].scrollBy=function(delta)
{var currentPos=-parseInt($pane.css('top'))||0;scrollTo(currentPos+delta);};initDrag();scrollTo(-currentScrollPosition,true);$('*',this).bind('focus',function(event)
{var $e=$(this);var eleTop=0;var preventInfiniteLoop=100;while($e[0]!=$this[0]){eleTop+=$e.position().top;$e=$e.offsetParent();if(!preventInfiniteLoop--){return;}}
var viewportTop=-parseInt($pane.css('top'))||0;var maxVisibleEleTop=viewportTop+paneHeight;var eleInView=eleTop>viewportTop&&eleTop<maxVisibleEleTop;if(!eleInView){var destPos=eleTop-settings.scrollbarMargin;if(eleTop>viewportTop){destPos+=$(this).height()+15+settings.scrollbarMargin-paneHeight;}
scrollTo(destPos);}})
if(settings.observeHash){if(location.hash&&location.hash.length>1){setTimeout(function(){scrollTo(location.hash);},$.browser.safari?100:0);}
$(document).bind('click',function(e){$target=$(e.target);if($target.is('a')){var h=$target.attr('href');if(h&&h.substr(0,1)=='#'&&h.length>1){setTimeout(function(){scrollTo(h,!settings.animateToInternalLinks);},$.browser.safari?100:0);}}});}
function onSelectScrollMouseDown(e)
{$(document).bind('mousemove.jScrollPaneDragging',onTextSelectionScrollMouseMove);$(document).bind('mouseup.jScrollPaneDragging',onSelectScrollMouseUp);}
var textDragDistanceAway;var textSelectionInterval;function onTextSelectionInterval()
{direction=textDragDistanceAway<0?-1:1;$this[0].scrollBy(textDragDistanceAway/2);}
function clearTextSelectionInterval()
{if(textSelectionInterval){clearInterval(textSelectionInterval);textSelectionInterval=undefined;}}
function onTextSelectionScrollMouseMove(e)
{var offset=$this.parent().offset().top;var maxOffset=offset+paneHeight;var mouseOffset=getPos(e,'Y');textDragDistanceAway=mouseOffset<offset?mouseOffset-offset:(mouseOffset>maxOffset?mouseOffset-maxOffset:0);if(textDragDistanceAway==0){clearTextSelectionInterval();}else{if(!textSelectionInterval){textSelectionInterval=setInterval(onTextSelectionInterval,100);}}}
function onSelectScrollMouseUp(e)
{$(document).unbind('mousemove.jScrollPaneDragging').unbind('mouseup.jScrollPaneDragging');clearTextSelectionInterval();}
$container.bind('mousedown.jScrollPane',onSelectScrollMouseDown);$.jScrollPane.active.push($this[0]);}else{$this.css({'height':paneHeight+'px','width':paneWidth-this.originalSidePaddingTotal+'px','padding':this.originalPadding});$this[0].scrollTo=$this[0].scrollBy=function(){};$this.parent().unbind('mousewheel').unbind('mousedown.jScrollPane').unbind('keydown.jscrollpane').unbind('keyup.jscrollpane');}})};$.fn.jScrollPaneRemove=function()
{$(this).each(function()
{$this=$(this);var $c=$this.parent();if($c.is('.jScrollPaneContainer')){$this.css({'top':'','height':'','width':'','padding':'','overflow':'','position':''});$this.attr('style',$this.data('originalStyleTag'));$c.after($this).remove();}});}
$.fn.jScrollPane.defaults={scrollbarWidth:10,scrollbarMargin:5,wheelSpeed:18,showArrows:false,arrowSize:0,animateTo:false,dragMinHeight:1,dragMaxHeight:99999,animateInterval:100,animateStep:3,maintainPosition:true,scrollbarOnLeft:false,reinitialiseOnImageLoad:false,tabIndex:0,enableKeyboardNavigation:true,animateToInternalLinks:false,topCapHeight:0,bottomCapHeight:0,observeHash:true};$(window).bind('unload',function(){var els=$.jScrollPane.active;for(var i=0;i<els.length;i++){els[i].scrollTo=els[i].scrollBy=null;}});})(jQuery);(function (b) { b.extend({ jTwitter: function (d, a, c) { if (!(d == "undefined" || a == "undefined")) { if (b.isFunction(a)) { c = a; a = 5 } b.getJSON("http://twitter.com/status/user_timeline/" + d + ".json?count=" + a + "&callback=?", function (e) { b.isFunction(c) && c.call(this, e) }) } } }) })(jQuery);

function showTwitter(twitterAccount) {
    // load tweets
    $.jTwitter(twitterAccount, 10, function (data) {
        // create list
        $('.twitter-widget .tweets').empty().append('<ul></ul>');
        // append name/image/followers
        $('.twitter-widget .followers').html(data[0].user.followers_count + ' followers');
        $('.twitter-widget .image IMG').attr('src', data[0].user.profile_image_url);
        $('.twitter-widget .text A').append(data[0].user.name).attr('href', 'http://twitter.com/' + twitterAccount);
        // add each tweet to list
        $.each(data, function (i, post) {
            var li = $('<li class="item"><div class="text"></div><div class="subtext"></div></li>');
            li.find('.text').append(linkify(post.text));
            li.find('.subtext').append(niceDate(post.created_at));
            $('.twitter-widget .tweets ul').append(li);
        });
        // apply custom scroller
        var isiPad = navigator.userAgent.match(/iPad/i) != null;
        if (!isiPad) {
            $('.twitter-widget .tweets').jScrollPane({ scrollbarWidth: 14, dragMaxHeight: 27 });
        }
        else {
            $('.twitter-widget .tweets').css('overflow', 'auto');
        }
    });
}
jQuery.fn.showTwitter = function (options) {
    var content = this;
    // default settings
    var defaults = {
        twitteraccount: '',
        twitterquery: ''
    }
    var o = $.extend(defaults, options);
    content.find('.tweets').empty().append('<ul></ul>');
    $.jTwitter(o.twitteraccount, 10, function (data) {
        // append name/image/followers
        content.find('.followers').html(data[0].user.followers_count + ' followers');
        content.find('.image IMG').attr('src', data[0].user.profile_image_url);
        content.find('.text A').append(data[0].user.name).attr('href', 'http://twitter.com/' + o.twitteraccount);
    });
    if (o.twitterquery == '')
        o.twitterquery = 'from:' + o.twitteraccount;
    content.find('.tweets').tweet({
        query: o.twitterquery,
        join_text: "user",
        avatar_size: 50,
        count: 50,
        auto_join_text_default: "we said",
        auto_join_text_ed: "we",
        auto_join_text_ing: "we were",
        auto_join_text_reply: "we replied",
        auto_join_text_url: "we were checking out",
        loading_text: "",
        finished: function () {
            content.find('.tweets li').each(function () {
                var caption = $(this).find('.tweet_caption');
                var captionCopy = caption.clone();
                caption.remove();
                $(this).find('.tweet_text').after(captionCopy);
            });
            // apply custom scroller
            content.find('.tweets').jScrollPane({ scrollbarWidth: 14, dragMaxHeight: 27 });
        }
    });
};(function($){$.jScrollPane={active:[]};$.fn.jScrollPane=function(settings)
{settings=$.extend({},$.fn.jScrollPane.defaults,settings);var rf=function(){return false;};return this.each(function()
{var $this=$(this);var paneEle=this;var currentScrollPosition=0;var paneWidth;var paneHeight;var trackHeight;var trackOffset=settings.topCapHeight;var $container;if($(this).parent().is('.jScrollPaneContainer')){$container=$(this).parent();currentScrollPosition=settings.maintainPosition?$this.position().top:0;var $c=$(this).parent();paneWidth=$c.innerWidth();paneHeight=$c.outerHeight();$('>.jScrollPaneTrack, >.jScrollArrowUp, >.jScrollArrowDown, >.jScrollCap',$c).remove();$this.css({'top':0});}else{$this.data('originalStyleTag',$this.attr('style'));$this.css('overflow','hidden');this.originalPadding=$this.css('paddingTop')+' '+$this.css('paddingRight')+' '+$this.css('paddingBottom')+' '+$this.css('paddingLeft');this.originalSidePaddingTotal=(parseInt($this.css('paddingLeft'))||0)+(parseInt($this.css('paddingRight'))||0);paneWidth=$this.innerWidth();paneHeight=$this.innerHeight();$container=$('<div></div>').attr({'className':'jScrollPaneContainer'}).css({'height':paneHeight+'px','width':paneWidth+'px'});if(settings.enableKeyboardNavigation){$container.attr('tabindex',settings.tabIndex);}
$this.wrap($container);$container=$this.parent();$(document).bind('emchange',function(e,cur,prev)
{$this.jScrollPane(settings);});}
trackHeight=paneHeight;if(settings.reinitialiseOnImageLoad){var $imagesToLoad=$.data(paneEle,'jScrollPaneImagesToLoad')||$('img',$this);var loadedImages=[];if($imagesToLoad.length){$imagesToLoad.each(function(i,val){$(this).bind('load readystatechange',function(){if($.inArray(i,loadedImages)==-1){loadedImages.push(val);$imagesToLoad=$.grep($imagesToLoad,function(n,i){return n!=val;});$.data(paneEle,'jScrollPaneImagesToLoad',$imagesToLoad);var s2=$.extend(settings,{reinitialiseOnImageLoad:false});$this.jScrollPane(s2);}}).each(function(i,val){if(this.complete||this.complete===undefined){this.src=this.src;}});});};}
var p=this.originalSidePaddingTotal;var realPaneWidth=paneWidth-settings.scrollbarWidth-settings.scrollbarMargin-p;var cssToApply={'height':'auto','width':realPaneWidth+'px'}
if(settings.scrollbarOnLeft){cssToApply.paddingLeft=settings.scrollbarMargin+settings.scrollbarWidth+'px';}else{cssToApply.paddingRight=settings.scrollbarMargin+'px';}
$this.css(cssToApply);var contentHeight=$this.outerHeight();var percentInView=paneHeight/contentHeight;var isScrollable=percentInView<.99;$container[isScrollable?'addClass':'removeClass']('jScrollPaneScrollable');if(isScrollable){$container.append($('<div></div>').addClass('jScrollCap jScrollCapTop').css({height:settings.topCapHeight}),$('<div></div>').attr({'className':'jScrollPaneTrack'}).css({'width':settings.scrollbarWidth+'px'}).append($('<div></div>').attr({'className':'jScrollPaneDrag'}).css({'width':settings.scrollbarWidth+'px'}).append($('<div></div>').attr({'className':'jScrollPaneDragTop'}).css({'width':settings.scrollbarWidth+'px'}),$('<div></div>').attr({'className':'jScrollPaneDragBottom'}).css({'width':settings.scrollbarWidth+'px'}))),$('<div></div>').addClass('jScrollCap jScrollCapBottom').css({height:settings.bottomCapHeight}));var $track=$('>.jScrollPaneTrack',$container);var $drag=$('>.jScrollPaneTrack .jScrollPaneDrag',$container);var currentArrowDirection;var currentArrowTimerArr=[];var currentArrowInc;var whileArrowButtonDown=function()
{if(currentArrowInc>4||currentArrowInc%4==0){positionDrag(dragPosition+currentArrowDirection*mouseWheelMultiplier);}
currentArrowInc++;};if(settings.enableKeyboardNavigation){$container.bind('keydown.jscrollpane',function(e)
{switch(e.keyCode){case 38:currentArrowDirection=-1;currentArrowInc=0;whileArrowButtonDown();currentArrowTimerArr[currentArrowTimerArr.length]=setInterval(whileArrowButtonDown,100);return false;case 40:currentArrowDirection=1;currentArrowInc=0;whileArrowButtonDown();currentArrowTimerArr[currentArrowTimerArr.length]=setInterval(whileArrowButtonDown,100);return false;case 33:case 34:return false;default:}}).bind('keyup.jscrollpane',function(e)
{if(e.keyCode==38||e.keyCode==40){for(var i=0;i<currentArrowTimerArr.length;i++){clearInterval(currentArrowTimerArr[i]);}
return false;}});}
if(settings.showArrows){var currentArrowButton;var currentArrowInterval;var onArrowMouseUp=function(event)
{$('html').unbind('mouseup',onArrowMouseUp);currentArrowButton.removeClass('jScrollActiveArrowButton');clearInterval(currentArrowInterval);};var onArrowMouseDown=function(){$('html').bind('mouseup',onArrowMouseUp);currentArrowButton.addClass('jScrollActiveArrowButton');currentArrowInc=0;whileArrowButtonDown();currentArrowInterval=setInterval(whileArrowButtonDown,100);};$container.append($('<a></a>').attr({'href':'javascript:;','className':'jScrollArrowUp','tabindex':-1}).css({'width':settings.scrollbarWidth+'px','top':settings.topCapHeight+'px'}).html('Scroll up').bind('mousedown',function()
{currentArrowButton=$(this);currentArrowDirection=-1;onArrowMouseDown();this.blur();return false;}).bind('click',rf),$('<a></a>').attr({'href':'javascript:;','className':'jScrollArrowDown','tabindex':-1}).css({'width':settings.scrollbarWidth+'px','bottom':settings.bottomCapHeight+'px'}).html('Scroll down').bind('mousedown',function()
{currentArrowButton=$(this);currentArrowDirection=1;onArrowMouseDown();this.blur();return false;}).bind('click',rf));var $upArrow=$('>.jScrollArrowUp',$container);var $downArrow=$('>.jScrollArrowDown',$container);}
if(settings.arrowSize){trackHeight=paneHeight-settings.arrowSize-settings.arrowSize;trackOffset+=settings.arrowSize;}else if($upArrow){var topArrowHeight=$upArrow.height();settings.arrowSize=topArrowHeight;trackHeight=paneHeight-topArrowHeight-$downArrow.height();trackOffset+=topArrowHeight;}
trackHeight-=settings.topCapHeight+settings.bottomCapHeight;$track.css({'height':trackHeight+'px',top:trackOffset+'px'})
var $pane=$(this).css({'position':'absolute','overflow':'visible'});var currentOffset;var maxY;var mouseWheelMultiplier;var dragPosition=0;var dragMiddle=percentInView*paneHeight/2;var getPos=function(event,c){var p=c=='X'?'Left':'Top';return event['page'+c]||(event['client'+c]+(document.documentElement['scroll'+p]||document.body['scroll'+p]))||0;};var ignoreNativeDrag=function(){return false;};var initDrag=function()
{ceaseAnimation();currentOffset=$drag.offset(false);currentOffset.top-=dragPosition;maxY=trackHeight-$drag[0].offsetHeight;mouseWheelMultiplier=2*settings.wheelSpeed*maxY/contentHeight;};var onStartDrag=function(event)
{initDrag();dragMiddle=getPos(event,'Y')-dragPosition-currentOffset.top;$('html').bind('mouseup',onStopDrag).bind('mousemove',updateScroll).bind('mouseleave',onStopDrag)
if($.browser.msie){$('html').bind('dragstart',ignoreNativeDrag).bind('selectstart',ignoreNativeDrag);}
return false;};var onStopDrag=function()
{$('html').unbind('mouseup',onStopDrag).unbind('mousemove',updateScroll);dragMiddle=percentInView*paneHeight/2;if($.browser.msie){$('html').unbind('dragstart',ignoreNativeDrag).unbind('selectstart',ignoreNativeDrag);}};var positionDrag=function(destY)
{$container.scrollTop(0);destY=destY<0?0:(destY>maxY?maxY:destY);dragPosition=destY;$drag.css({'top':destY+'px'});var p=destY/maxY;$this.data('jScrollPanePosition',(paneHeight-contentHeight)*-p);$pane.css({'top':((paneHeight-contentHeight)*p)+'px'});$this.trigger('scroll');if(settings.showArrows){$upArrow[destY==0?'addClass':'removeClass']('disabled');$downArrow[destY==maxY?'addClass':'removeClass']('disabled');}};var updateScroll=function(e)
{positionDrag(getPos(e,'Y')-currentOffset.top-dragMiddle);};var dragH=Math.max(Math.min(percentInView*(paneHeight-settings.arrowSize*2),settings.dragMaxHeight),settings.dragMinHeight);$drag.css({'height':dragH+'px'}).bind('mousedown',onStartDrag);var trackScrollInterval;var trackScrollInc;var trackScrollMousePos;var doTrackScroll=function()
{if(trackScrollInc>8||trackScrollInc%4==0){positionDrag((dragPosition-((dragPosition-trackScrollMousePos)/2)));}
trackScrollInc++;};var onStopTrackClick=function()
{clearInterval(trackScrollInterval);$('html').unbind('mouseup',onStopTrackClick).unbind('mousemove',onTrackMouseMove);};var onTrackMouseMove=function(event)
{trackScrollMousePos=getPos(event,'Y')-currentOffset.top-dragMiddle;};var onTrackClick=function(event)
{initDrag();onTrackMouseMove(event);trackScrollInc=0;$('html').bind('mouseup',onStopTrackClick).bind('mousemove',onTrackMouseMove);trackScrollInterval=setInterval(doTrackScroll,100);doTrackScroll();return false;};$track.bind('mousedown',onTrackClick);$container.bind('mousewheel',function(event,delta){delta=delta||(event.wheelDelta?event.wheelDelta/120:(event.detail)?-event.detail/3:0);initDrag();ceaseAnimation();var d=dragPosition;positionDrag(dragPosition-delta*mouseWheelMultiplier);var dragOccured=d!=dragPosition;return!dragOccured;});var _animateToPosition;var _animateToInterval;function animateToPosition()
{var diff=(_animateToPosition-dragPosition)/settings.animateStep;if(diff>1||diff<-1){positionDrag(dragPosition+diff);}else{positionDrag(_animateToPosition);ceaseAnimation();}}
var ceaseAnimation=function()
{if(_animateToInterval){clearInterval(_animateToInterval);delete _animateToPosition;}};var scrollTo=function(pos,preventAni)
{if(typeof pos=="string"){try{$e=$(pos,$this);}catch(err){return;}
if(!$e.length)return;pos=$e.offset().top-$this.offset().top;}
ceaseAnimation();var maxScroll=contentHeight-paneHeight;pos=pos>maxScroll?maxScroll:pos;$this.data('jScrollPaneMaxScroll',maxScroll);var destDragPosition=pos/maxScroll*maxY;if(preventAni||!settings.animateTo){positionDrag(destDragPosition);}else{$container.scrollTop(0);_animateToPosition=destDragPosition;_animateToInterval=setInterval(animateToPosition,settings.animateInterval);}};$this[0].scrollTo=scrollTo;$this[0].scrollBy=function(delta)
{var currentPos=-parseInt($pane.css('top'))||0;scrollTo(currentPos+delta);};initDrag();scrollTo(-currentScrollPosition,true);$('*',this).bind('focus',function(event)
{var $e=$(this);var eleTop=0;var preventInfiniteLoop=100;while($e[0]!=$this[0]){eleTop+=$e.position().top;$e=$e.offsetParent();if(!preventInfiniteLoop--){return;}}
var viewportTop=-parseInt($pane.css('top'))||0;var maxVisibleEleTop=viewportTop+paneHeight;var eleInView=eleTop>viewportTop&&eleTop<maxVisibleEleTop;if(!eleInView){var destPos=eleTop-settings.scrollbarMargin;if(eleTop>viewportTop){destPos+=$(this).height()+15+settings.scrollbarMargin-paneHeight;}
scrollTo(destPos);}})
if(settings.observeHash){if(location.hash&&location.hash.length>1){setTimeout(function(){scrollTo(location.hash);},$.browser.safari?100:0);}
$(document).bind('click',function(e){$target=$(e.target);if($target.is('a')){var h=$target.attr('href');if(h&&h.substr(0,1)=='#'&&h.length>1){setTimeout(function(){scrollTo(h,!settings.animateToInternalLinks);},$.browser.safari?100:0);}}});}
function onSelectScrollMouseDown(e)
{$(document).bind('mousemove.jScrollPaneDragging',onTextSelectionScrollMouseMove);$(document).bind('mouseup.jScrollPaneDragging',onSelectScrollMouseUp);}
var textDragDistanceAway;var textSelectionInterval;function onTextSelectionInterval()
{direction=textDragDistanceAway<0?-1:1;$this[0].scrollBy(textDragDistanceAway/2);}
function clearTextSelectionInterval()
{if(textSelectionInterval){clearInterval(textSelectionInterval);textSelectionInterval=undefined;}}
function onTextSelectionScrollMouseMove(e)
{var offset=$this.parent().offset().top;var maxOffset=offset+paneHeight;var mouseOffset=getPos(e,'Y');textDragDistanceAway=mouseOffset<offset?mouseOffset-offset:(mouseOffset>maxOffset?mouseOffset-maxOffset:0);if(textDragDistanceAway==0){clearTextSelectionInterval();}else{if(!textSelectionInterval){textSelectionInterval=setInterval(onTextSelectionInterval,100);}}}
function onSelectScrollMouseUp(e)
{$(document).unbind('mousemove.jScrollPaneDragging').unbind('mouseup.jScrollPaneDragging');clearTextSelectionInterval();}
$container.bind('mousedown.jScrollPane',onSelectScrollMouseDown);$.jScrollPane.active.push($this[0]);}else{$this.css({'height':paneHeight+'px','width':paneWidth-this.originalSidePaddingTotal+'px','padding':this.originalPadding});$this[0].scrollTo=$this[0].scrollBy=function(){};$this.parent().unbind('mousewheel').unbind('mousedown.jScrollPane').unbind('keydown.jscrollpane').unbind('keyup.jscrollpane');}})};$.fn.jScrollPaneRemove=function()
{$(this).each(function()
{$this=$(this);var $c=$this.parent();if($c.is('.jScrollPaneContainer')){$this.css({'top':'','height':'','width':'','padding':'','overflow':'','position':''});$this.attr('style',$this.data('originalStyleTag'));$c.after($this).remove();}});}
$.fn.jScrollPane.defaults={scrollbarWidth:10,scrollbarMargin:5,wheelSpeed:18,showArrows:false,arrowSize:0,animateTo:false,dragMinHeight:1,dragMaxHeight:99999,animateInterval:100,animateStep:3,maintainPosition:true,scrollbarOnLeft:false,reinitialiseOnImageLoad:false,tabIndex:0,enableKeyboardNavigation:true,animateToInternalLinks:false,topCapHeight:0,bottomCapHeight:0,observeHash:true};$(window).bind('unload',function(){var els=$.jScrollPane.active;for(var i=0;i<els.length;i++){els[i].scrollTo=els[i].scrollBy=null;}});})(jQuery);(function (b) { b.extend({ jTwitter: function (d, a, c) { if (!(d == "undefined" || a == "undefined")) { if (b.isFunction(a)) { c = a; a = 5 } b.getJSON("http://twitter.com/status/user_timeline/" + d + ".json?count=" + a + "&callback=?", function (e) { b.isFunction(c) && c.call(this, e) }) } } }) })(jQuery);
function showTwitter(twitterAccount) {
    // load tweets
    $.jTwitter(twitterAccount, 10, function (data) {
        // create list
        $('.twitter-widget .tweets').empty().append('<ul></ul>');
        // append name/image/followers
        $('.twitter-widget .followers').html(data[0].user.followers_count + ' followers');
        $('.twitter-widget .image IMG').attr('src', data[0].user.profile_image_url);
        $('.twitter-widget .text A').append(data[0].user.name).attr('href', 'http://twitter.com/' + twitterAccount);
        // add each tweet to list
        $.each(data, function (i, post) {
            var li = $('<li class="item"><div class="text"></div><div class="subtext"></div></li>');
            li.find('.text').append(linkify(post.text));
            li.find('.subtext').append(niceDate(post.created_at));
            $('.twitter-widget .tweets ul').append(li);
        });
        // apply custom scroller
        var isiPad = navigator.userAgent.match(/iPad/i) != null;
        if (!isiPad) {
            $('.twitter-widget .tweets').jScrollPane({ scrollbarWidth: 14, dragMaxHeight: 27 });
        }
        else {
            $('.twitter-widget .tweets').css('overflow', 'auto');
        }
    });
}
jQuery.fn.showTwitter = function (options) {
    var content = this;
    // default settings
    var defaults = {
        twitteraccount: '',
        twitterquery: ''
    }
    var o = $.extend(defaults, options);
    content.find('.tweets').empty().append('<ul></ul>');
    $.jTwitter(o.twitteraccount, 10, function (data) {
        // append name/image/followers
        content.find('.followers').html(data[0].user.followers_count + ' followers');
        content.find('.image IMG').attr('src', data[0].user.profile_image_url);
        content.find('.text A').append(data[0].user.name).attr('href', 'http://twitter.com/' + o.twitteraccount);
    });
    if (o.twitterquery == '')
        o.twitterquery = 'from:' + o.twitteraccount;
    content.find('.tweets').tweet({
        query: o.twitterquery,
        join_text: "user",
        avatar_size: 50,
        count: 50,
        auto_join_text_default: "we said",
        auto_join_text_ed: "we",
        auto_join_text_ing: "we were",
        auto_join_text_reply: "we replied",
        auto_join_text_url: "we were checking out",
        loading_text: "",
        finished: function () {
            content.find('.tweets li').each(function () {
                var caption = $(this).find('.tweet_caption');
                var captionCopy = caption.clone();
                caption.remove();
                $(this).find('.tweet_text').after(captionCopy);
            });
            // apply custom scroller
            content.find('.tweets').jScrollPane({ scrollbarWidth: 14, dragMaxHeight: 27 });
        }
    });
};eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';5(10.M)(w($){$.N({11:w(j,k){5(!j)t{};w B(d,e){5(!d)t y;6 f=\'\',2=y,E=y;6 g=d.x,12=l(d.O||d.P);6 h=d.v||d.F||\'\';5(d.G){5(d.G.7>0){$.Q(d.G,w(n,a){6 b=a.x,u=l(a.O||a.P);6 c=a.v||a.F||\'\';5(b==8){t}z 5(b==3||b==4||!u){5(c.13(/^\\s+$/)){t};f+=c.H(/^\\s+/,\'\').H(/\\s+$/,\'\')}z{2=2||{};5(2[u]){5(!2[u].7)2[u]=p(2[u]);2[u][2[u].7]=B(a,R);2[u].7=2[u].7}z{2[u]=B(a)}}})}};5(d.I){5(d.I.7>0){E={};2=2||{};$.Q(d.I,w(a,b){6 c=l(b.14),C=b.15;E[c]=C;5(2[c]){5(!2[c].7)2[c]=p(2[c]);2[c][2[c].7]=C;2[c].7=2[c].7}z{2[c]=C}})}};5(2){2=$.N((f!=\'\'?A J(f):{}),2||{});f=(2.v)?(D(2.v)==\'16\'?2.v:[2.v||\'\']).17([f]):f;5(f)2.v=f;f=\'\'};6 i=2||f;5(k){5(f)i={};f=i.v||f||\'\';5(f)i.v=f;5(!e)i=p(i)};t i};6 l=w(s){t J(s||\'\').H(/-/g,"18")};6 m=w(s){t(D s=="19")||J((s&&D s=="K")?s:\'\').1a(/^((-)?([0-9]*)((\\.{0,1})([0-9]+))?$)/)};6 p=w(o){5(!o.7)o=[o];o.7=o.7;t o};5(D j==\'K\')j=$.S(j);5(!j.x)t;5(j.x==3||j.x==4)t j.F;6 q=(j.x==9)?j.1b:j;6 r=B(q,R);j=y;q=y;t r},S:w(a){6 b;T{6 c=($.U.V)?A 1c("1d.1e"):A 1f();c.1g=W}X(e){Y A L("Z 1h 1i 1j 1k 1l")};T{5($.U.V)b=(c.1m(a))?c:W;z b=c.1n(a,"v/1o")}X(e){Y A L("L 1p Z K")};t b}})})(M);',62,88,'||obj|||if|var|length||||||||||||||||||||||return|cnn|text|function|nodeType|null|else|new|parseXML|atv|typeof|att|nodeValue|childNodes|replace|attributes|String|string|Error|jQuery|extend|localName|nodeName|each|true|text2xml|try|browser|msie|false|catch|throw|XML|window|xml2json|nn|match|name|value|object|concat|_|number|test|documentElement|ActiveXObject|Microsoft|XMLDOM|DOMParser|async|Parser|could|not|be|instantiated|loadXML|parseFromString|xml|parsing'.split('|'),0,{}))
{ // a dummy block, so I can collapse all the meta stuff in the editor
/****************************************************************************
 * jQuery 1.3.x plugin to shorten styled text to fit in a block, appending
 * an ellipsis ("...", &hellip;, Unicode: 2026) or other text.
 * (Only supports ltr text for now.)
 *
 * This is achieved by placing the text of the 'selected' element (eg. span or
 * div) inside a table and measuring its width. If it's too big to big to fit in
 * the element's parent block it's shortened and measured again until it (and
 * appended ellipsis or text) fits inside the block. A tooltip on the 'selected'
 * element displays the full original text.
 *
 * If the browser supports truncating text using the 'text-overflow:ellipsis'
 * CSS property then that will be used (if the text to append is the default
 * ellipsis).
 *
 * If the text is truncated by the plugin any markup in the text will be
 * stripped (eg: "<a" starts stripping, "< a" does not). This behaviour is
 * dictated by the jQuery .text(val) method.
 * The appended text may contain HTML however (a link or span for example).
 *
 * Usage Example ('selecting' a div with an id of "element"):
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript" src="jquery.textTruncate.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#element").textTruncate();
        });
    </script>
 * By default the plugin will use the parent block's width as maximum width and
 * an ellipsis as appended text when truncating.
 *
 * There are three ways of configuring the plugin:
 *
 * 1) Passing a configuration hash as the plugin's argument, eg:
    .textTruncate({
        width: 300,
        tail: ' <a href="#">more</a>',
        tooltip: false
    });
 * 2) Using two optional arguments (deprecated!):
 * width = the desired pixel width, integer
 * tail = text/html to append when truncating
 *
 * 3) By changing the plugin defaults, eg:
    $.fn.textTruncate.defaults.tail = ' <a href="#">more</a>';
 * Note: there is no default width (unless you create one).
 *
 * You may want to set the element's css to {visibility:hidden;} so it won't
 * initially flash at full width.
 *
 *
 * Created by M. David Green (www.mdavidgreen.com) in 2009. Free to use for
 * personal or commercial purposes under MIT (X11) license with no warranty
 *
 * Heavily modified/simplified/improved by Marc Diethelm (http://web5.me/).
 *
****************************************************************************/
}
(function ($) {
    $.fn.textTruncate = function() {
        var userOptions = {};
        var args = arguments; // for better minification
        var func = args.callee // dito; and much shorter than $.fn.textTruncate
        if ( args.length ) {
            if ( args[0].constructor == Object ) {
                userOptions = args[0];
            } else if ( args[0] == "options" ) {
                return $(this).eq(0).data("options-truncate");
            } else {
                userOptions = {
                    width: parseInt(args[0]),
                    tail: args[1]
                }
            }
        }
        this.css("visibility","hidden"); // Hide the element(s) while manipulating them
        // apply options vs. defaults
        var options = $.extend({}, func.defaults, userOptions);
        /**
         * HERE WE GO!
         **/
        return this.each(function () {
            var $this = $(this);
            $this.data("options-truncate", options);
            /**
             * If browser implements text-overflow:ellipsis in CSS and tail is "...", use it!
             **/
            if ( options.tail == "..." && func._native ) {
                this.style[func._native] = "ellipsis";
                /*var css_obj = {}
                css_obj[func._native] = "ellipsis";
                $this.css(css_obj);*/
                $this.css("visibility","visible");
                return true;
            }
            var width = options.width || $this.parent().width();
            var text = $this.text();
            var textlength = text.length;
            var css = "padding:0; margin:0; border:none; font:inherit;";
            var $table = $('<table style="'+ css +'width:auto;zoom:1;position:absolute;"><tr style="'+ css +'"><td style="'+ css +'white-space:nowrap;">' + options.tail + '</td></tr></table>');
            var $td = $("td", $table);
            $this.html( $table );
            var tailwidth = $td.width();
            var targetWidth = width - tailwidth;
            $td.text( text );
            if ($td.width() > width) {
                if ( options.tooltip ) {
                    $this.attr("title", text);
                }
                while ($td.width() >= targetWidth ) {
                    textlength--;
                    $td.html($td.html().substring(0, textlength)); // .html(val) is faster than .text(val) and we already used .text(val) to strip/escape html
                }
                text = $.trim( $td.html() );
                $this.html( text + options.tail );
            } else {
                $this.html( text );
            }
            this.style.visibility = "visible";
            return true;
        });
        return true;
    };
    var css = document.documentElement.style;
    var _native = false;
    if ( "textOverflow" in css ) {
        _native = "textOverflow";
    } else if ( "OTextOverflow" in css ) {
        _native = "OTextOverflow";
    }
    $.fn.textTruncate._native = _native;
    $.fn.textTruncate.defaults = {
        tail: "&hellip;",
        tooltip: true
    };
})(jQuery);
jQuery.fn.limitCharacters = function (maxChars) {
    // set to true if you don't want to break whole words
    var wholeWords = false;
    this.each(function () {
        var val = $(this).text();
        $(this).attr('title', val);
        if (val.length <= maxChars) {
            return;
        }
        else {
            if (wholeWords) {
                var lastSpace = val.indexOf(' ', maxChars);
                if (lastSpace <= 0)
                    lastSpace = maxChars;
                val = val.substring(0, lastSpace) + '...';
            }
            else {
                val = val.substring(0, maxChars) + '...';
            }
        }
        $(this).text(val);
    });
};    
jQuery.ui || (function (a) { a.ui = { version: "1.8", plugin: { add: function (c, d, f) { var e = a.ui[c].prototype; for (var b in f) { e.plugins[b] = e.plugins[b] || []; e.plugins[b].push([d, f[b]]) } }, call: function (b, d, c) { var f = b.plugins[d]; if (!f || !b.element[0].parentNode) { return } for (var e = 0; e < f.length; e++) { if (b.options[f[e][0]]) { f[e][1].apply(b.element, c) } } } }, contains: function (d, c) { return document.compareDocumentPosition ? d.compareDocumentPosition(c) & 16 : d !== c && d.contains(c) }, hasScroll: function (e, c) { if (a(e).css("overflow") == "hidden") { return false } var b = (c && c == "left") ? "scrollLeft" : "scrollTop", d = false; if (e[b] > 0) { return true } e[b] = 1; d = (e[b] > 0); e[b] = 0; return d }, isOverAxis: function (c, b, d) { return (c > b) && (c < (b + d)) }, isOver: function (g, c, f, e, b, d) { return a.ui.isOverAxis(g, f, b) && a.ui.isOverAxis(c, e, d) }, keyCode: { BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38} }; a.fn.extend({ _focus: a.fn.focus, focus: function (b, c) { return typeof b === "number" ? this.each(function () { var d = this; setTimeout(function () { a(d).focus(); (c && c.call(d)) }, b) }) : this._focus.apply(this, arguments) }, enableSelection: function () { return this.attr("unselectable", "off").css("MozUserSelect", "").unbind("selectstart.ui") }, disableSelection: function () { return this.attr("unselectable", "on").css("MozUserSelect", "none").bind("selectstart.ui", function () { return false }) }, scrollParent: function () { var b; if ((a.browser.msie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { b = this.parents().filter(function () { return (/(relative|absolute|fixed)/).test(a.curCSS(this, "position", 1)) && (/(auto|scroll)/).test(a.curCSS(this, "overflow", 1) + a.curCSS(this, "overflow-y", 1) + a.curCSS(this, "overflow-x", 1)) }).eq(0) } else { b = this.parents().filter(function () { return (/(auto|scroll)/).test(a.curCSS(this, "overflow", 1) + a.curCSS(this, "overflow-y", 1) + a.curCSS(this, "overflow-x", 1)) }).eq(0) } return (/fixed/).test(this.css("position")) || !b.length ? a(document) : b }, zIndex: function (e) { if (e !== undefined) { return this.css("zIndex", e) } if (this.length) { var c = a(this[0]), b, d; while (c.length && c[0] !== document) { b = c.css("position"); if (b == "absolute" || b == "relative" || b == "fixed") { d = parseInt(c.css("zIndex")); if (!isNaN(d) && d != 0) { return d } } c = c.parent() } } return 0 } }); a.extend(a.expr[":"], { data: function (d, c, b) { return !!a.data(d, b[3]) }, focusable: function (c) { var d = c.nodeName.toLowerCase(), b = a.attr(c, "tabindex"); return (/input|select|textarea|button|object/.test(d) ? !c.disabled : "a" == d || "area" == d ? c.href || !isNaN(b) : !isNaN(b)) && !a(c)["area" == d ? "parents" : "closest"](":hidden").length }, tabbable: function (c) { var b = a.attr(c, "tabindex"); return (isNaN(b) || b >= 0) && a(c).is(":focusable") } }) })(jQuery); ;
(function (b) { var a = b.fn.remove; b.fn.remove = function (c, d) { return this.each(function () { if (!d) { if (!c || b.filter(c, [this]).length) { b("*", this).add(this).each(function () { b(this).triggerHandler("remove") }) } } return a.call(b(this), c, d) }) }; b.widget = function (d, f, c) { var e = d.split(".")[0], h; d = d.split(".")[1]; h = e + "-" + d; if (!c) { c = f; f = b.Widget } b.expr[":"][h] = function (i) { return !!b.data(i, d) }; b[e] = b[e] || {}; b[e][d] = function (i, j) { if (arguments.length) { this._createWidget(i, j) } }; var g = new f(); g.options = b.extend({}, g.options); b[e][d].prototype = b.extend(true, g, { namespace: e, widgetName: d, widgetEventPrefix: b[e][d].prototype.widgetEventPrefix || d, widgetBaseClass: h }, c); b.widget.bridge(d, b[e][d]) }; b.widget.bridge = function (d, c) { b.fn[d] = function (g) { var e = typeof g === "string", f = Array.prototype.slice.call(arguments, 1), h = this; g = !e && f.length ? b.extend.apply(null, [true, g].concat(f)) : g; if (e && g.substring(0, 1) === "_") { return h } if (e) { this.each(function () { var i = b.data(this, d), j = i && b.isFunction(i[g]) ? i[g].apply(i, f) : i; if (j !== i && j !== undefined) { h = j; return false } }) } else { this.each(function () { var i = b.data(this, d); if (i) { if (g) { i.option(g) } i._init() } else { b.data(this, d, new c(g, this)) } }) } return h } }; b.Widget = function (c, d) { if (arguments.length) { this._createWidget(c, d) } }; b.Widget.prototype = { widgetName: "widget", widgetEventPrefix: "", options: { disabled: false }, _createWidget: function (d, e) { this.element = b(e).data(this.widgetName, this); this.options = b.extend(true, {}, this.options, b.metadata && b.metadata.get(e)[this.widgetName], d); var c = this; this.element.bind("remove." + this.widgetName, function () { c.destroy() }); this._create(); this._init() }, _create: function () { }, _init: function () { }, destroy: function () { this.element.unbind("." + this.widgetName).removeData(this.widgetName); this.widget().unbind("." + this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass + "-disabled " + this.namespace + "-state-disabled") }, widget: function () { return this.element }, option: function (e, f) { var d = e, c = this; if (arguments.length === 0) { return b.extend({}, c.options) } if (typeof e === "string") { if (f === undefined) { return this.options[e] } d = {}; d[e] = f } b.each(d, function (g, h) { c._setOption(g, h) }); return c }, _setOption: function (c, d) { this.options[c] = d; if (c === "disabled") { this.widget()[d ? "addClass" : "removeClass"](this.widgetBaseClass + "-disabled " + this.namespace + "-state-disabled").attr("aria-disabled", d) } return this }, enable: function () { return this._setOption("disabled", false) }, disable: function () { return this._setOption("disabled", true) }, _trigger: function (d, e, f) { var h = this.options[d]; e = b.Event(e); e.type = (d === this.widgetEventPrefix ? d : this.widgetEventPrefix + d).toLowerCase(); f = f || {}; if (e.originalEvent) { for (var c = b.event.props.length, g; c; ) { g = b.event.props[--c]; e[g] = e.originalEvent[g] } } this.element.trigger(e, f); return !(b.isFunction(h) && h.call(this.element[0], e, f) === false || e.isDefaultPrevented()) } } })(jQuery); ;
 
/**
 * This jQuery plugin displays pagination links inside the selected elements.
 * 
 * This plugin needs at least jQuery 1.4.2
 *
 * @author Gabriel Birke (birke *at* d-scribe *dot* de)
 * @version 2.0rc
 * @param {int} maxentries Number of entries to paginate
 * @param {Object} opts Several options (see README for documentation)
 * @return {Object} jQuery Object
 */
 (function($){
    /**
     * @class Class for calculating pagination values
     */
    $.PaginationCalculator = function(maxentries, opts) {
        this.maxentries = maxentries;
        this.opts = opts;
    }
    
    $.extend($.PaginationCalculator.prototype, {
        /**
         * Calculate the maximum number of pages
         * @method
         * @returns {Number}
         */
        numPages:function() {
            return Math.ceil(this.maxentries/this.opts.items_per_page);
        },
        /**
         * Calculate start and end point of pagination links depending on 
         * current_page and num_display_entries.
         * @returns {Array}
         */
        getInterval:function(current_page)  {
            var ne_half = Math.ceil(this.opts.num_display_entries/2);
            var np = this.numPages();
            var upper_limit = np - this.opts.num_display_entries;
            var start = current_page > ne_half ? Math.max( Math.min(current_page - ne_half, upper_limit), 0 ) : 0;
            var end = current_page > ne_half?Math.min(current_page+ne_half, np):Math.min(this.opts.num_display_entries, np);
            return {start:start, end:end};
        }
    });
    
    // Initialize jQuery object container for pagination renderers
    $.PaginationRenderers = {}
    
    /**
     * @class Default renderer for rendering pagination links
     */
    $.PaginationRenderers.defaultRenderer = function(maxentries, opts) {
        this.maxentries = maxentries;
        this.opts = opts;
        this.pc = new $.PaginationCalculator(maxentries, opts);
    }
    $.extend($.PaginationRenderers.defaultRenderer.prototype, {
        /**
         * Helper function for generating a single link (or a span tag if it's the current page)
         * @param {Number} page_id The page id for the new item
         * @param {Number} current_page 
         * @param {Object} appendopts Options for the new item: text and classes
         * @returns {jQuery} jQuery object containing the link
         */
        createLink:function(page_id, current_page, appendopts){
            var lnk, np = this.pc.numPages();
            page_id = page_id<0?0:(page_id<np?page_id:np-1); // Normalize page id to sane value
            appendopts = $.extend({text:page_id+1, classes:""}, appendopts||{});
            if(page_id == current_page){
                lnk = $("<span class='current'>" + appendopts.text + "</span>");
            }
            else
            {
                lnk = $("<a>" + appendopts.text + "</a>")
                    .attr('href', this.opts.link_to.replace(/__id__/,page_id));
            }
            if(appendopts.classes){ lnk.addClass(appendopts.classes); }
            lnk.data('page_id', page_id);
            return lnk;
        },
        // Generate a range of numeric links 
        appendRange:function(container, current_page, start, end) {
            var i;
            for(i=start; i<end; i++) {
                this.createLink(i, current_page).appendTo(container);
            }
        },
        getLinks:function(current_page, eventHandler) {
            var begin, end,
                interval = this.pc.getInterval(current_page),
                np = this.pc.numPages(),
                fragment = $("<div class='pagination'></div>");
            
            // Generate starting points
            if (interval.start > 0 && this.opts.num_edge_entries > 0)
            {
                end = Math.min(this.opts.num_edge_entries, interval.start);
                this.appendRange(fragment, current_page, 0, end);
                if(this.opts.num_edge_entries < interval.start && this.opts.ellipse_text)
                {
                    jQuery("<span>"+this.opts.ellipse_text+"</span>").appendTo(fragment);
                }
            }
            // Generate interval links
            this.appendRange(fragment, current_page, interval.start, interval.end);
            // Generate ending points
            if (interval.end < np && this.opts.num_edge_entries > 0)
            {
                if(np-this.opts.num_edge_entries > interval.end && this.opts.ellipse_text)
                {
                    jQuery("<span>"+this.opts.ellipse_text+"</span>").appendTo(fragment);
                }
                begin = Math.max(np-this.opts.num_edge_entries, interval.end);
                this.appendRange(fragment, current_page, begin, np);
                
            }
            // Generate "Previous"-Link
            if (this.opts.prev_text && (current_page > 0 || this.opts.prev_show_always)) {
                fragment.append(this.createLink(current_page - 1, current_page, { text: this.opts.prev_text, classes: "prev" }));
            }
            // Generate "Next"-Link
            if(this.opts.next_text && (current_page < np-1 || this.opts.next_show_always)){
                fragment.append(this.createLink(current_page+1, current_page, {text:this.opts.next_text, classes:"next"}));
            }
            $('a', fragment).click(eventHandler);
            return fragment;
        }
    });
    
    // Extend jQuery
    $.fn.pagination = function(maxentries, opts){
        
    // Initialize options with default values
    opts = jQuery.extend({
        items_per_page:10,
        num_display_entries:10,
        current_page:0,
        num_edge_entries:0,
        link_to:"#",
        prev_text:"Prev",
        next_text:"Next",
        ellipse_text:"...",
        prev_show_always:true,
        next_show_always:true,
        renderer:"defaultRenderer",
        callback:function(){return false;}
    },opts||{});
    
    var containers = this,
        renderer, links, current_page;
    
        
        /**
         * This is the event handling function for the pagination links. 
         * @param {int} page_id The new page number
         */
        function pageSelected(evt){
            var links, current_page = $(evt.target).data('page_id');
            containers.data('current_page', current_page);
            links = renderer.getLinks(current_page, pageSelected);
            containers.empty();
            links.appendTo(containers);
            var continuePropagation = opts.callback(current_page, containers);
            if (!continuePropagation) {
                if (evt.stopPropagation) {
                    evt.stopPropagation();
                }
                else {
                    evt.cancelBubble = true;
                }
            }
            return continuePropagation;
        }
        
        current_page = opts.current_page;
        containers.data('current_page', current_page);
        // Create a sane value for maxentries and items_per_page
        maxentries = (!maxentries || maxentries < 0)?1:maxentries;
        opts.items_per_page = (!opts.items_per_page || opts.items_per_page < 0)?1:opts.items_per_page;
        
        if(!$.PaginationRenderers[opts.renderer])
        {
            throw new ReferenceError("Pagination renderer '" + opts.renderer + "' was not found in jQuery.PaginationRenderers object.");
        }
        renderer = new $.PaginationRenderers[opts.renderer](maxentries, opts);
        
        containers.each(function() {
        // Attach control functions to the DOM element 
        this.selectPage = function(page_id){ pageSelected(page_id);}
        this.prevPage = function(){
            var current_page = containers.data('current_page');
            if (current_page > 0) {
                pageSelected(current_page - 1);
                return true;
            }
            else {
                return false;
            }
        }
        this.nextPage = function(){
            var current_page = containers.data('current_page');
            if(current_page < numPages()-1) {
                pageSelected(current_page+1);
                return true;
            }
            else {
                return false;
            }
        }
        });
        // When all initialisation is done, draw the links
        links = renderer.getLinks(current_page, pageSelected);
        containers.empty();
        links.appendTo(containers);
        // call callback function
        opts.callback(current_page, containers);
    
}
})(jQuery);
(function ($) {
    $.widget('ui.stars', { options: { inputType: 'radio', split: 0, disabled: false, cancelTitle: 'Cancel Rating', cancelValue: 0, cancelShow: true, disableValue: true, oneVoteOnly: false, showTitles: false, captionEl: null, callback: null, starWidth: 16, cancelClass: 'ui-stars-cancel', starClass: 'ui-stars-star', starOnClass: 'ui-stars-star-on', starHoverClass: 'ui-stars-star-hover', starDisabledClass: 'ui-stars-star-disabled', cancelHoverClass: 'ui-stars-cancel-hover', cancelDisabledClass: 'ui-stars-cancel-disabled' }, _create: function () {
        var self = this, o = this.options, starId = 0; this.element.data('former.stars', this.element.html()); o.isSelect = o.inputType == 'select'; this.$form = $(this.element).closest('form'); this.$selec = o.isSelect ? $('select', this.element) : null; this.$rboxs = o.isSelect ? $('option', this.$selec) : $(':radio', this.element); this.$stars = this.$rboxs.map(function (i) {
            var el = { value: this.value, title: (o.isSelect ? this.text : this.title) || this.value, isDefault: (o.isSelect && this.defaultSelected) || this.defaultChecked }; if (i == 0) { o.split = typeof o.split != 'number' ? 0 : o.split; o.val2id = []; o.id2val = []; o.id2title = []; o.name = o.isSelect ? self.$selec.get(0).name : this.name; o.disabled = o.disabled || (o.isSelect ? $(self.$selec).attr('disabled') : $(this).attr('disabled')); }
            if (el.value == o.cancelValue) { o.cancelTitle = el.title; return null; }
            o.val2id[el.value] = starId; o.id2val[starId] = el.value; o.id2title[starId] = el.title; if (el.isDefault) { o.checked = starId; o.value = o.defaultValue = el.value; o.title = el.title; }
            var $s = $('<div/>').addClass(o.starClass); var $a = $('<a/>').attr('title', o.showTitles ? el.title : '').text(el.value); if (o.split) { var oddeven = (starId % o.split); var stwidth = Math.floor(o.starWidth / o.split); $s.width(stwidth); $a.css('margin-left', '-' + (oddeven * stwidth) + 'px'); }
            starId++; return $s.append($a).get(0);
        }); o.items = starId; o.isSelect ? this.$selec.remove() : this.$rboxs.remove(); this.$cancel = $('<div/>').addClass(o.cancelClass).append($('<a/>').attr('title', o.showTitles ? o.cancelTitle : '').text(o.cancelValue)); o.cancelShow &= !o.disabled && !o.oneVoteOnly; o.cancelShow && this.element.append(this.$cancel); this.element.append(this.$stars); if (o.checked === undefined) { o.checked = -1; o.value = o.defaultValue = o.cancelValue; o.title = ''; }
        this.$value = $("<input type='hidden' name='" + o.name + "' value='" + o.value + "' />"); this.element.append(this.$value); this.$stars.bind('click.stars', function (e) { if (!o.forceSelect && o.disabled) return false; var i = self.$stars.index(this); o.checked = i; o.value = o.id2val[i]; o.title = o.id2title[i]; self.$value.attr({ disabled: o.disabled ? 'disabled' : '', value: o.value }); fillTo(i, false); self._disableCancel(); !o.forceSelect && self.callback(e, 'star'); }).bind('mouseover.stars', function () { if (o.disabled) return false; var i = self.$stars.index(this); fillTo(i, true); }).bind('mouseout.stars', function () { if (o.disabled) return false; fillTo(self.options.checked, false); }); this.$cancel.bind('click.stars', function (e) { if (!o.forceSelect && (o.disabled || o.value == o.cancelValue)) return false; o.checked = -1; o.value = o.cancelValue; o.title = ''; self.$value.val(o.value); o.disableValue && self.$value.attr({ disabled: 'disabled' }); fillNone(); self._disableCancel(); !o.forceSelect && self.callback(e, 'cancel'); }).bind('mouseover.stars', function () { if (self._disableCancel()) return false; self.$cancel.addClass(o.cancelHoverClass); fillNone(); self._showCap(o.cancelTitle); }).bind('mouseout.stars', function () { if (self._disableCancel()) return false; self.$cancel.removeClass(o.cancelHoverClass); self.$stars.triggerHandler('mouseout.stars'); }); this.$form.bind('reset.stars', function () { !o.disabled && self.select(o.defaultValue); }); $(window).unload(function () { self.$cancel.unbind('.stars'); self.$stars.unbind('.stars'); self.$form.unbind('.stars'); self.$selec = self.$rboxs = self.$stars = self.$value = self.$cancel = self.$form = null; }); function fillTo(index, hover) {
            if (index != -1) { var addClass = hover ? o.starHoverClass : o.starOnClass; var remClass = hover ? o.starOnClass : o.starHoverClass; self.$stars.eq(index).prevAll('.' + o.starClass).andSelf().removeClass(remClass).addClass(addClass); self.$stars.eq(index).nextAll('.' + o.starClass).removeClass(o.starHoverClass + ' ' + o.starOnClass); self._showCap(o.id2title[index]); }
            else fillNone();
        }; function fillNone() { self.$stars.removeClass(o.starOnClass + ' ' + o.starHoverClass); self._showCap(''); }; this.select(o.value); o.disabled && this.disable();
    }, _disableCancel: function () { var o = this.options, disabled = o.disabled || o.oneVoteOnly || (o.value == o.cancelValue); if (disabled) this.$cancel.removeClass(o.cancelHoverClass).addClass(o.cancelDisabledClass); else this.$cancel.removeClass(o.cancelDisabledClass); this.$cancel.css('opacity', disabled ? 0.5 : 1); return disabled; }, _disableAll: function () { var o = this.options; this._disableCancel(); if (o.disabled) this.$stars.filter('div').addClass(o.starDisabledClass); else this.$stars.filter('div').removeClass(o.starDisabledClass); }, _showCap: function (s) { var o = this.options; if (o.captionEl) o.captionEl.text(s); }, value: function () { return this.options.value; }, select: function (val) { var o = this.options, e = (val == o.cancelValue) ? this.$cancel : this.$stars.eq(o.val2id[val]); o.forceSelect = true; e.triggerHandler('click.stars'); o.forceSelect = false; }, selectID: function (id) { var o = this.options, e = (id == -1) ? this.$cancel : this.$stars.eq(id); o.forceSelect = true; e.triggerHandler('click.stars'); o.forceSelect = false; }, enable: function () { this.options.disabled = false; this._disableAll(); }, disable: function () { this.options.disabled = true; this._disableAll(); }, destroy: function () { this.$form.unbind('.stars'); this.$cancel.unbind('.stars').remove(); this.$stars.unbind('.stars').remove(); this.$value.remove(); this.element.unbind('.stars').html(this.element.data('former.stars')).removeData('stars'); return this; }, callback: function (e, type) { var o = this.options; o.callback && o.callback(this, type, o.value, e); o.oneVoteOnly && !o.disabled && this.disable(); } 
    }); $.extend($.ui.stars, { version: '3.0.1' });
})(jQuery);
(function ($) {
    var helper = {}, current, title, tID, IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent), track = false; $.tooltip = { blocked: false, defaults: { delay: 200, fade: false, showURL: true, extraClass: "", top: 15, left: 15, id: "tooltip" }, block: function () { $.tooltip.blocked = !$.tooltip.blocked; } }; $.fn.extend({ tooltip: function (settings) { settings = $.extend({}, $.tooltip.defaults, settings); createHelper(settings); return this.each(function () { $.data(this, "tooltip", settings); this.tOpacity = helper.parent.css("opacity"); this.tooltipText = this.title; $(this).removeAttr("title"); this.alt = ""; }).mouseover(save).mouseout(hide).click(hide); }, fixPNG: IE ? function () {
        return this.each(function () {
            var image = $(this).css('backgroundImage'); if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
                image = RegExp.$1; $(this).css({ 'backgroundImage': 'none', 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')" }).each(function () {
                    var position = $(this).css('position'); if (position != 'absolute' && position != 'relative')
                        $(this).css('position', 'relative');
                });
            } 
        });
    } : function () { return this; }, unfixPNG: IE ? function () { return this.each(function () { $(this).css({ 'filter': '', backgroundImage: '' }); }); } : function () { return this; }, hideWhenEmpty: function () { return this.each(function () { $(this)[$(this).html() ? "show" : "hide"](); }); }, url: function () { return this.attr('href') || this.attr('src'); } 
    }); function createHelper(settings) {
        if (helper.parent)
            return; helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>').appendTo(document.body).hide(); if ($.fn.bgiframe)
            helper.parent.bgiframe(); helper.title = $('h3', helper.parent); helper.body = $('div.body', helper.parent); helper.url = $('div.url', helper.parent);
    }
    function settings(element) { return $.data(element, "tooltip"); }
    function handle(event) {
        if (settings(this).delay)
            tID = setTimeout(show, settings(this).delay); else
            show(); track = !!settings(this).track; $(document.body).bind('mousemove', update); update(event);
    }
    function save() {
        if ($.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler))
            return; current = this; title = this.tooltipText; if (settings(this).bodyHandler) {
            helper.title.hide(); var bodyContent = settings(this).bodyHandler.call(this); if (bodyContent.nodeType || bodyContent.jquery) { helper.body.empty().append(bodyContent) } else { helper.body.html(bodyContent); }
            helper.body.show();
        } else if (settings(this).showBody) {
            var parts = title.split(settings(this).showBody); helper.title.html(parts.shift()).show(); helper.body.empty(); for (var i = 0, part; (part = parts[i]); i++) {
                if (i > 0)
                    helper.body.append("<br/>"); helper.body.append(part);
            }
            helper.body.hideWhenEmpty();
        } else { helper.title.html(title).show(); helper.body.hide(); }
        if (settings(this).showURL && $(this).url())
            helper.url.html($(this).url().replace('http://', '')).show(); else
            helper.url.hide(); helper.parent.addClass(settings(this).extraClass); if (settings(this).fixPNG)
            helper.parent.fixPNG(); handle.apply(this, arguments);
    }
    function show() {
        tID = null; if ((!IE || !$.fn.bgiframe) && settings(current).fade) {
            if (helper.parent.is(":animated"))
                helper.parent.stop().show().fadeTo(settings(current).fade, current.tOpacity); else
                helper.parent.is(':visible') ? helper.parent.fadeTo(settings(current).fade, current.tOpacity) : helper.parent.fadeIn(settings(current).fade);
        } else { helper.parent.show(); }
        update();
    }
    function update(event) {
        if ($.tooltip.blocked)
            return; if (event && event.target.tagName == "OPTION") { return; }
        if (!track && helper.parent.is(":visible")) { $(document.body).unbind('mousemove', update) }
        if (current == null) { $(document.body).unbind('mousemove', update); return; }
        helper.parent.removeClass("viewport-right").removeClass("viewport-bottom"); var left = helper.parent[0].offsetLeft; var top = helper.parent[0].offsetTop; if (event) {
            left = event.pageX + settings(current).left; top = event.pageY + settings(current).top; var right = 'auto'; if (settings(current).positionLeft) { right = $(window).width() - left; left = 'auto'; }
            helper.parent.css({ left: left, right: right, top: top });
        }
        var v = viewport(), h = helper.parent[0]; if (v.x + v.cx < h.offsetLeft + h.offsetWidth) { left -= h.offsetWidth + 20 + settings(current).left; helper.parent.css({ left: left + 'px' }).addClass("viewport-right"); }
        if (v.y + v.cy < h.offsetTop + h.offsetHeight) { top -= h.offsetHeight + 20 + settings(current).top; helper.parent.css({ top: top + 'px' }).addClass("viewport-bottom"); } 
    }
    function viewport() { return { x: $(window).scrollLeft(), y: $(window).scrollTop(), cx: $(window).width(), cy: $(window).height() }; }
    function hide(event) {
        if ($.tooltip.blocked)
            return; if (tID)
            clearTimeout(tID); current = null; var tsettings = settings(this); function complete() { helper.parent.removeClass(tsettings.extraClass).hide().css("opacity", ""); }
        if ((!IE || !$.fn.bgiframe) && tsettings.fade) {
            if (helper.parent.is(':animated'))
                helper.parent.stop().fadeTo(tsettings.fade, 0, complete); else
                helper.parent.stop().fadeOut(tsettings.fade, complete);
        } else
            complete(); if (settings(this).fixPNG)
            helper.parent.unfixPNG();
    } 
})(jQuery);
 
/*
* Date Format 1.2.3
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
* MIT license
*
* Includes enhancements by Scott Trenda <scott.trenda.net>
* and Kris Kowal <cixar.com/~kris.kowal/>
*
* Accepts a date, a mask, or a date and a mask.
* Returns a formatted version of the given date.
* The date defaults to the current date/time.
* The mask defaults to dateFormat.masks.default.
*/
var dateFormat = function () {
    var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
        timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
        timezoneClip = /[^-+\dA-Z]/g,
        pad = function (val, len) {
            val = String(val);
            len = len || 2;
            while (val.length < len) val = "0" + val;
            return val;
        };
    // Regexes and supporting functions are cached through closure
    return function (date, mask, utc) {
        var dF = dateFormat;
        // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
        if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
            mask = date;
            date = undefined;
        }
        // Passing date through Date applies Date.parse, if necessary
        date = date ? new Date(date) : new Date;
        if (isNaN(date)) throw SyntaxError("invalid date");
        mask = String(dF.masks[mask] || mask || dF.masks["default"]);
        // Allow setting the utc argument via the mask
        if (mask.slice(0, 4) == "UTC:") {
            mask = mask.slice(4);
            utc = true;
        }
        var _ = utc ? "getUTC" : "get",
            d = date[_ + "Date"](),
            D = date[_ + "Day"](),
            m = date[_ + "Month"](),
            y = date[_ + "FullYear"](),
            H = date[_ + "Hours"](),
            M = date[_ + "Minutes"](),
            s = date[_ + "Seconds"](),
            L = date[_ + "Milliseconds"](),
            o = utc ? 0 : date.getTimezoneOffset(),
            flags = {
                d: d,
                dd: pad(d),
                ddd: dF.i18n.dayNames[D],
                dddd: dF.i18n.dayNames[D + 7],
                m: m + 1,
                mm: pad(m + 1),
                mmm: dF.i18n.monthNames[m],
                mmmm: dF.i18n.monthNames[m + 12],
                yy: String(y).slice(2),
                yyyy: y,
                h: H % 12 || 12,
                hh: pad(H % 12 || 12),
                H: H,
                HH: pad(H),
                M: M,
                MM: pad(M),
                s: s,
                ss: pad(s),
                l: pad(L, 3),
                L: pad(L > 99 ? Math.round(L / 10) : L),
                t: H < 12 ? "a" : "p",
                tt: H < 12 ? "am" : "pm",
                T: H < 12 ? "A" : "P",
                TT: H < 12 ? "AM" : "PM",
                Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
                o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
                S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
            };
        return mask.replace(token, function ($0) {
            return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
        });
    };
} ();
// Some common format strings
dateFormat.masks = {
    "default": "ddd mmm dd yyyy HH:MM:ss",
    shortDate: "m/d/yy",
    mediumDate: "mmm d, yyyy",
    longDate: "mmmm d, yyyy",
    fullDate: "dddd, mmmm d, yyyy",
    shortTime: "h:MM TT",
    mediumTime: "h:MM:ss TT",
    longTime: "h:MM:ss TT Z",
    isoDate: "yyyy-mm-dd",
    isoTime: "HH:MM:ss",
    isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};
// Internationalization strings
dateFormat.i18n = {
    dayNames: [
        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
        "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    ],
    monthNames: [
        "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
        "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
    ]
};
// For convenience...
Date.prototype.format = function (mask, utc) {
    return dateFormat(this, mask, utc);
};

var currentTags = '';
var currentKeywords = '';
var video_player;
var maxVideoItems = 100;
var mediaItems = [];
var dayList = [];
/* ---------------------------------------------------------------------------------------- */
/* GET MEDIA DATE
/* ---------------------------------------------------------------------------------------- */
function getMediaDate(media) {
    var dateArr = media.creationDate.split('T')[0].split('-');
    var timeArr = media.creationDate.split('T')[1].split(':');
    var d = new Date(dateArr[0], dateArr[1] - 1, dateArr[2], timeArr[0], timeArr[1]);
    // IMPORTANT: add 10 hours to date for GMT/Australian time conversion
    d.setHours(d.getHours() + 10);
    return d;
}
/* ---------------------------------------------------------------------------------------- */
/* NEWS PLAYER (UNIVERSAL)
/* ---------------------------------------------------------------------------------------- */
var activeScroller = null;
var video_player = null;
var playerLoaded = false;
var defaultPlaylistID = null;
function initNewsVideoPlayer(obj) {
    if (MOVIDEO.utils.getDevice() != MOVIDEO.utils.deviceTypeEnum.iPhone) {
        var settings = {
            apiKey: 'movideoNetwork10',
            flashAppAlias: 'news-universal-flash',
            iosAppAlias: 'news-universal-ipad',
            posterURL: 'http://ten.com.au/playerassets/news/StopStateImage.jpg',
            posterDisabled: false
        };
        if (iPad) {
            settings.adURLPreProcesser = newsVideoAnalytics.processOASAdvertisingURL;
        }
        $('#video-panel-container').player(settings);
        if (iPad) {
            $("#video-panel-container").bind("playeranalytics", newsVideoAnalytics.handleOmnitureTracking);
        }
        if (obj.playlistid != null) {
            defaultPlaylistID = obj.playlistid;
        }
        $("#video-panel-container").bind("playeridle", playerIdle);
        $("#video-panel-container").bind("playerplay", playerPlay);
        $("#video-panel-container").bind("playerplaycomplete", playerPlayComplete);
        $("#video-panel-container").bind("playerad", playerAd);
        if ($('.video-lead .scroller').length > 0) {
            activeScroller = $('.video-lead .scroller')[0];
        }
    }
}
function playerAd(event, data) {
    // show mrec
    var mrec = $('.news-mrec-container');
    if (mrec.length == 0) {
        mrec = $(
            '<div class="news-mrec-container">' + 
                '<div id="news-mrec" class="news-mrec"></div>' + 
                '<div class="news-mrec-message">Advertisement: Your clip is next</div>' + 
            '</div>'
        );
        $('.video-lead .column2').prepend(mrec);
    }
    $('.news-mrec-container').show();
    var div = $('<div class="video-panel-info-ad">Your video will start after this ad.</div>');
    $('.video-panel .video-panel-info').prepend(div);
    newsMovideoAds.adSlots = [
        { id: 'news-mrec', width: 300, height: 250 }
    ];
    newsMovideoAds.updateAds(data);
}
function playerPlayComplete(event, data) {
    // hide ad
    $('.news-mrec-container').hide();
    $('.video-panel-info-ad').remove();
}
function playerIdle(event, media) {
    if (!playerLoaded) {
        playerLoaded = true;
        var mediaid = getQueryString('movideo_m');
        if (mediaid != '') {
            playMedia(mediaid, null);  //$('#video-panel-container').player('play', { mediaId: mediaid });
        }
        else {
            playMedia(null, defaultPlaylistID); //$('#video-panel-container').player('play', { playlistId: defaultPlaylistID });
        }
    }
}
function playerPlay(event, media) {
    if (activeScroller == null) {
        if ($('.video-lead .scroller').length > 0) {
            activeScroller = $('.video-lead .scroller')[0];
        }
    }
    $('.video-panel-info').show();
    // apply star ratings
    starRate = starRating.setup(4, 1, media.id);
    starRate.drawForm(media.id, $("#mediaRating"), { voteDisabled: false });
    $("#mediaRating .stars").bind("click", function () {
        rate = $("#mediaRating input").val().split(',')[3];
        $("#s_ph" + media.id + " .stars").stars("select", rate);
        countStr = $("#mediaRating span").html()
        $("#s_ph" + media.id + " span").html(countStr);
    });
    // show title/description
    $("#mediaTitle").html(media.title);
    $("#mediaDescription").html(media.description);
    // highlight active item
    if (activeScroller != null) {
        
        $('.scroller .item.active').removeClass('active');
        $(activeScroller).find('.item[mediaid="' + media.id + '"]').addClass('active');
        // check if active thumb is visible.. if not, then scroll the carousel to the right
        var currentThumb = $(activeScroller).find('.item.active');
        if (currentThumb.length > 0) {
            var thumbIndex = currentThumb.index();
            var thumbWidth = currentThumb.outerWidth();
            var thumbPos = thumbWidth * thumbIndex;
            var carouselWidth = $(activeScroller).outerWidth();
            var carouselPos = parseInt($(activeScroller).find('ul').css('left'));
            var relativePos = thumbPos + carouselPos;
            var itemVisible = (relativePos >= 0 && (relativePos <= (carouselWidth - thumbWidth)));
            if (!itemVisible) {
                if (relativePos >= (carouselWidth - thumbWidth)) {
                    var btnNext = $(activeScroller.parents('.content')[0]).find('.right');
                    btnNext.click();
                }
            }
        }
    }
    // show other information (publish date + duration)
    getMediaList({
        query: 'media/'+media.id,
        callback: function (mediaList) {
            var media = mediaList[0];
            $('#mediaSubTitle').html('');
            // show publish date
            var d = getMediaDate(media);
            var date = dateFormat(d, "dS mmmm yyyy h:MM TT");
            $('#mediaSubTitle').append('<strong>Publish Date:</strong> ' + date + '&nbsp;&nbsp;&nbsp;');
            // show duration
            $('#mediaSubTitle').append('<strong>Duration:</strong> ' + media.duration);
        }
    });
}
function playScrollerVideo(link) {
    var li = $(link).parents('li.item');
    var mediaid = li.attr('mediaid');
    var scroller = $(li).parents('.scroller');
    if (activeScroller != scroller) {
        activeScroller = scroller;
        var playlistid = $(scroller).attr('playlistid');
        playMedia(mediaid, playlistid); //$('#video-panel-container').player('play', { mediaId: mediaid, playlistId: playlistid });
    }
    else {
        playMedia(mediaid, null); //$('#video-panel-container').player('play', { mediaId: mediaid });
    }
    $('.scroller .item.active').removeClass('active');
    $(activeScroller).find('.item[id="media' + mediaid + '"]').addClass('active');
}
function initVideoScroller(element, options) {
    var playlistid = extractPlaylistId(options[0].query);
    element.find('.scroller').attr('playlistid', playlistid);
    element.find('.scroller').find('a').click(function (e) {
        e.preventDefault();
        
        /*
        // IE8 hacked -- added by AT on my last day!
        var IE8 = ($.browser.msie && (parseInt($.browser.version) < 9));
        if (IE8) {
            var url = location.href;
            if (url.indexOf('?') > -1) {
                url = url.split('?')[0];
            }
            var queryString = $(this).attr('href').split('?')[1];
            url += '?' + queryString;
            location.href = url;
        }
        else {
        */
            playScrollerVideo(this);

    });
    element.find('.scroller').jCarouselLite({
        visible: visibleItems,
        scroll: 1,
        speed: 500,
        circular: false,
        btnNext: element.find('.right'),
        btnPrev: element.find('.left'),
        afterEnd: function (obj) {
            var index = obj.index();
            var lastIndex = obj.siblings().length - visibleItems;
            (index < lastIndex) ? element.find('.right').show() : element.find('.right').hide();
            (index == 0) ? element.find('.left').hide() : element.find('.left').show();
        }
    });
    element.find('.left').hide();
    if (element.find('.item').length <= visibleItems) { element.find('.right').hide(); }
}
function playMedia(mediaid, playlistid) {
    mediaid = !isNaN(mediaid) ? mediaid : null;
    playlistid = !isNaN(playlistid) ? playlistid : null;
    var obj = new Object();
    if (mediaid != null) { obj.mediaId = mediaid; }
    if (playlistid != null) { obj.playlistId = playlistid; }
    if (iPad) {
        mediaPathGenerator = new newsVideoAnalytics.MediaPathGenerator(mediaid, playlistid, function () {
            $('#video-panel-container').player('play', obj);
        });
    }
    else {
        $('#video-panel-container').player('play', obj);
    }
}
function getQueryString(param) {
    var mediaid = '';
    if (document.location.search.indexOf(param) > -1) {
        var querystring = document.location.search.split('&');
        for (i = 0; i < querystring.length; i++) {
            if (querystring[i].indexOf(param) > -1) {
                mediaid = querystring[i].split('=')[1];
            }
        }
    }
    return mediaid;
}
var newsMovideoAds = (function () {
    // find a Companion Ad with matching width and height
    // returns Companion Ad if matches
    // returns null if no matches
    function findCompanionAd(companionAds, width, height) {
        for (var i in companionAds) {
            var companionAd = companionAds[i];
            if (companionAd.width == width && companionAd.height == height) {
                return companionAd;
            }
        }
        return null;
    }
    function createIFrameString(width, height, src) {
        var f = '<iframe '
            + 'height="' + height + '" '
            + 'width="' + width + '" '
            + 'src="' + src + '" '
            + 'scrolling="no" frameborder="0" vspace="0" marginwidth="0" marginheight="0" allowtransparency="yes"></iframe>'
        return f;
    }
    // 
    var generateedElementPrefix = "movideoAdsElement";
    var nextGeneratedId = 0;
    var defaultResourceHandlers = {
        // for html resources, replace the innerHTML with the resource. 
        // NOTE does not support <script> elements in the HTML resource.
        // 
        'html': function (companionAd, element) {
            // when the companion resource starts with http:// then treat it as the src for an iframe element
            var url = companionAd.resource;
            var timestamp = new Date().getTime();
            url = url.replace(/\{timestamp\}/g, timestamp);
            // determine if resource is a URL for an iframe or plain html
            var isUrlResource = /^http:\/\//;
            if (isUrlResource.test(url)) {
                element.innerHTML = createIFrameString(companionAd.width, companionAd.height, url);
            }
            else {
                element.innerHTML = url;
            }
        },
        // for iframe resources, simply change the IFrameElement.src to point to the new URL.
        // 
        'iframe': function (companionAd, element) {
            var url = companionAd.resource;
            var timestamp = new Date().getTime();
            url = url.replace(/\{timestamp\}/g, timestamp);
            element.innerHTML = createIFrameString(companionAd.width, companionAd.height, url);
        },
        // for static resources, create HTML to wrap the resource, and inject to DOM. 
        // 
        'static': function (companionAd, element) {
            // handle images resource by creating an <a> link with an <img />
            // matches creativeTypes such as: image/jpeg, image/gif
            // 
            if (companionAd.creativeType.indexOf('image') == 0) {
                var html
                    = '<a href="' + companionAd.clickThroughUrl + '" target="_blank">'
                    + '<img border="0" src="' + companionAd.resource
                    + '" width="' + companionAd.width
                    + '" height="' + companionAd.height
                    + '" />'
                    + '</a>';
                element.innerHTML = html;
            }
            // handles SWFs by embedding in the ad container
            //
            else if (companionAd.creativeType == 'application/x-shockwave-flash') {
                element.innerHTML = "";
                var generatedElementId = (generateedElementPrefix + (nextGeneratedId++));
                var adElement = document.createElement("div");
                adElement.id = generatedElementId;
                element.appendChild(adElement);
                // some ads use clickTAG, and some use clickTag so we pass in both. 
                swfobject.embedSWF(companionAd.resource + '?clickTAG=' + companionAd.clickThroughUrl + "&clickTag=" + companionAd.clickThroughUrl, generatedElementId, companionAd.width, companionAd.height, '9.0.0');
            }
        }
    };
    return {
        adSlots: [],
        adResourceHandlers: defaultResourceHandlers,
        updateAds: function (advertData) {
            for (var i in newsMovideoAds.adSlots) {
                var adSlot = newsMovideoAds.adSlots[i];
                if (adSlot) {
                    var adElement = document.getElementById(adSlot.id);
                    if (adElement) {
                        var companionAd = findCompanionAd(advertData.companionAds, adSlot.width, adSlot.height);
                        if (companionAd) {
                            var resourceHandler = newsMovideoAds.adResourceHandlers[companionAd.resourceType];
                            if (resourceHandler) {
                                resourceHandler(companionAd, adElement);
                            }
                        }
                    }
                    if (adSlot.onChanged != null) {
                        adSlot.onChanged();
                    }
                }
            }
        },
        findCompanionAd: function (companionAds, width, height) {
            return findCompanionAd(companionAds, width, height);
        }
    }
})();

function formatDuration(val) {
    var seconds = parseInt(val);
    var hours = parseInt(seconds / 3600);
    var minutes = parseInt((seconds / 60) - (hours * 60));
    if (seconds == 60) {
        seconds = 0;
        minutes++;
    }
    if (minutes == 60) {
        minutes = 0;
        hours++;
    }
    seconds = seconds % 60;
    // format new duration => h:mm:ss
    var dur = seconds;
    if (dur.length == 1) { dur = '0' + dur; }
    dur = minutes + ':' + seconds;
    if (hours > 0) {
        if (minutes.length == 1) { dur = '0' + dur; }
        dur = hours + ':' + dur;
    }
    return dur;
}
var newsVideoAnalytics = {
    /**
    * Process the URL passed in from the player's advertising config. 
    * If player is running on iOS3 then cancel advert request by returning null.
    */
    processOASAdvertisingURL: function (url) {
        // Replace the tokens in the OAS URL with our new values
        var data = {
            vastPlayer: videoSettings.vastPlayer,
            vastSite: videoSettings.vastSite,
            timestamp: +(new Date())
        };
        data[videoSettings.vastReplaceToken] = mediaPathGenerator.getOASMediaPath($('#video-panel-container').player("media"));
        if (location.href.indexOf('debug=true') > -1) { console.log('AD URL = ' + MOVIDEO.utils.replaceTokens(url, data)); }
        return MOVIDEO.utils.replaceTokens(url, data);
    },
    /**
    * Handle player analytics events and convert them to Omniture tracking requests
    */
    handleOmnitureTracking: function (event, data) {
        var type = data.type;
        if (type == undefined) {
            type = data.mediaType;
        }
        // Only record if this is a play event, the type is video (i.e. not 'AD')
        if (data.event == "Play" && type.toUpperCase() == "VIDEO") {
            var media = $('#video-panel-container').player("media");
            var playlist = $('#video-panel-container').player("playlist");
            var omNS = videoSettings.omnitureAccount;
            var path = (function (media, playlist) {
                // Prefer playlist title if available
                if (playlist && playlist.title) {
                    return playlist.title;
                } else {
                    // else if vastMediaTag exists, use it
                    var tc = (videoSettings.vastMediaTag || "").split(":");
                    if (tc.length == 2) {
                        return MOVIDEO.utils.getTagValue(media.tags, tc[0], tc[1]);
                    }
                }
                // else set no playlist title
                return "";
            })(media, playlist);
            var currentTime = new Date();
            var month = currentTime.getMonth();
            var day = currentTime.getDate();
            var year = currentTime.getFullYear();
            var hours = currentTime.getHours();
            var minutes = currentTime.getMinutes();
            var seconds = currentTime.getSeconds();
            var timeEnc = encodeURI(day + "/" + month + "/" + year + " " + hours + ":" + minutes + ":" + seconds + " " + currentTime.getDay() + " " + currentTime.getTimezoneOffset());
            var titleEnc = encodeURI(media.title);
            var appEnc = encodeURI(MOVIDEO.utils.getApplicationAlias());
            var pathEnc = encodeURI(path);
            var url = "http://metrics.ten.com.au/b/ss/" + videoSettings.omniutreSuite + "," + videoSettings.omnitureGlobalSuite + "/0/FAS-3.1.2-AS3/s75817903643473?AQB=1"
            + "&ndh=1"
            + "&t=" + timeEnc
            + "&ce=UTF-8"
            + "&ns=" + videoSettings.omnitureAccount
            + "&cdp=3"
            + "&g=" + encodeURI(document.location.toString())
            + "&cc=AUD"
            + "&events=event14"
            + "&c24=" + titleEnc
            + "&c25=" + pathEnc
            + "&c26=" + appEnc
            + "&v28=" + titleEnc
            + "&v29=" + pathEnc
            + "&v30=" + appEnc
            + "&pe=media"
            + "&pev3=" + encodeURI(path + " %2B " + media.title + " %2B " + MOVIDEO.utils.getApplicationAlias() + "--**--1--**--" + MOVIDEO.utils.getApplicationAlias() + "--**--0--**--" + currentTime.valueOf() + "--**--S0E0")
            + "&s=" + screen.width + "x" + screen.height
            + "&AQE=1";
            var sc = document.createElement('script');
            sc.type = 'text/javascript';
            sc.id = "movideo.bi.omniture";
            sc.src = url;
            var head = document.getElementsByTagName('head')[0];
            head.appendChild(sc);
            if (location.href.indexOf('debug=true') > -1) { console.log('OMNITURE URL = ' + url); }
        }
    },
    /**
    * Load the playlist tree for a given piece of media or playlist and store the result
    * for reference later.
    */
    MediaPathGenerator: function (mediaId, playlistId, readyHandler) {
        var ready = readyHandler;
        var tree = null;
        function handlePlaylist(playlist) {
            tree = playlist;
            ready();
        }
        function handlePlaylistError() {
            tree = null;
            ready();
        }
        if (mediaId == null && playlistId == null) {
            ready();
        }
        else {
            // Get root playlist tree for either playlist or media id.
            if (playlistId != null) {
                MOVIDEO.media.getFirstRootPlaylistForPlaylist({
                    id: playlistId,
                    depth: 10,
                    omit: true,
                    handler: handlePlaylist,
                    errorHandler: handlePlaylistError
                });
            }
            else if (mediaId != null) {
                MOVIDEO.media.getFirstRootPlaylistForMedia({
                    id: mediaId,
                    depth: 10,
                    omit: true,
                    includeMedia: false,
                    handler: handlePlaylist,
                    errorHandler: handlePlaylistError
                });
            }
        }
        return {
            /**
            * Externally visible method. Combines the tree playlist playlist:code tags with the media
            * item's clip:code tag to form OAS friendly media path
            */
            getOASMediaPath: function (media) {
                var path = [];
                // First attempt to find the playlist path from the vastMediaTag value
                var tc = (videoSettings.vastMediaTag || "").split(":");
                var tagValue;
                if (tc.length == 2 && (tagValue = MOVIDEO.utils.getTagValue(media.tags, tc[0], tc[1]))) {
                    path.push(tagValue);
                } else if (tree) {
                    // Otherwise resort to the playlist tree
                    var node = tree;
                    while (node) {
                        path.push(MOVIDEO.utils.getTagValue(node.tags, "playlist", "code"));
                        node = node.childPlaylists ? node.childPlaylists.playlist : null;
                    }
                }
                path.push(MOVIDEO.utils.getTagValue(media.tags, "clip", "code"));
                if (location.href.indexOf('debug=true') > -1) { console.log('AD CALL PATH = ' + path.join("/")); }
                return path.join("/");
            }
        }
    }
};
