/*
 * Marquee jQuery Plug-in
 *
 * Copyright 2009 Giva, Inc. (http://www.givainc.com/labs/) 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * 	http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Date: 2009-05-20
 * Rev:  1.0.01
 */
(function(A) {
  A.marquee = {
    version: "1.0.01"
  };
  A.fn.marquee = function(E) {
    var F = typeof arguments[0] == "string" && arguments[0];
    var D = F && Array.prototype.slice.call(arguments, 1) || arguments;
    var C = (this.length == 0) ? null : A.data(this[0], "marquee");
    if (C && F && this.length) {
      if (F.toLowerCase() == "object") {
        return C
      } else {
        if (C[F]) {
          var B;
          this.each(function(G) {
            var H = A.data(this, "marquee")[F].apply(C, D);
            if (G == 0 && H) {
              if ( !! H.jquery) {
                B = A([]).add(H)
              } else {
                B = H;
                return false
              }
            } else {
              if ( !! H && !! H.jquery) {
                B = B.add(H)
              }
            }
          });
          return B || this
        } else {
          return this
        }
      }
    } else {
      return this.each(function() {
        new A.Marquee(this, E)
      })
    }
  };
  A.Marquee = function(E, Q) {
    Q = A.extend({}, A.Marquee.defaults, Q);
    var O = this,
        M = A(E),
        F = M.find("> li"),
        H = -1,
        G = false,
        L = false,
        N = 0;
    A.data(M[0], "marquee", O);
    this.pause = function() {
      G = true;
      P()
    };
    this.resume = function() {
      G = false;
      D()
    };
    this.update = function() {
      var R = F.length;
      F = M.find("> li");
      if (R <= 1) {
        D()
      }
    };

    function K(R) {
      if (F.filter("." + Q.cssShowing).length > 0) {
        return false
      }
      var T = F.eq(R);
      if (A.isFunction(Q.beforeshow)) {
        Q.beforeshow.apply(O, [M, T])
      }
      var S = {
        top: (Q.yScroll == "top" ? "-" : "+") + T.outerHeight() + "px",
        left: 0
      };
      M.data("marquee.showing", true);
      T.addClass(Q.cssShowing);
      T.css(S).animate({
        top: "0px"
      }, Q.showSpeed, Q.fxEasingShow, function() {
        if (A.isFunction(Q.show)) {
          Q.show.apply(O, [M, T])
        }
        M.data("marquee.showing", false);
        J(T)
      })
    }
    function J(S, R) {
      if (L == true) {
        return false
      }
      R = R || Q.pauseSpeed;
      if (C(S)) {
        setTimeout(function() {
          if (L == true) {
            return false
          }
          var V = S.outerWidth(),
              T = V * -1,
              U = parseInt(S.css("left"), 10);
          S.animate({
            left: T + "px"
          }, ((V + U) * Q.scrollSpeed), Q.fxEasingScroll, function() {
            I(S)
          })
        }, R)
      } else {
        if (F.length > 1) {
          setTimeout(function() {
            if (L == true) {
              return false
            }
            S.animate({
              top: (Q.yScroll == "top" ? "+" : "-") + M.innerHeight() + "px"
            }, Q.showSpeed, Q.fxEasingScroll);
            I(S)
          }, R)
        }
      }
    }
    function I(R) {
      if (A.isFunction(Q.aftershow)) {
        Q.aftershow.apply(O, [M, R])
      }
      R.removeClass(Q.cssShowing);
      B()
    }
    function P() {
      L = true;
      if (M.data("marquee.showing") != true) {
        F.filter("." + Q.cssShowing).dequeue().stop()
      }
    }
    function D() {
      L = false;
      if (M.data("marquee.showing") != true) {
        J(F.filter("." + Q.cssShowing), 1)
      }
    }
    if (Q.pauseOnHover) {
      M.hover(function() {
        if (G) {
          return false
        }
        P()
      }, function() {
        if (G) {
          return false
        }
        D()
      })
    }
    function C(R) {
      return (R.outerWidth() > M.innerWidth())
    }
    function B() {
      H++;
      if (H >= F.length) {
        if (!isNaN(Q.loop) && Q.loop > 0 && (++N >= Q.loop)) {
          return false
        }
        H = 0
      }
      K(H)
    }
    if (A.isFunction(Q.init)) {
      Q.init.apply(O, [M, Q])
    }
    B()
  };
  A.Marquee.defaults = {
    yScroll: "top",
    showSpeed: 850,
    scrollSpeed: 30,
    pauseSpeed: 1000,
    pauseOnHover: true,
    loop: -1,
    fxEasingShow: "swing",
    fxEasingScroll: "linear",
    cssShowing: "marquee-showing",
    init: null,
    beforeshow: null,
    show: null,
    aftershow: null
  }
})(jQuery);


(function($) {
/*
		jquery.twitter.js v1.5
		Last updated: 08 July 2009

		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) {

    $.fn.getTwitter.defaults = {
      userName: null,
      numTweets: 15,
      loaderText: "Loading tweets...",
      slideIn: true,
      slideDuration: 750,
      showHeading: true,
      headingText: "Latest Tweets",
      showProfileLink: true,
      showTimestamp: true
    };

    var o = $.extend({}, $.fn.getTwitter.defaults, options);

    return this.each(function() {
      var c = $(this);

      // hide container element, remove alternative content, and add class
      c.hide().empty().addClass("twitted");

      // add heading to container element
      if (o.showHeading) {
        c.append("<h2>" + o.headingText + "</h2>");
      }

      // add twitter list to container element
      var twitterListHTML = "<div id=\"twitter_update_list\"></div>";
      c.append(twitterListHTML);

      var tl = $("#twitter_update_list");

      // hide twitter list
      tl.hide();

      // add preLoader to container element
      var preLoaderHTML = $("<div class=\"preLoader\">" + o.loaderText + "</div>");
      c.append(preLoaderHTML);

      // add Twitter profile link to container element
      if (o.showProfileLink) {
        var profileLinkHTML = "";
        c.append(profileLinkHTML);
      }

      // show container element
      c.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
        $(preLoaderHTML).remove();

        // remove timestamp and move to title of list item
        if (!o.showTimestamp) {
          tl.find("li").each(function() {
            var timestampHTML = $(this).children("a");
            var timestamp = timestampHTML.html();
            timestampHTML.remove();
            $(this).attr("title", timestamp);
          });
        }

        // show twitter list
        if (o.slideIn) {
          // a fix for the jQuery slide effect
          // Hat-tip: http://blog.pengoworks.com/index.cfm/2009/4/21/Fixing-jQuerys-slideDown-effect-ie-Jumpy-Animation
          var tlHeight = tl.data("originalHeight");

          // get the original height
          if (!tlHeight) {
            tlHeight = tl.show().height();
            tl.data("originalHeight", tlHeight);
            tl.hide().css({
              height: 0
            });
          }

          tl.show().animate({
            height: tlHeight
          }, o.slideDuration);
        } else {
          tl.show();
        }

        // add unique class to first list item
        tl.find("p:first").addClass("firstTweet");

        // add unique class to last list item
        tl.find("p:last").addClass("lastTweet");

      });
    });
  };


})(jQuery);
