// remap jQuery to $
(function ($) {

    /*
     * jQuery Nivo Slider v2.4
     * http://nivo.dev7studios.com
     *
     * Copyright 2011, Gilbert Pellegrom
     * Free to use and abuse under the MIT license.
     * http://www.opensource.org/licenses/mit-license.php
     */

    (function (a) {
			   
        var A = function (s, v) {
                var f = a.extend({}, a.fn.nivoSlider.defaults, v),
                    g = {
                        currentSlide: 0,
                        currentImage: "",
                        totalSlides: 0,
                        randAnim: "",
                        running: false,
                        paused: false,
                        stop: false
                    },
                    e = a(s);					
                e.data("nivo:vars", g);
                e.css("position", "relative");
                e.addClass("nivoSlider");

				$(".loader").show();			

                var j = e.children();				
                j.each(function () {
                    var b = a(this),
                        h = "";
                    if (!b.is("img")) {
                        if (b.is("a")) {
                            b.addClass("nivo-imageLink");
                            h = b
                        }
                        b = b.find("img:first")
                    }
                    var c = b.width();
                    if (c == 0) c = b.attr("width");
                    /*var o = b.height();					
                    if (o == 0) o = b.attr("height");*/
					var o = 378;
                    if (o == 0) o =378;
                    c > e.width() && e.width(c);
                    o > e.height() && e.height(o);					
                    h != "" && h.css("display", "none");
					$(".loader").css("display","block");
                    b.css("display", "none");
                    g.totalSlides++
                });
				$(".loader").hide();				
                if (f.startSlide > 0) {					
                    if (f.startSlide >= g.totalSlides) f.startSlide = g.totalSlides - 1;
                    g.currentSlide = f.startSlide					
                }
                g.currentImage = a(j[g.currentSlide]).is("img") ? a(j[g.currentSlide]) : a(j[g.currentSlide]).find("img:first");
                a(j[g.currentSlide]).is("a") && a(j[g.currentSlide]).css("display", "block");
                e.css("background", 'url("' + g.currentImage.attr("src") + '") no-repeat');
                for (var k = 0; k < f.slices; k++) {
                    var p = Math.round(e.width() / f.slices);
                    k == f.slices - 1 ? e.append(a('<div class="nivo-slice"></div>').css({
                        left: p * k + "px",
                        width: e.width() - p * k + "px"
                    })) : e.append(a('<div class="nivo-slice"></div>').css({
                        left: p * k + "px",
                        width: p + "px"
                    }))
                }
                e.append(a('<div class="nivo-caption"><p></p></div>').css({
                    display: "none",
                    opacity: f.captionOpacity
                }));
                if (g.currentImage.attr("title") != "") {
                    k = g.currentImage.attr("title");					
                    if (k.substr(0, 1) == "#") k = a(k).html();					
                    a(".nivo-caption p", e).html(k);
                    a(".nivo-caption", e).fadeIn(f.animSpeed)					
                }
                var l = 0;
				var curr=0;
				f.manualAdvance=true; /* Manually stop the auto play by infowave*/
                if (!f.manualAdvance && j.length > 1) l = setInterval(function () {
			
                    r(e, j, f, false)
                }, f.pauseTime);
                if (f.directionNav) {
					var load_temp=curr;
					if(j.length>0)
					{                    	
						var load_next_temp;
						load_next_temp=load_temp;
						if(j.length==load_next_temp){
							
							e.append('<div class="nivo-directionNav" ><a class="nivo-prevNav" title="prev" style="margin-left:2px;"><img src="images/prev_arrow.png"></a></div>');
						}else{					
							if(j.length>1)
							{	
								e.append('<div class="nivo-directionNav" ><a class="nivo-nextNav" style="position:absolute; display:block; margin-right:83px;" title="next"><img src="images/next_arrow.png"></a></div>');	
							}
							else
							{
								e.append('<div class="nivo-directionNav" ></div>');	
							
							}
						}						
					}
					else
					{
						e.append('<div class="nivo-directionNav" ></div>');
					}
                    if (f.directionNavHide) {
                        a(".nivo-directionNav", e).show();
                        e.hover(function () {
                            a(".nivo-directionNav", e).show()
                        }, function () {
                            a(".nivo-directionNav", e).hide()
                        })
                    }
					var l_count=0;
					var r_count=0;
					
                    a("a.nivo-prevNav", e).live("click", function () {      
																   
						if(curr>0)
						{
							if (g.running) return false;
							clearInterval(l);
							l = "";
							g.currentSlide -= 2;						
							r(e, j, f, "prev")
							if(j.length>curr){
								e.append('<div class="nivo-directionNav" ><a class="nivo-nextNav" style="position:absolute; display:block; margin-right:83px;" title="next"><img src="images/next_arrow.png"></a></div>');								
							}
							if(curr==0)
							{								
								$('.nivo-prevNav').hide();	
								
							}
						}
						
						
                    });
                    a("a.nivo-nextNav", e).live("click", function () {                        						
						var temp=curr+1;
						if(j.length>temp)
						{
							var next_temp=temp+1;	
							if (g.running) return false;
							clearInterval(l);
							l = "";
							r(e, j, f, "next")
							if(j.length==next_temp){
								$('.nivo-nextNav').hide();
								e.append('<div class="nivo-directionNav" ><a class="nivo-prevNav" title="prev" style="margin-left:2px;"><img src="images/prev_arrow.png"></a></div>');
							}else{
								e.append('<div class="nivo-directionNav" ><a class="nivo-prevNav" title="prev" style="margin-left:2px;"><img src="images/prev_arrow.png"></a></div>');
							}
								
						}
						
                    })
                }
                if (f.controlNav) {
                    p = a('<div class="nivo-controlNav"></div>');
                    e.append(p);
                    for (k = 0; k < j.length; k++) if (f.controlNavThumbs) {
                        var t = j.eq(k);						
                        t.is("img") || (t = t.find("img:first"));
                        f.controlNavThumbsFromRel ? p.append('<a class="nivo-control" rel="' + k + '"><img src="' + t.attr("rel") + '" alt="" /></a>') : p.append('<a class="nivo-control" rel="' + k + '"><img src="' + t.attr("src").replace(f.controlNavThumbsSearch, f.controlNavThumbsReplace) + '" alt="" /></a>')
                    } else p.append('<a class="nivo-control" rel="' + k + '">' + (k + 1) + "</a>");
                    a(".nivo-controlNav a:eq(" + g.currentSlide + ")", e).addClass("active");
                    a(".nivo-controlNav a", e).live("click", function () {
                        if (g.running) return false;
                        if (a(this).hasClass("active")) return false;
                        clearInterval(l);
                        l = "";
                        e.css("background", 'url("' + g.currentImage.attr("src") + '") no-repeat');
                        g.currentSlide = a(this).attr("rel") - 1;
                        r(e, j, f, "control")
                    })
                }
                f.keyboardNav && a(window).keypress(function (b) {
                    /*if (b.keyCode == "37") {
                        if(curr>0)
						{
							if (g.running) return false;
							clearInterval(l);
							l = "";
							g.currentSlide -= 2;
							r(e, j, f, "prev")
						}
                    }
                    if (b.keyCode == "39") {
                       	if(j.length>curr)
						{
					   		if (g.running) return false;
                        	clearInterval(l);
                        	l = "";
                        	r(e, j, f, "next")
						}
                    }*/
                });
                f.pauseOnHover && e.hover(function () {
                    g.paused = true;
                    clearInterval(l);
                    l = ""
                }, function () {
                    g.paused = false;
                    if (l == "" && !f.manualAdvance) l = setInterval(function () {
                        r(e, j, f, false)
                    }, f.pauseTime)
                });
                e.bind("nivo:animFinished", function () {
                    g.running = false;
                    a(j).each(function () {
                        a(this).is("a") && a(this).css("display", "none")
                    });
                    a(j[g.currentSlide]).is("a") && a(j[g.currentSlide]).css("display", "block");
                    if (l == "" && !g.paused && !f.manualAdvance) l = setInterval(function () {
                        r(e, j, f, false)
                    }, f.pauseTime);
                    f.afterChange.call(this)
                });
                var w = function (b, h) {
                        var c = 0;
                        a(".nivo-slice", b).each(function () {
                            var o = a(this),
                                d = Math.round(b.width() / h.slices);
                            c == h.slices - 1 ? o.css("width", b.width() - d * c + "px") : o.css("width", d + "px");
                            c++
                        })
                    },
                    r = function (b, h, c, o) {
                        var d = b.data("nivo:vars");
                        d && d.currentSlide == d.totalSlides - 1 && c.lastSlide.call(this);
                        if ((!d || d.stop) && !o) return false;
                        c.beforeChange.call(this);
                        if (o) {
                            o == "prev" && b.css("background", 'url("' + d.currentImage.attr("src") + '") no-repeat');
                            o == "next" && b.css("background", 'url("' + d.currentImage.attr("src") + '") no-repeat')
                        } else b.css("background", 'url("' + d.currentImage.attr("src") + '") no-repeat');
                        d.currentSlide++;
						curr=d.currentSlide;
                        if (d.currentSlide == d.totalSlides) {
                            d.currentSlide = 0;
                            c.slideshowEnd.call(this)
                        }
                        if (d.currentSlide < 0) d.currentSlide = d.totalSlides - 1;
                        d.currentImage = a(h[d.currentSlide]).is("img") ? a(h[d.currentSlide]) : a(h[d.currentSlide]).find("img:first");
                        if (c.controlNav) {
                            a(".nivo-controlNav a", b).removeClass("active");
                            a(".nivo-controlNav a:eq(" + d.currentSlide + ")", b).addClass("active")
                        }
                        if (d.currentImage.attr("title") != "") {
                            var u = d.currentImage.attr("title");
                            if (u.substr(0, 1) == "#") u = a(u).html();
                            a(".nivo-caption", b).css("display") == "block" ? a(".nivo-caption p", b).fadeOut(c.animSpeed, function () {
                                a(this).html(u);
                                a(this).fadeIn(c.animSpeed)
                            }) : a(".nivo-caption p", b).html(u);
                            a(".nivo-caption", b).fadeIn(c.animSpeed)
                        } else a(".nivo-caption", b).fadeOut(c.animSpeed);
                        var m = 0;
                        a(".nivo-slice", b).each(function () {
                            var i = Math.round(b.width() / c.slices);
                            a(this).css({
                                height: "0px",
                                opacity: "0",
                                background: 'url("' + d.currentImage.attr("src") + '") no-repeat -' + (i + m * i - i) + "px 0%"
                            });
                            m++
                        });
                        if (c.effect == "random") {
                            h = ["sliceDownRight", "sliceDownLeft", "sliceUpRight", "sliceUpLeft", "sliceUpDown", "sliceUpDownLeft", "fold", "fade", "slideInRight", "slideInLeft"];
                            d.randAnim = h[Math.floor(Math.random() * (h.length + 1))];
                            if (d.randAnim == undefined) d.randAnim = "fade"
                        }
                        if (c.effect.indexOf(",") != -1) {
                            h = c.effect.split(",");
                            d.randAnim = h[Math.floor(Math.random() * h.length)];
                            if (d.randAnim == undefined) d.randAnim = "fade"
                        }
                        d.running = true;
                        if (c.effect == "sliceDown" || c.effect == "sliceDownRight" || d.randAnim == "sliceDownRight" || c.effect == "sliceDownLeft" || d.randAnim == "sliceDownLeft") {
                            var n = 0;
                            m = 0;
                            w(b, c);
                            h = a(".nivo-slice", b);
                            if (c.effect == "sliceDownLeft" || d.randAnim == "sliceDownLeft") h = a(".nivo-slice", b)._reverse();
                            h.each(function () {
                                var i = a(this);
                                i.css({
                                    top: "0px"
                                });
                                m == c.slices - 1 ? setTimeout(function () {
                                    i.animate({
                                        height: "100%",
                                        opacity: "1.0"
                                    }, c.animSpeed, "", function () {
                                        b.trigger("nivo:animFinished")
                                    })
                                }, 100 + n) : setTimeout(function () {
                                    i.animate({
                                        height: "100%",
                                        opacity: "1.0"
                                    }, c.animSpeed)
                                }, 100 + n);
                                n += 50;
                                m++
                            })
                        } else if (c.effect == "sliceUp" || c.effect == "sliceUpRight" || d.randAnim == "sliceUpRight" || c.effect == "sliceUpLeft" || d.randAnim == "sliceUpLeft") {
                            m = n = 0;
                            w(b, c);
                            h = a(".nivo-slice", b);
                            if (c.effect == "sliceUpLeft" || d.randAnim == "sliceUpLeft") h = a(".nivo-slice", b)._reverse();
                            h.each(function () {
                                var i = a(this);
                                i.css({
                                    bottom: "0px"
                                });
                                m == c.slices - 1 ? setTimeout(function () {
                                    i.animate({
                                        height: "100%",
                                        opacity: "1.0"
                                    }, c.animSpeed, "", function () {
                                        b.trigger("nivo:animFinished")
                                    })
                                }, 100 + n) : setTimeout(function () {
                                    i.animate({
                                        height: "100%",
                                        opacity: "1.0"
                                    }, c.animSpeed)
                                }, 100 + n);
                                n += 50;
                                m++
                            })
                        } else if (c.effect == "sliceUpDown" || c.effect == "sliceUpDownRight" || d.randAnim == "sliceUpDown" || c.effect == "sliceUpDownLeft" || d.randAnim == "sliceUpDownLeft") {
                            var x = m = n = 0;
                            w(b, c);
                            h = a(".nivo-slice", b);
                            if (c.effect == "sliceUpDownLeft" || d.randAnim == "sliceUpDownLeft") h = a(".nivo-slice", b)._reverse();
                            h.each(function () {
                                var i = a(this);
                                if (m == 0) {
                                    i.css("top", "0px");
                                    m++
                                } else {
                                    i.css("bottom", "0px");
                                    m = 0
                                }
                                x == c.slices - 1 ? setTimeout(function () {
                                    i.animate({
                                        height: "100%",
                                        opacity: "1.0"
                                    }, c.animSpeed, "", function () {
                                        b.trigger("nivo:animFinished")
                                    })
                                }, 100 + n) : setTimeout(function () {
                                    i.animate({
                                        height: "100%",
                                        opacity: "1.0"
                                    }, c.animSpeed)
                                }, 100 + n);
                                n += 50;
                                x++
                            })
                        } else if (c.effect == "fold" || d.randAnim == "fold") {
                            m = n = 0;
                            w(b, c);
                            a(".nivo-slice", b).each(function () {
                                var i = a(this),
                                    y = i.width();
                                i.css({
                                    top: "0px",
                                    height: "100%",
                                    width: "0px"
                                });
                                m == c.slices - 1 ? setTimeout(function () {
                                    i.animate({
                                        width: y,
                                        opacity: "1.0"
                                    }, c.animSpeed, "", function () {
                                        b.trigger("nivo:animFinished")
                                    })
                                }, 100 + n) : setTimeout(function () {
                                    i.animate({
                                        width: y,
                                        opacity: "1.0"
                                    }, c.animSpeed)
                                }, 100 + n);
                                n += 50;
                                m++
                            })
                        } else if (c.effect == "fade" || d.randAnim == "fade") {
                            var q = a(".nivo-slice:first", b);
                            q.css({
                                height: "100%",
                                width: b.width() + "px"
                            });
                            q.animate({
                                opacity: "1.0"
                            }, c.animSpeed * 2, "", function () {
                                b.trigger("nivo:animFinished")
                            })
                        } else if (c.effect == "slideInRight" || d.randAnim == "slideInRight") {
                            q = a(".nivo-slice:first", b);
                            q.css({
                                height: "100%",
                                width: "0px",
                                opacity: "1"
                            });
                            q.animate({
                                width: b.width() + "px"
                            }, c.animSpeed * 2, "", function () {
                                b.trigger("nivo:animFinished")
                            })
                        } else if (c.effect == "slideInLeft" || d.randAnim == "slideInLeft") {
                            q = a(".nivo-slice:first", b);
                            q.css({
                                height: "100%",
                                width: "0px",
                                opacity: "1",
                                left: "",
                                right: "0px"
                            });
                            q.animate({
                                width: b.width() + "px"
                            }, c.animSpeed * 2, "", function () {
                                q.css({
                                    left: "0px",
                                    right: ""
                                });
                                b.trigger("nivo:animFinished")
                            })
                        }
                    },
                    z = function (b) {
                        this.console && typeof console.log != "undefined" && console.log(b)
                    };
                this.stop = function () {
                    if (!a(s).data("nivo:vars").stop) {
                        a(s).data("nivo:vars").stop = true;
                        z("Stop Slider")
                    }
                };
                this.start = function () {
                    if (a(s).data("nivo:vars").stop) {
                        a(s).data("nivo:vars").stop = false;
                        z("Start Slider")
                    }
                };
                f.afterLoad.call(this)
            };
        a.fn.nivoSlider = function (s) {
            return this.each(function () {
                var v = a(this);
                if (!v.data("nivoslider")) {
                    var f = new A(this, s);
                    v.data("nivoslider", f)
                }
            })
        };
        a.fn.nivoSlider.defaults = {
            effect: "random",
            slices: 15,
            animSpeed: 500,
            pauseTime: 3E3,
            startSlide: 0,
            directionNav: true,
            directionNavHide: true,
            controlNav: true,
            controlNavThumbs: false,
            controlNavThumbsFromRel: false,
            controlNavThumbsSearch: ".jpg",
            controlNavThumbsReplace: "_thumb.jpg",
            keyboardNav: false,
            pauseOnHover: true,
            manualAdvance: false,
            captionOpacity: 0.8,
            beforeChange: function () {},
            afterChange: function () {},
            slideshowEnd: function () {},
            lastSlide: function () {},
            afterLoad: function () {}
        };
        a.fn._reverse = [].reverse
    })(jQuery);

    /* End of Nivo Slider */


    /**
     * hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+
     * <http://cherne.net/brian/resources/jquery.hoverIntent.html>
     *
     * @param  f  onMouseOver function || An object with configuration options
     * @param  g  onMouseOut function  || Nothing (use configuration options object)
     * @author    Brian Cherne brian(at)cherne(dot)net
     */
    (function ($) {
        $.fn.hoverIntent = function (f, g) {
            var cfg = {
                sensitivity: 7,
                interval: 100,
                timeout: 0
            };
            cfg = $.extend(cfg, g ? {
                over: f,
                out: g
            } : f);
            var cX, cY, pX, pY;
            var track = function (ev) {
                    cX = ev.pageX;
                    cY = ev.pageY
                };
            var compare = function (ev, ob) {
                    ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
                    if ((Math.abs(pX - cX) + Math.abs(pY - cY)) < cfg.sensitivity) {
                        $(ob).unbind("mousemove", track);
                        ob.hoverIntent_s = 1;
                        return cfg.over.apply(ob, [ev])
                    } else {
                        pX = cX;
                        pY = cY;
                        ob.hoverIntent_t = setTimeout(function () {
                            compare(ev, ob)
                        }, cfg.interval)
                    }
                };
            var delay = function (ev, ob) {
                    ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
                    ob.hoverIntent_s = 0;
                    return cfg.out.apply(ob, [ev])
                };
            var handleHover = function (e) {
                    var ev = jQuery.extend({}, e);
                    var ob = this;
                    if (ob.hoverIntent_t) {
                        ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t)
                    }
                    if (e.type == "mouseenter") {
                        pX = ev.pageX;
                        pY = ev.pageY;
                        $(ob).bind("mousemove", track);
                        if (ob.hoverIntent_s != 1) {
                            ob.hoverIntent_t = setTimeout(function () {
                                compare(ev, ob)
                            }, cfg.interval)
                        }
                    } else {
                        $(ob).unbind("mousemove", track);
                        if (ob.hoverIntent_s == 1) {
                            ob.hoverIntent_t = setTimeout(function () {
                                delay(ev, ob)
                            }, cfg.timeout)
                        }
                    }
                };
            return this.bind('mouseenter', handleHover).bind('mouseleave', handleHover)
        }
    })(jQuery);


    /*
     * jQuery Cycle Plugin (with Transition Definitions)
     * Examples and documentation at: http://jquery.malsup.com/cycle/
     * Copyright (c) 2007-2010 M. Alsup
     * Version: 2.97 (14-FEB-2011)
     * Dual licensed under the MIT and GPL licenses.
     * http://jquery.malsup.com/license.html
     * Requires: jQuery v1.3.2 or later
     */
    ;
    (function ($) {
        var ver = "2.97";
        if ($.support == undefined) {
            $.support = {
                opacity: !($.browser.msie)
            };
        }
        function debug(s) {
            $.fn.cycle.debug && log(s);
        }
        function log() {
            window.console && console.log && console.log("[cycle] " + Array.prototype.join.call(arguments, " "));
        }
        $.expr[":"].paused = function (el) {
            return el.cyclePause;
        };
        $.fn.cycle = function (options, arg2) {
            var o = {
                s: this.selector,
                c: this.context
            };
            if (this.length === 0 && options != "stop") {
                if (!$.isReady && o.s) {
                    log("DOM not ready, queuing slideshow");
                    $(function () {
                        $(o.s, o.c).cycle(options, arg2);
                    });
                    return this;
                }
                log("terminating; zero elements found by selector" + ($.isReady ? "" : " (DOM not ready)"));
                return this;
            }
            return this.each(function () {
                var opts = handleArguments(this, options, arg2);
                if (opts === false) {
                    return;
                }
                opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
                if (this.cycleTimeout) {
                    clearTimeout(this.cycleTimeout);
                }
                this.cycleTimeout = this.cyclePause = 0;
                var $cont = $(this);
                var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
                var els = $slides.get();
                if (els.length < 2) {
                    log("terminating; too few slides: " + els.length);
                    return;
                }
                var opts2 = buildOptions($cont, $slides, els, opts, o);
                if (opts2 === false) {
                    return;
                }
                var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);
                if (startTime) {
                    startTime += (opts2.delay || 0);
                    if (startTime < 10) {
                        startTime = 10;
                    }
                    debug("first timeout: " + startTime);
                    this.cycleTimeout = setTimeout(function () {
                        go(els, opts2, 0, !opts.backwards);
                    }, startTime);
                }
            });
        };

        function handleArguments(cont, options, arg2) {
            if (cont.cycleStop == undefined) {
                cont.cycleStop = 0;
            }
            if (options === undefined || options === null) {
                options = {};
            }
            if (options.constructor == String) {
                switch (options) {
                case "destroy":
                case "stop":
                    var opts = $(cont).data("cycle.opts");
                    if (!opts) {
                        return false;
                    }
                    cont.cycleStop++;
                    if (cont.cycleTimeout) {
                        clearTimeout(cont.cycleTimeout);
                    }
                    cont.cycleTimeout = 0;
                    $(cont).removeData("cycle.opts");
                    if (options == "destroy") {
                        destroy(opts);
                    }
                    return false;
                case "toggle":
                    cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
                    checkInstantResume(cont.cyclePause, arg2, cont);
                    return false;
                case "pause":
                    cont.cyclePause = 1;
                    return false;
                case "resume":
                    cont.cyclePause = 0;
                    checkInstantResume(false, arg2, cont);
                    return false;
                case "prev":
                case "next":
                    var opts = $(cont).data("cycle.opts");
                    if (!opts) {
                        log('options not found, "prev/next" ignored');
                        return false;
                    }
                    $.fn.cycle[options](opts);
                    return false;
                default:
                    options = {
                        fx: options
                    };
                }
                return options;
            } else {
                if (options.constructor == Number) {
                    var num = options;
                    options = $(cont).data("cycle.opts");
                    if (!options) {
                        log("options not found, can not advance slide");
                        return false;
                    }
                    if (num < 0 || num >= options.elements.length) {
                        log("invalid slide index: " + num);
                        return false;
                    }
                    options.nextSlide = num;
                    if (cont.cycleTimeout) {
                        clearTimeout(cont.cycleTimeout);
                        cont.cycleTimeout = 0;
                    }
                    if (typeof arg2 == "string") {
                        options.oneTimeFx = arg2;
                    }
                    go(options.elements, options, 1, num >= options.currSlide);
                    return false;
                }
            }
            return options;

            function checkInstantResume(isPaused, arg2, cont) {
                if (!isPaused && arg2 === true) {
                    var options = $(cont).data("cycle.opts");
                    if (!options) {
                        log("options not found, can not resume");
                        return false;
                    }
                    if (cont.cycleTimeout) {
                        clearTimeout(cont.cycleTimeout);
                        cont.cycleTimeout = 0;
                    }
                    go(options.elements, options, 1, !options.backwards);
                }
            }
        }
        function removeFilter(el, opts) {
            if (!$.support.opacity && opts.cleartype && el.style.filter) {
                try {
                    el.style.removeAttribute("filter");
                } catch (smother) {}
            }
        }
        function destroy(opts) {
            if (opts.next) {
                $(opts.next).unbind(opts.prevNextEvent);
            }
            if (opts.prev) {
                $(opts.prev).unbind(opts.prevNextEvent);
            }
            if (opts.pager || opts.pagerAnchorBuilder) {
                $.each(opts.pagerAnchors || [], function () {
                    this.unbind().remove();
                });
            }
            opts.pagerAnchors = null;
            if (opts.destroy) {
                opts.destroy(opts);
            }
        }
        function buildOptions($cont, $slides, els, options, o) {
            var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
            if (opts.autostop) {
                opts.countdown = opts.autostopCount || els.length;
            }
            var cont = $cont[0];
            $cont.data("cycle.opts", opts);
            opts.$cont = $cont;
            opts.stopCount = cont.cycleStop;
            opts.elements = els;
            opts.before = opts.before ? [opts.before] : [];
            opts.after = opts.after ? [opts.after] : [];
            if (!$.support.opacity && opts.cleartype) {
                opts.after.push(function () {
                    removeFilter(this, opts);
                });
            }
            if (opts.continuous) {
                opts.after.push(function () {
                    go(els, opts, 0, !opts.backwards);
                });
            }
            saveOriginalOpts(opts);
            if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) {
                clearTypeFix($slides);
            }
            if ($cont.css("position") == "static") {
                $cont.css("position", "relative");
            }
            if (opts.width) {
                $cont.width(opts.width);
            }
            if (opts.height && opts.height != "auto") {
                $cont.height(opts.height);
            }
            if (opts.startingSlide) {
                opts.startingSlide = parseInt(opts.startingSlide);
            } else {
                if (opts.backwards) {
                    opts.startingSlide = els.length - 1;
                }
            }
            if (opts.random) {
                opts.randomMap = [];
                for (var i = 0; i < els.length; i++) {
                    opts.randomMap.push(i);
                }
                opts.randomMap.sort(function (a, b) {
                    return Math.random() - 0.5;
                });
                opts.randomIndex = 1;
                opts.startingSlide = opts.randomMap[1];
            } else {
                if (opts.startingSlide >= els.length) {
                    opts.startingSlide = 0;
                }
            }
            opts.currSlide = opts.startingSlide || 0;
            var first = opts.startingSlide;
            $slides.css({
                position: "absolute",
                top: 0,
                left: 0
            }).hide().each(function (i) {
                var z;
                if (opts.backwards) {
                    z = first ? i <= first ? els.length + (i - first) : first - i : els.length - i;
                } else {
                    z = first ? i >= first ? els.length - (i - first) : first - i : els.length - i;
                }
                $(this).css("z-index", z);
            });
            $(els[first]).css("opacity", 1).show();
            removeFilter(els[first], opts);
            if (opts.fit && opts.width) {
                $slides.width(opts.width);
            }
            if (opts.fit && opts.height && opts.height != "auto") {
                $slides.height(opts.height);
            }
            var reshape = opts.containerResize && !$cont.innerHeight();
            if (reshape) {
                var maxw = 0,
                    maxh = 0;
                for (var j = 0; j < els.length; j++) {
                    var $e = $(els[j]),
                        e = $e[0],
                        w = $e.outerWidth(),
                        h = $e.outerHeight();
                    if (!w) {
                        w = e.offsetWidth || e.width || $e.attr("width");
                    }
                    if (!h) {
                        h = e.offsetHeight || e.height || $e.attr("height");
                    }
                    maxw = w > maxw ? w : maxw;
                    maxh = h > maxh ? h : maxh;
                }
                if (maxw > 0 && maxh > 0) {
                    $cont.css({
                        width: maxw + "px",
                        height: maxh + "px"
                    });
                }
            }
            if (opts.pause) {
                $cont.hover(function () {
                    this.cyclePause++;
                }, function () {
                    this.cyclePause--;
                });
            }
            if (supportMultiTransitions(opts) === false) {
                return false;
            }
            var requeue = false;
            options.requeueAttempts = options.requeueAttempts || 0;
            $slides.each(function () {
                var $el = $(this);
                this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr("height") || 0);
                this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr("width") || 0);
                if ($el.is("img")) {
                    var loadingIE = ($.browser.msie && this.cycleW == 28 && this.cycleH == 30 && !this.complete);
                    var loadingFF = ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete);
                    var loadingOp = ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete);
                    var loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete);
                    if (loadingIE || loadingFF || loadingOp || loadingOther) {
                        if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) {
                            log(options.requeueAttempts, " - img slide not loaded, requeuing slideshow: ", this.src, this.cycleW, this.cycleH);
                            setTimeout(function () {
                                $(o.s, o.c).cycle(options);
                            }, opts.requeueTimeout);
                            requeue = true;
                            return false;
                        } else {
                            log("could not determine size of image: " + this.src, this.cycleW, this.cycleH);
                        }
                    }
                }
                return true;
            });
            if (requeue) {
                return false;
            }
            opts.cssBefore = opts.cssBefore || {};
            opts.cssAfter = opts.cssAfter || {};
            opts.cssFirst = opts.cssFirst || {};
            opts.animIn = opts.animIn || {};
            opts.animOut = opts.animOut || {};
            $slides.not(":eq(" + first + ")").css(opts.cssBefore);
            $($slides[first]).css(opts.cssFirst);
            if (opts.timeout) {
                opts.timeout = parseInt(opts.timeout);
                if (opts.speed.constructor == String) {
                    opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed);
                }
                if (!opts.sync) {
                    opts.speed = opts.speed / 2;
                }
                var buffer = opts.fx == "none" ? 0 : opts.fx == "shuffle" ? 500 : 250;
                while ((opts.timeout - opts.speed) < buffer) {
                    opts.timeout += opts.speed;
                }
            }
            if (opts.easing) {
                opts.easeIn = opts.easeOut = opts.easing;
            }
            if (!opts.speedIn) {
                opts.speedIn = opts.speed;
            }
            if (!opts.speedOut) {
                opts.speedOut = opts.speed;
            }
            opts.slideCount = els.length;
            opts.currSlide = opts.lastSlide = first;
            if (opts.random) {
                if (++opts.randomIndex == els.length) {
                    opts.randomIndex = 0;
                }
                opts.nextSlide = opts.randomMap[opts.randomIndex];
            } else {
                if (opts.backwards) {
                    opts.nextSlide = opts.startingSlide == 0 ? (els.length - 1) : opts.startingSlide - 1;
                } else {
                    opts.nextSlide = opts.startingSlide >= (els.length - 1) ? 0 : opts.startingSlide + 1;
                }
            }
            if (!opts.multiFx) {
                var init = $.fn.cycle.transitions[opts.fx];
                if ($.isFunction(init)) {
                    init($cont, $slides, opts);
                } else {
                    if (opts.fx != "custom" && !opts.multiFx) {
                        log("unknown transition: " + opts.fx, "; slideshow terminating");
                        return false;
                    }
                }
            }
            var e0 = $slides[first];
            if (opts.before.length) {
                opts.before[0].apply(e0, [e0, e0, opts, true]);
            }
            if (opts.after.length > 1) {
                opts.after[1].apply(e0, [e0, e0, opts, true]);
            }
            if (opts.next) {
                $(opts.next).bind(opts.prevNextEvent, function () {
                    return advance(opts, 1);
                });
            }
            if (opts.prev) {
                $(opts.prev).bind(opts.prevNextEvent, function () {
                    return advance(opts, 0);
                });
            }
            if (opts.pager || opts.pagerAnchorBuilder) {
                buildPager(els, opts);
            }
            exposeAddSlide(opts, els);
            return opts;
        }
        function saveOriginalOpts(opts) {
            opts.original = {
                before: [],
                after: []
            };
            opts.original.cssBefore = $.extend({}, opts.cssBefore);
            opts.original.cssAfter = $.extend({}, opts.cssAfter);
            opts.original.animIn = $.extend({}, opts.animIn);
            opts.original.animOut = $.extend({}, opts.animOut);
            $.each(opts.before, function () {
                opts.original.before.push(this);
            });
            $.each(opts.after, function () {
                opts.original.after.push(this);
            });
        }
        function supportMultiTransitions(opts) {
            var i, tx, txs = $.fn.cycle.transitions;
            if (opts.fx.indexOf(",") > 0) {
                opts.multiFx = true;
                opts.fxs = opts.fx.replace(/\s*/g, "").split(",");
                for (i = 0; i < opts.fxs.length; i++) {
                    var fx = opts.fxs[i];
                    tx = txs[fx];
                    if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
                        log("discarding unknown transition: ", fx);
                        opts.fxs.splice(i, 1);
                        i--;
                    }
                }
                if (!opts.fxs.length) {
                    log("No valid transitions named; slideshow terminating.");
                    return false;
                }
            } else {
                if (opts.fx == "all") {
                    opts.multiFx = true;
                    opts.fxs = [];
                    for (p in txs) {
                        tx = txs[p];
                        if (txs.hasOwnProperty(p) && $.isFunction(tx)) {
                            opts.fxs.push(p);
                        }
                    }
                }
            }
            if (opts.multiFx && opts.randomizeEffects) {
                var r1 = Math.floor(Math.random() * 20) + 30;
                for (i = 0; i < r1; i++) {
                    var r2 = Math.floor(Math.random() * opts.fxs.length);
                    opts.fxs.push(opts.fxs.splice(r2, 1)[0]);
                }
                debug("randomized fx sequence: ", opts.fxs);
            }
            return true;
        }
        function exposeAddSlide(opts, els) {
            opts.addSlide = function (newSlide, prepend) {
                var $s = $(newSlide),
                    s = $s[0];
                if (!opts.autostopCount) {
                    opts.countdown++;
                }
                els[prepend ? "unshift" : "push"](s);
                if (opts.els) {
                    opts.els[prepend ? "unshift" : "push"](s);
                }
                opts.slideCount = els.length;
                $s.css("position", "absolute");
                $s[prepend ? "prependTo" : "appendTo"](opts.$cont);
                if (prepend) {
                    opts.currSlide++;
                    opts.nextSlide++;
                }
                if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg) {
                    clearTypeFix($s);
                }
                if (opts.fit && opts.width) {
                    $s.width(opts.width);
                }
                if (opts.fit && opts.height && opts.height != "auto") {
                    $s.height(opts.height);
                }
                s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
                s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();
                $s.css(opts.cssBefore);
                if (opts.pager || opts.pagerAnchorBuilder) {
                    $.fn.cycle.createPagerAnchor(els.length - 1, s, $(opts.pager), els, opts);
                }
                if ($.isFunction(opts.onAddSlide)) {
                    opts.onAddSlide($s);
                } else {
                    $s.hide();
                }
            };
        }
        $.fn.cycle.resetState = function (opts, fx) {
            fx = fx || opts.fx;
            opts.before = [];
            opts.after = [];
            opts.cssBefore = $.extend({}, opts.original.cssBefore);
            opts.cssAfter = $.extend({}, opts.original.cssAfter);
            opts.animIn = $.extend({}, opts.original.animIn);
            opts.animOut = $.extend({}, opts.original.animOut);
            opts.fxFn = null;
            $.each(opts.original.before, function () {
                opts.before.push(this);
            });
            $.each(opts.original.after, function () {
                opts.after.push(this);
            });
            var init = $.fn.cycle.transitions[fx];
            if ($.isFunction(init)) {
                init(opts.$cont, $(opts.elements), opts);
            }
        };

        function go(els, opts, manual, fwd) {
            if (manual && opts.busy && opts.manualTrump) {
                debug("manualTrump in go(), stopping active transition");
                $(els).stop(true, true);
                opts.busy = 0;
            }
            if (opts.busy) {
                debug("transition active, ignoring new tx request");
                return;
            }
            var p = opts.$cont[0],
                curr = els[opts.currSlide],
                next = els[opts.nextSlide];
            if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual) {
                return;
            }
            if (!manual && !p.cyclePause && !opts.bounce && ((opts.autostop && (--opts.countdown <= 0)) || (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
                if (opts.end) {
                    opts.end(opts);
                }
                return;
            }
            var changed = false;
            if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {
                changed = true;
                var fx = opts.fx;
                curr.cycleH = curr.cycleH || $(curr).height();
                curr.cycleW = curr.cycleW || $(curr).width();
                next.cycleH = next.cycleH || $(next).height();
                next.cycleW = next.cycleW || $(next).width();
                if (opts.multiFx) {
                    if (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length) {
                        opts.lastFx = 0;
                    }
                    fx = opts.fxs[opts.lastFx];
                    opts.currFx = fx;
                }
                if (opts.oneTimeFx) {
                    fx = opts.oneTimeFx;
                    opts.oneTimeFx = null;
                }
                $.fn.cycle.resetState(opts, fx);
                if (opts.before.length) {
                    $.each(opts.before, function (i, o) {
                        if (p.cycleStop != opts.stopCount) {
                            return;
                        }
                        o.apply(next, [curr, next, opts, fwd]);
                    });
                }
                var after = function () {
                        opts.busy = 0;
                        $.each(opts.after, function (i, o) {
                            if (p.cycleStop != opts.stopCount) {
                                return;
                            }
                            o.apply(next, [curr, next, opts, fwd]);
                        });
                    };
                debug("tx firing(" + fx + "); currSlide: " + opts.currSlide + "; nextSlide: " + opts.nextSlide);
                opts.busy = 1;
                if (opts.fxFn) {
                    opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
                } else {
                    if ($.isFunction($.fn.cycle[opts.fx])) {
                        $.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);
                    } else {
                        $.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
                    }
                }
            }
            if (changed || opts.nextSlide == opts.currSlide) {
                opts.lastSlide = opts.currSlide;
                if (opts.random) {
                    opts.currSlide = opts.nextSlide;
                    if (++opts.randomIndex == els.length) {
                        opts.randomIndex = 0;
                    }
                    opts.nextSlide = opts.randomMap[opts.randomIndex];
                    if (opts.nextSlide == opts.currSlide) {
                        opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
                    }
                } else {
                    if (opts.backwards) {
                        var roll = (opts.nextSlide - 1) < 0;
                        if (roll && opts.bounce) {
                            opts.backwards = !opts.backwards;
                            opts.nextSlide = 1;
                            opts.currSlide = 0;
                        } else {
                            opts.nextSlide = roll ? (els.length - 1) : opts.nextSlide - 1;
                            opts.currSlide = roll ? 0 : opts.nextSlide + 1;
                        }
                    } else {
                        var roll = (opts.nextSlide + 1) == els.length;
                        if (roll && opts.bounce) {
                            opts.backwards = !opts.backwards;
                            opts.nextSlide = els.length - 2;
                            opts.currSlide = els.length - 1;
                        } else {
                            opts.nextSlide = roll ? 0 : opts.nextSlide + 1;
                            opts.currSlide = roll ? els.length - 1 : opts.nextSlide - 1;
                        }
                    }
                }
            }
            if (changed && opts.pager) {
                opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
            }
            var ms = 0;
            if (opts.timeout && !opts.continuous) {
                ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
            } else {
                if (opts.continuous && p.cyclePause) {
                    ms = 10;
                }
            }
            if (ms > 0) {
                p.cycleTimeout = setTimeout(function () {
                    go(els, opts, 0, !opts.backwards);
                }, ms);
            }
        }
        $.fn.cycle.updateActivePagerLink = function (pager, currSlide, clsName) {
            $(pager).each(function () {
                $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
            });
        };

        function getTimeout(curr, next, opts, fwd) {
            if (opts.timeoutFn) {
                var t = opts.timeoutFn.call(curr, curr, next, opts, fwd);
                while (opts.fx != "none" && (t - opts.speed) < 250) {
                    t += opts.speed;
                }
                debug("calculated timeout: " + t + "; speed: " + opts.speed);
                if (t !== false) {
                    return t;
                }
            }
            return opts.timeout;
        }
        $.fn.cycle.next = function (opts) {
            advance(opts, 1);
        };
        $.fn.cycle.prev = function (opts) {
            advance(opts, 0);
        };

        function advance(opts, moveForward) {
            var val = moveForward ? 1 : -1;
            var els = opts.elements;
            var p = opts.$cont[0],
                timeout = p.cycleTimeout;
            if (timeout) {
                clearTimeout(timeout);
                p.cycleTimeout = 0;
            }
            if (opts.random && val < 0) {
                opts.randomIndex--;
                if (--opts.randomIndex == -2) {
                    opts.randomIndex = els.length - 2;
                } else {
                    if (opts.randomIndex == -1) {
                        opts.randomIndex = els.length - 1;
                    }
                }
                opts.nextSlide = opts.randomMap[opts.randomIndex];
            } else {
                if (opts.random) {
                    opts.nextSlide = opts.randomMap[opts.randomIndex];
                } else {
                    opts.nextSlide = opts.currSlide + val;
                    if (opts.nextSlide < 0) {
                        if (opts.nowrap) {
                            return false;
                        }
                        opts.nextSlide = els.length - 1;
                    } else {
                        if (opts.nextSlide >= els.length) {
                            if (opts.nowrap) {
                                return false;
                            }
                            opts.nextSlide = 0;
                        }
                    }
                }
            }
            var cb = opts.onPrevNextEvent || opts.prevNextClick;
            if ($.isFunction(cb)) {
                cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
            }
            go(els, opts, 1, moveForward);
            return false;
        }
        function buildPager(els, opts) {
            var $p = $(opts.pager);
            $.each(els, function (i, o) {
                $.fn.cycle.createPagerAnchor(i, o, $p, els, opts);
            });
            opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
        }
        $.fn.cycle.createPagerAnchor = function (i, el, $p, els, opts) {
            var a;
            if ($.isFunction(opts.pagerAnchorBuilder)) {
                a = opts.pagerAnchorBuilder(i, el);
                debug("pagerAnchorBuilder(" + i + ", el) returned: " + a);
            } else {
                a = '<a href="#">' + (i + 1) + "</a>";
            }
            if (!a) {
                return;
            }
            var $a = $(a);
            if ($a.parents("body").length === 0) {
                var arr = [];
                if ($p.length > 1) {
                    $p.each(function () {
                        var $clone = $a.clone(true);
                        $(this).append($clone);
                        arr.push($clone[0]);
                    });
                    $a = $(arr);
                } else {
                    $a.appendTo($p);
                }
            }
            opts.pagerAnchors = opts.pagerAnchors || [];
            opts.pagerAnchors.push($a);
            $a.bind(opts.pagerEvent, function (e) {
                e.preventDefault();
                opts.nextSlide = i;
                var p = opts.$cont[0],
                    timeout = p.cycleTimeout;
                if (timeout) {
                    clearTimeout(timeout);
                    p.cycleTimeout = 0;
                }
                var cb = opts.onPagerEvent || opts.pagerClick;
                if ($.isFunction(cb)) {
                    cb(opts.nextSlide, els[opts.nextSlide]);
                }
                go(els, opts, 1, opts.currSlide < i);
            });
            if (!/^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble) {
                $a.bind("click.cycle", function () {
                    return false;
                });
            }
            if (opts.pauseOnPagerHover) {
                $a.hover(function () {
                    opts.$cont[0].cyclePause++;
                }, function () {
                    opts.$cont[0].cyclePause--;
                });
            }
        };
        $.fn.cycle.hopsFromLast = function (opts, fwd) {
            var hops, l = opts.lastSlide,
                c = opts.currSlide;
            if (fwd) {
                hops = c > l ? c - l : opts.slideCount - l;
            } else {
                hops = c < l ? l - c : l + opts.slideCount - c;
            }
            return hops;
        };

        function clearTypeFix($slides) {
            debug("applying clearType background-color hack");

            function hex(s) {
                s = parseInt(s).toString(16);
                return s.length < 2 ? "0" + s : s;
            }
            function getBg(e) {
                for (; e && e.nodeName.toLowerCase() != "html"; e = e.parentNode) {
                    var v = $.css(e, "background-color");
                    if (v.indexOf("rgb") >= 0) {
                        var rgb = v.match(/\d+/g);
                        return "#" + hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
                    }
                    if (v && v != "transparent") {
                        return v;
                    }
                }
                return "#ffffff";
            }
            $slides.each(function () {
                $(this).css("background-color", getBg(this));
            });
        }
        $.fn.cycle.commonReset = function (curr, next, opts, w, h, rev) {
            $(opts.elements).not(curr).hide();
            if (typeof opts.cssBefore.opacity == "undefined") {
                opts.cssBefore.opacity = 1;
            }
            opts.cssBefore.display = "block";
            if (opts.slideResize && w !== false && next.cycleW > 0) {
                opts.cssBefore.width = next.cycleW;
            }
            if (opts.slideResize && h !== false && next.cycleH > 0) {
                opts.cssBefore.height = next.cycleH;
            }
            opts.cssAfter = opts.cssAfter || {};
            opts.cssAfter.display = "none";
            $(curr).css("zIndex", opts.slideCount + (rev === true ? 1 : 0));
            $(next).css("zIndex", opts.slideCount + (rev === true ? 0 : 1));
        };
        $.fn.cycle.custom = function (curr, next, opts, cb, fwd, speedOverride) {
            var $l = $(curr),
                $n = $(next);
            var speedIn = opts.speedIn,
                speedOut = opts.speedOut,
                easeIn = opts.easeIn,
                easeOut = opts.easeOut;
            $n.css(opts.cssBefore);
            if (speedOverride) {
                if (typeof speedOverride == "number") {
                    speedIn = speedOut = speedOverride;
                } else {
                    speedIn = speedOut = 1;
                }
                easeIn = easeOut = null;
            }
            var fn = function () {
                    $n.animate(opts.animIn, speedIn, easeIn, function () {
                        cb();
                    });
                };
            $l.animate(opts.animOut, speedOut, easeOut, function () {
                $l.css(opts.cssAfter);
                if (!opts.sync) {
                    fn();
                }
            });
            if (opts.sync) {
                fn();
            }
        };
        $.fn.cycle.transitions = {
            fade: function ($cont, $slides, opts) {
                $slides.not(":eq(" + opts.currSlide + ")").css("opacity", 0);
                opts.before.push(function (curr, next, opts) {
                    $.fn.cycle.commonReset(curr, next, opts);
                    opts.cssBefore.opacity = 0;
                });
                opts.animIn = {
                    opacity: 1
                };
                opts.animOut = {
                    opacity: 0
                };
                opts.cssBefore = {
                    top: 0,
                    left: 0
                };
            }
        };
        $.fn.cycle.ver = function () {
            return ver;
        };
        $.fn.cycle.defaults = {
            activePagerClass: "activeSlide",
            after: null,
            allowPagerClickBubble: false,
            animIn: null,
            animOut: null,
            autostop: 0,
            autostopCount: 0,
            backwards: false,
            before: null,
            cleartype: !$.support.opacity,
            cleartypeNoBg: false,
            containerResize: 1,
            continuous: 0,
            cssAfter: null,
            cssBefore: null,
            delay: 0,
            easeIn: null,
            easeOut: null,
            easing: null,
            end: null,
            fastOnEvent: 0,
            fit: 0,
            fx: "fade",
            fxFn: null,
            height: "auto",
            manualTrump: true,
            next: null,
            nowrap: 0,
            onPagerEvent: null,
            onPrevNextEvent: null,
            pager: null,
            pagerAnchorBuilder: null,
            pagerEvent: "click.cycle",
            pause: 0,
            pauseOnPagerHover: 0,
            prev: null,
            prevNextEvent: "click.cycle",
            random: 0,
            randomizeEffects: 1,
            requeueOnImageNotLoaded: true,
            requeueTimeout: 250,
            rev: 0,
            shuffle: null,
            slideExpr: null,
            slideResize: 1,
            speed: 1000,
            speedIn: null,
            speedOut: null,
            startingSlide: 0,
            sync: 1,
            timeout: 4000,
            timeoutFn: null,
            updateActivePagerLink: null
        };
    })(jQuery);
    /*
     * jQuery Cycle Plugin Transition Definitions
     * This script is a plugin for the jQuery Cycle Plugin
     * Examples and documentation at: http://malsup.com/jquery/cycle/
     * Copyright (c) 2007-2010 M. Alsup
     * Version:	 2.73
     * Dual licensed under the MIT and GPL licenses:
     * http://www.opensource.org/licenses/mit-license.php
     * http://www.gnu.org/licenses/gpl.html
     */
    ;
    (function ($) {
        $.fn.cycle.transitions.none = function ($cont, $slides, opts) {
            opts.fxFn = function (curr, next, opts, after) {
                $(next).show();
                $(curr).hide();
                after();
            };
        };
        $.fn.cycle.transitions.fadeout = function ($cont, $slides, opts) {
            $slides.not(":eq(" + opts.currSlide + ")").css({
                display: "block",
                opacity: 1
            });
            opts.before.push(function (curr, next, opts, w, h, rev) {
                $(curr).css("zIndex", opts.slideCount + (!rev === true ? 1 : 0));
                $(next).css("zIndex", opts.slideCount + (!rev === true ? 0 : 1));
            });
            opts.animIn.opacity = 1;
            opts.animOut.opacity = 0;
            opts.cssBefore.opacity = 1;
            opts.cssBefore.display = "block";
            opts.cssAfter.zIndex = 0;
        };
        $.fn.cycle.transitions.scrollUp = function ($cont, $slides, opts) {
            $cont.css("overflow", "hidden");
            opts.before.push($.fn.cycle.commonReset);
            var h = $cont.height();
            opts.cssBefore.top = h;
            opts.cssBefore.left = 0;
            opts.cssFirst.top = 0;
            opts.animIn.top = 0;
            opts.animOut.top = -h;
        };
        $.fn.cycle.transitions.scrollDown = function ($cont, $slides, opts) {
            $cont.css("overflow", "hidden");
            opts.before.push($.fn.cycle.commonReset);
            var h = $cont.height();
            opts.cssFirst.top = 0;
            opts.cssBefore.top = -h;
            opts.cssBefore.left = 0;
            opts.animIn.top = 0;
            opts.animOut.top = h;
        };
        $.fn.cycle.transitions.scrollLeft = function ($cont, $slides, opts) {
            $cont.css("overflow", "hidden");
            opts.before.push($.fn.cycle.commonReset);
            var w = $cont.width();
            opts.cssFirst.left = 0;
            opts.cssBefore.left = w;
            opts.cssBefore.top = 0;
            opts.animIn.left = 0;
            opts.animOut.left = 0 - w;
        };
        $.fn.cycle.transitions.scrollRight = function ($cont, $slides, opts) {
            $cont.css("overflow", "hidden");
            opts.before.push($.fn.cycle.commonReset);
            var w = $cont.width();
            opts.cssFirst.left = 0;
            opts.cssBefore.left = -w;
            opts.cssBefore.top = 0;
            opts.animIn.left = 0;
            opts.animOut.left = w;
        };
        $.fn.cycle.transitions.scrollHorz = function ($cont, $slides, opts) {
            $cont.css("overflow", "hidden").width();
            opts.before.push(function (curr, next, opts, fwd) {
                if (opts.rev) {
                    fwd = !fwd;
                }
                $.fn.cycle.commonReset(curr, next, opts);
                opts.cssBefore.left = fwd ? (next.cycleW - 1) : (1 - next.cycleW);
                opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
            });
            opts.cssFirst.left = 0;
            opts.cssBefore.top = 0;
            opts.animIn.left = 0;
            opts.animOut.top = 0;
        };
        $.fn.cycle.transitions.scrollVert = function ($cont, $slides, opts) {
            $cont.css("overflow", "hidden");
            opts.before.push(function (curr, next, opts, fwd) {
                if (opts.rev) {
                    fwd = !fwd;
                }
                $.fn.cycle.commonReset(curr, next, opts);
                opts.cssBefore.top = fwd ? (1 - next.cycleH) : (next.cycleH - 1);
                opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
            });
            opts.cssFirst.top = 0;
            opts.cssBefore.left = 0;
            opts.animIn.top = 0;
            opts.animOut.left = 0;
        };
        $.fn.cycle.transitions.slideX = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $(opts.elements).not(curr).hide();
                $.fn.cycle.commonReset(curr, next, opts, false, true);
                opts.animIn.width = next.cycleW;
            });
            opts.cssBefore.left = 0;
            opts.cssBefore.top = 0;
            opts.cssBefore.width = 0;
            opts.animIn.width = "show";
            opts.animOut.width = 0;
        };
        $.fn.cycle.transitions.slideY = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $(opts.elements).not(curr).hide();
                $.fn.cycle.commonReset(curr, next, opts, true, false);
                opts.animIn.height = next.cycleH;
            });
            opts.cssBefore.left = 0;
            opts.cssBefore.top = 0;
            opts.cssBefore.height = 0;
            opts.animIn.height = "show";
            opts.animOut.height = 0;
        };
        $.fn.cycle.transitions.shuffle = function ($cont, $slides, opts) {
            var i, w = $cont.css("overflow", "visible").width();
            $slides.css({
                left: 0,
                top: 0
            });
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, true, true, true);
            });
            if (!opts.speedAdjusted) {
                opts.speed = opts.speed / 2;
                opts.speedAdjusted = true;
            }
            opts.random = 0;
            opts.shuffle = opts.shuffle || {
                left: -w,
                top: 15
            };
            opts.els = [];
            for (i = 0; i < $slides.length; i++) {
                opts.els.push($slides[i]);
            }
            for (i = 0; i < opts.currSlide; i++) {
                opts.els.push(opts.els.shift());
            }
            opts.fxFn = function (curr, next, opts, cb, fwd) {
                if (opts.rev) {
                    fwd = !fwd;
                }
                var $el = fwd ? $(curr) : $(next);
                $(next).css(opts.cssBefore);
                var count = opts.slideCount;
                $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function () {
                    var hops = $.fn.cycle.hopsFromLast(opts, fwd);
                    for (var k = 0; k < hops; k++) {
                        fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop());
                    }
                    if (fwd) {
                        for (var i = 0, len = opts.els.length; i < len; i++) {
                            $(opts.els[i]).css("z-index", len - i + count);
                        }
                    } else {
                        var z = $(curr).css("z-index");
                        $el.css("z-index", parseInt(z) + 1 + count);
                    }
                    $el.animate({
                        left: 0,
                        top: 0
                    }, opts.speedOut, opts.easeOut, function () {
                        $(fwd ? this : curr).hide();
                        if (cb) {
                            cb();
                        }
                    });
                });
            };
            $.extend(opts.cssBefore, {
                display: "block",
                opacity: 1,
                top: 0,
                left: 0
            });
        };
        $.fn.cycle.transitions.turnUp = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, true, false);
                opts.cssBefore.top = next.cycleH;
                opts.animIn.height = next.cycleH;
                opts.animOut.width = next.cycleW;
            });
            opts.cssFirst.top = 0;
            opts.cssBefore.left = 0;
            opts.cssBefore.height = 0;
            opts.animIn.top = 0;
            opts.animOut.height = 0;
        };
        $.fn.cycle.transitions.turnDown = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, true, false);
                opts.animIn.height = next.cycleH;
                opts.animOut.top = curr.cycleH;
            });
            opts.cssFirst.top = 0;
            opts.cssBefore.left = 0;
            opts.cssBefore.top = 0;
            opts.cssBefore.height = 0;
            opts.animOut.height = 0;
        };
        $.fn.cycle.transitions.turnLeft = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, false, true);
                opts.cssBefore.left = next.cycleW;
                opts.animIn.width = next.cycleW;
            });
            opts.cssBefore.top = 0;
            opts.cssBefore.width = 0;
            opts.animIn.left = 0;
            opts.animOut.width = 0;
        };
        $.fn.cycle.transitions.turnRight = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, false, true);
                opts.animIn.width = next.cycleW;
                opts.animOut.left = curr.cycleW;
            });
            $.extend(opts.cssBefore, {
                top: 0,
                left: 0,
                width: 0
            });
            opts.animIn.left = 0;
            opts.animOut.width = 0;
        };
        $.fn.cycle.transitions.zoom = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, false, false, true);
                opts.cssBefore.top = next.cycleH / 2;
                opts.cssBefore.left = next.cycleW / 2;
                $.extend(opts.animIn, {
                    top: 0,
                    left: 0,
                    width: next.cycleW,
                    height: next.cycleH
                });
                $.extend(opts.animOut, {
                    width: 0,
                    height: 0,
                    top: curr.cycleH / 2,
                    left: curr.cycleW / 2
                });
            });
            opts.cssFirst.top = 0;
            opts.cssFirst.left = 0;
            opts.cssBefore.width = 0;
            opts.cssBefore.height = 0;
        };
        $.fn.cycle.transitions.fadeZoom = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, false, false);
                opts.cssBefore.left = next.cycleW / 2;
                opts.cssBefore.top = next.cycleH / 2;
                $.extend(opts.animIn, {
                    top: 0,
                    left: 0,
                    width: next.cycleW,
                    height: next.cycleH
                });
            });
            opts.cssBefore.width = 0;
            opts.cssBefore.height = 0;
            opts.animOut.opacity = 0;
        };
        $.fn.cycle.transitions.blindX = function ($cont, $slides, opts) {
            var w = $cont.css("overflow", "hidden").width();
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts);
                opts.animIn.width = next.cycleW;
                opts.animOut.left = curr.cycleW;
            });
            opts.cssBefore.left = w;
            opts.cssBefore.top = 0;
            opts.animIn.left = 0;
            opts.animOut.left = w;
        };
        $.fn.cycle.transitions.blindY = function ($cont, $slides, opts) {
            var h = $cont.css("overflow", "hidden").height();
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts);
                opts.animIn.height = next.cycleH;
                opts.animOut.top = curr.cycleH;
            });
            opts.cssBefore.top = h;
            opts.cssBefore.left = 0;
            opts.animIn.top = 0;
            opts.animOut.top = h;
        };
        $.fn.cycle.transitions.blindZ = function ($cont, $slides, opts) {
            var h = $cont.css("overflow", "hidden").height();
            var w = $cont.width();
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts);
                opts.animIn.height = next.cycleH;
                opts.animOut.top = curr.cycleH;
            });
            opts.cssBefore.top = h;
            opts.cssBefore.left = w;
            opts.animIn.top = 0;
            opts.animIn.left = 0;
            opts.animOut.top = h;
            opts.animOut.left = w;
        };
        $.fn.cycle.transitions.growX = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, false, true);
                opts.cssBefore.left = this.cycleW / 2;
                opts.animIn.left = 0;
                opts.animIn.width = this.cycleW;
                opts.animOut.left = 0;
            });
            opts.cssBefore.top = 0;
            opts.cssBefore.width = 0;
        };
        $.fn.cycle.transitions.growY = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, true, false);
                opts.cssBefore.top = this.cycleH / 2;
                opts.animIn.top = 0;
                opts.animIn.height = this.cycleH;
                opts.animOut.top = 0;
            });
            opts.cssBefore.height = 0;
            opts.cssBefore.left = 0;
        };
        $.fn.cycle.transitions.curtainX = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, false, true, true);
                opts.cssBefore.left = next.cycleW / 2;
                opts.animIn.left = 0;
                opts.animIn.width = this.cycleW;
                opts.animOut.left = curr.cycleW / 2;
                opts.animOut.width = 0;
            });
            opts.cssBefore.top = 0;
            opts.cssBefore.width = 0;
        };
        $.fn.cycle.transitions.curtainY = function ($cont, $slides, opts) {
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, true, false, true);
                opts.cssBefore.top = next.cycleH / 2;
                opts.animIn.top = 0;
                opts.animIn.height = next.cycleH;
                opts.animOut.top = curr.cycleH / 2;
                opts.animOut.height = 0;
            });
            opts.cssBefore.height = 0;
            opts.cssBefore.left = 0;
        };
        $.fn.cycle.transitions.cover = function ($cont, $slides, opts) {
            var d = opts.direction || "left";
            var w = $cont.css("overflow", "hidden").width();
            var h = $cont.height();
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts);
                if (d == "right") {
                    opts.cssBefore.left = -w;
                } else {
                    if (d == "up") {
                        opts.cssBefore.top = h;
                    } else {
                        if (d == "down") {
                            opts.cssBefore.top = -h;
                        } else {
                            opts.cssBefore.left = w;
                        }
                    }
                }
            });
            opts.animIn.left = 0;
            opts.animIn.top = 0;
            opts.cssBefore.top = 0;
            opts.cssBefore.left = 0;
        };
        $.fn.cycle.transitions.uncover = function ($cont, $slides, opts) {
            var d = opts.direction || "left";
            var w = $cont.css("overflow", "hidden").width();
            var h = $cont.height();
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, true, true, true);
                if (d == "right") {
                    opts.animOut.left = w;
                } else {
                    if (d == "up") {
                        opts.animOut.top = -h;
                    } else {
                        if (d == "down") {
                            opts.animOut.top = h;
                        } else {
                            opts.animOut.left = -w;
                        }
                    }
                }
            });
            opts.animIn.left = 0;
            opts.animIn.top = 0;
            opts.cssBefore.top = 0;
            opts.cssBefore.left = 0;
        };
        $.fn.cycle.transitions.toss = function ($cont, $slides, opts) {
            var w = $cont.css("overflow", "visible").width();
            var h = $cont.height();
            opts.before.push(function (curr, next, opts) {
                $.fn.cycle.commonReset(curr, next, opts, true, true, true);
                if (!opts.animOut.left && !opts.animOut.top) {
                    $.extend(opts.animOut, {
                        left: w * 2,
                        top: -h / 2,
                        opacity: 0
                    });
                } else {
                    opts.animOut.opacity = 0;
                }
            });
            opts.cssBefore.left = 0;
            opts.cssBefore.top = 0;
            opts.animIn.left = 0;
        };
        $.fn.cycle.transitions.wipe = function ($cont, $slides, opts) {
            var w = $cont.css("overflow", "hidden").width();
            var h = $cont.height();
            opts.cssBefore = opts.cssBefore || {};
            var clip;
            if (opts.clip) {
                if (/l2r/.test(opts.clip)) {
                    clip = "rect(0px 0px " + h + "px 0px)";
                } else {
                    if (/r2l/.test(opts.clip)) {
                        clip = "rect(0px " + w + "px " + h + "px " + w + "px)";
                    } else {
                        if (/t2b/.test(opts.clip)) {
                            clip = "rect(0px " + w + "px 0px 0px)";
                        } else {
                            if (/b2t/.test(opts.clip)) {
                                clip = "rect(" + h + "px " + w + "px " + h + "px 0px)";
                            } else {
                                if (/zoom/.test(opts.clip)) {
                                    var top = parseInt(h / 2);
                                    var left = parseInt(w / 2);
                                    clip = "rect(" + top + "px " + left + "px " + top + "px " + left + "px)";
                                }
                            }
                        }
                    }
                }
            }
            opts.cssBefore.clip = opts.cssBefore.clip || clip || "rect(0px 0px 0px 0px)";
            var d = opts.cssBefore.clip.match(/(\d+)/g);
            var t = parseInt(d[0]),
                r = parseInt(d[1]),
                b = parseInt(d[2]),
                l = parseInt(d[3]);
            opts.before.push(function (curr, next, opts) {
                if (curr == next) {
                    return;
                }
                var $curr = $(curr),
                    $next = $(next);
                $.fn.cycle.commonReset(curr, next, opts, true, true, false);
                opts.cssAfter.display = "block";
                var step = 1,
                    count = parseInt((opts.speedIn / 13)) - 1;
                (function f() {
                    var tt = t ? t - parseInt(step * (t / count)) : 0;
                    var ll = l ? l - parseInt(step * (l / count)) : 0;
                    var bb = b < h ? b + parseInt(step * ((h - b) / count || 1)) : h;
                    var rr = r < w ? r + parseInt(step * ((w - r) / count || 1)) : w;
                    $next.css({
                        clip: "rect(" + tt + "px " + rr + "px " + bb + "px " + ll + "px)"
                    });
                    (step++ <= count) ? setTimeout(f, 13) : $curr.css("display", "none");
                })();
            });
            $.extend(opts.cssBefore, {
                display: "block",
                opacity: 1,
                top: 0,
                left: 0
            });
            opts.animIn = {
                left: 0
            };
            opts.animOut = {
                left: 0
            };
        };
    })(jQuery);


    /* Twitter plugin http://tweet.seaofclouds.com/ */
    $.fn.tweet = function (o) {
        var s = $.extend({
            username: ["seaofclouds"],
            // [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
            favorites: false,
            // [boolean]  display the user's favorites instead of his tweets
            avatar_size: null,
            // [integer]  height and width of avatar if displayed (48px max)
            count: 3,
            // [integer]  how many tweets to display?
            fetch: null,
            // [integer]  how many tweets to fetch via the API (set this higher than 'count' if using the 'filter' option)
            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
            refresh_interval: null,
            // [integer]  optional number of seconds after which to reload tweets
            twitter_url: "twitter.com",
            // [string]   custom twitter url, if any (apigee, etc.)
            twitter_api_url: "api.twitter.com",
            // [string]   custom twitter api url, if any (apigee, etc.)
            twitter_search_url: "search.twitter.com",
            // [string]   custom twitter search url, if any (apigee, etc.)
            template: "{avatar}{time}{join}{text}",
            // [string or function] template used to construct each tweet <li> - see code for available vars
            comparator: function (tweet1, tweet2) { // [function] comparator used to sort tweets (see Array.sort)
                return tweet2["tweet_time"] - tweet1["tweet_time"];
            },
            filter: function (tweet) { // [function] whether or not to include a particular tweet (be sure to also set 'fetch')
                return true;
            }
        }, o);

        $.fn.extend({
            linkUrl: function () {
                var returning = [];
                // See http://daringfireball.net/2010/07/improved_regex_for_matching_urls
                var regexp = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi;
                this.each(function () {
                    returning.push(this.replace(regexp, function (match) {
                        var url = (/^[a-z]+:/i).test(match) ? match : "http://" + match;
                        return "<a href=\"" + url + "\">" + match + "</a>";
                    }));
                });
                return $(returning);
            },
            linkUser: function () {
                var returning = [];
                var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
                this.each(function () {
                    returning.push(this.replace(regexp, "<a href=\"http://" + s.twitter_url + "/$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 href="http://' + s.twitter_search_url + '/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(date) {
            var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
            var delta = parseInt((relative_to.getTime() - date) / 1000, 10);
            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:');
            var count = (s.fetch === null) ? s.count : s.fetch;
            if (s.list) {
                return proto + "//" + s.twitter_api_url + "/1/" + s.username[0] + "/lists/" + s.list + "/statuses.json?per_page=" + count + "&callback=?";
            } else if (s.favorites) {
                return proto + "//" + s.twitter_api_url + "/favorites/" + s.username[0] + ".json?count=" + s.count + "&callback=?";
            } else if (s.query === null && s.username.length == 1) {
                return proto + '//' + s.twitter_api_url + '/1/statuses/user_timeline.json?screen_name=' + s.username[0] + '&count=' + count + '&include_rts=1&callback=?';
            } else {
                var query = (s.query || 'from:' + s.username.join(' OR from:'));
                return proto + '//' + s.twitter_search_url + '/search.json?&q=' + encodeURIComponent(query) + '&rpp=' + 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];
            }

            var expand_template = function (info) {
                    if (typeof s.template === "string") {
                        var result = s.template;
                        for (var key in info)
                        result = result.replace(new RegExp('{' + key + '}', 'g'), info[key]);
                        return result;
                    } else return s.template(info);
                };

            if (s.loading_text) $(widget).append(loading);
            $(widget).bind("load", function () {
                $.getJSON(build_url(), function (data) {
                    if (s.loading_text) loading.remove();
                    if (s.intro_text) list.before(intro);
                    list.empty();

                    var tweets = $.map(data.results || data, function (item) {
                        var join_text = s.join_text;

                        // auto join text based on verb tense and content
                        if (s.join_text == "auto") {
                            if (item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) {
                                join_text = s.auto_join_text_reply;
                            } else if (item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)) {
                                join_text = s.auto_join_text_url;
                            } else if (item.text.match(/^((\w+ed)|just) .*/im)) {
                                join_text = s.auto_join_text_ed;
                            } else if (item.text.match(/^(\w*ing) .*/i)) {
                                join_text = s.auto_join_text_ing;
                            } else {
                                join_text = s.auto_join_text_default;
                            }
                        }

                        // Basic building blocks for constructing tweet <li> using a template
                        var screen_name = item.from_user || item.user.screen_name;
                        var source = item.source;
                        var user_url = "http://" + s.twitter_url + "/" + screen_name;
                        var avatar_size = s.avatar_size;
                        var avatar_url = item.profile_image_url || item.user.profile_image_url;
                        var tweet_url = "http://" + s.twitter_url + "/" + screen_name + "/statuses/" + item.id_str;
                        var tweet_time = parse_date(item.created_at);
                        var tweet_relative_time = relative_time(tweet_time);
                        var tweet_raw_text = item.text;
                        var tweet_text = $([tweet_raw_text]).linkUrl().linkUser().linkHash()[0];

                        // Default spans, and pre-formatted blocks for common layouts
                        var user = '<a class="tweet_user" href="' + user_url + '">' + screen_name + '</a>';
                        var join = ((s.join_text) ? ('<span class="tweet_join"> ' + join_text + ' </span>') : ' ');
                        var avatar = (avatar_size ? ('<a class="tweet_avatar" href="' + user_url + '"><img src="' + avatar_url + '" height="' + avatar_size + '" width="' + avatar_size + '" alt="' + screen_name + '\'s avatar" title="' + screen_name + '\'s avatar" border="0"/></a>') : '');
                        var time = '<span class="tweet_time"><a href="' + tweet_url + '" title="view tweet on twitter">' + tweet_relative_time + '</a></span>';
                        var text = '<span class="tweet_text">' + $([tweet_text]).makeHeart().capAwesome().capEpic()[0] + '</span>';

                        return {
                            item: item,
                            // For advanced users who want to dig out other info
                            screen_name: screen_name,
                            user_url: user_url,
                            avatar_size: avatar_size,
                            avatar_url: avatar_url,
                            source: source,
                            tweet_url: tweet_url,
                            tweet_time: tweet_time,
                            tweet_relative_time: tweet_relative_time,
                            tweet_raw_text: tweet_raw_text,
                            tweet_text: tweet_text,
                            user: user,
                            join: join,
                            avatar: avatar,
                            time: time,
                            text: text
                        };
                    });

                    tweets = $.grep(tweets, s.filter).slice(0, s.count);
                    list.append($.map(tweets.sort(s.comparator), function (t) {
                        return "<li>" + expand_template(t) + "</li>";
                    }).join('')).
                    children('li:first').addClass('tweet_first').end().
                    children('li:odd').addClass('tweet_even').end().
                    children('li:even').addClass('tweet_odd');

                    if (s.outro_text) list.after(outro);
                    $(widget).trigger("loaded").trigger((tweets.length === 0 ? "empty" : "full"));
                    if (s.refresh_interval) {
                        window.setTimeout(function () {
                            $(widget).trigger("load");
                        }, 1000 * s.refresh_interval);
                    }
                });
            }).trigger("load");
        });
    }; /* /Twitter */


})(this.jQuery);




// usage: log('inside coolFunc',this,arguments);
// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function () {
    log.history = log.history || []; // store logs to an array for reference
    log.history.push(arguments);
    if (this.console) {
        console.log(Array.prototype.slice.call(arguments));
    }
};



// catch all document.write() calls
(function (doc) {
    var write = doc.write;
    doc.write = function (q) {
        log('document.write(): ', arguments);
        if (/docwriteregexwhitelist/.test(q)) write.apply(doc, arguments);
    };
})(document);




/* ------------------------------------------------------------------------
	Class: prettyPhoto
	Use: Lightbox clone for jQuery
	Author: Stephane Caron (http://www.no-margin-for-errors.com)
	Version: 3.1.2
------------------------------------------------------------------------- */

(function ($) {
    $.prettyPhoto = {
        version: '3.1.2'
    };
    $.fn.prettyPhoto = function (pp_settings) {
        pp_settings = jQuery.extend({
            animation_speed: 'fast',
            slideshow: 5000,
            autoplay_slideshow: false,
            opacity: 0.80,
            show_title: true,
            allow_resize: true,
            default_width: 500,
            default_height: 344,
            counter_separator_label: '/',
            theme: 'pp_default',
            horizontal_padding: 20,
            hideflash: false,
            wmode: 'opaque',
            autoplay: false,
            modal: false,
            deeplinking: true,
            overlay_gallery: true,
            keyboard_shortcuts: true,
            changepicturecallback: function () {},
            callback: function () {},
            ie6_fallback: true,
            markup: '<div class="pp_pic_holder"><div class="ppt" style="display:none;">&nbsp;</div><div class="pp_top"><div class="pp_left"></div><div class="pp_middle"></div><div class="pp_right"></div></div><div class="pp_content_container"><div class="pp_left"><div class="pp_right"><div class="pp_content"><div class="pp_loaderIcon" style="display:block;"></div><div class="pp_fade"><a href="#" class="pp_expand" title="Expand the image">Expand</a><div class="pp_hoverContainer"><a class="pp_next" href="#">next</a><a class="pp_previous" href="#">previous</a></div><div id="pp_full_res"></div><div class="pp_details"><div class="pp_nav"><a href="#" class="pp_arrow_previous">Previous</a><p class="currentTextHolder">0/0</p><a href="#" class="pp_arrow_next">Next</a></div><p class="pp_description"></p></div></div></div></div></div></div><div class="pp_bottom"><div class="pp_left"></div><div class="pp_middle"></div><div class="pp_right"></div></div></div><div class="pp_overlay"></div>',
            gallery_markup: '<div class="pp_gallery"><a href="#" class="pp_arrow_previous">Previous</a><div><ul>{gallery}</ul></div><a href="#" class="pp_arrow_next">Next</a></div>',
            image_markup: '<img id="fullResImage" src="{path}" />',
            flash_markup: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',
            quicktime_markup: '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',
            iframe_markup: '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',
            inline_markup: '<div class="pp_inline">{content}</div>',
            custom_markup: '',
            social_tools: '<div class="pp_social"><div class="twitter"><a href="" class="twitter-share-button" data-count="none"></a><script type="text/javascript" src=""></script></div><div class="facebook"><iframe src="" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div></div>'
        }, pp_settings);
        var matchedObjects = this,
            percentBased = false,
            pp_dimensions, pp_open, pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth, windowHeight = $(window).height(),
            windowWidth = $(window).width(),
            pp_slideshow;
        doresize = true, scroll_pos = _get_scroll();
        $(window).unbind('resize.prettyphoto').bind('resize.prettyphoto', function () {
            _center_overlay();
            _resize_overlay();
        });
        if (pp_settings.keyboard_shortcuts) {
            $(document).unbind('keydown.prettyphoto').bind('keydown.prettyphoto', function (e) {
                if (typeof $pp_pic_holder != 'undefined') {
                    if ($pp_pic_holder.is(':visible')) {
                        switch (e.keyCode) {
                        case 37:
                            $.prettyPhoto.changePage('previous');
                            e.preventDefault();
                            break;
                        case 39:
                            $.prettyPhoto.changePage('next');
                            e.preventDefault();
                            break;
                        case 27:
                            if (!settings.modal) $.prettyPhoto.close();
                            e.preventDefault();
                            break;
                        };
                    };
                };
            });
        };
        $.prettyPhoto.initialize = function () {
            settings = pp_settings;
            if (settings.theme == 'pp_default') settings.horizontal_padding = 16;
            if (settings.ie6_fallback && $.browser.msie && parseInt($.browser.version) == 6) settings.theme = "light_square";
            theRel = $(this).attr('rel');
            galleryRegExp = /\[(?:.*)\]/;
            isSet = (galleryRegExp.exec(theRel)) ? true : false;
            pp_images = (isSet) ? jQuery.map(matchedObjects, function (n, i) {
                if ($(n).attr('rel').indexOf(theRel) != -1) return $(n).attr('href');
            }) : $.makeArray($(this).attr('href'));
            pp_titles = (isSet) ? jQuery.map(matchedObjects, function (n, i) {
                if ($(n).attr('rel').indexOf(theRel) != -1) return ($(n).find('img').attr('alt')) ? $(n).find('img').attr('alt') : "";
            }) : $.makeArray($(this).find('img').attr('alt'));
            pp_descriptions = (isSet) ? jQuery.map(matchedObjects, function (n, i) {
                if ($(n).attr('rel').indexOf(theRel) != -1) return ($(n).attr('title')) ? $(n).attr('title') : "";
            }) : $.makeArray($(this).attr('title'));
            set_position = jQuery.inArray($(this).attr('href'), pp_images);
            rel_index = (isSet) ? set_position : $("a[rel^='" + theRel + "']").index($(this));
            _build_overlay(this);
            if (settings.allow_resize) $(window).bind('scroll.prettyphoto', function () {
                _center_overlay();
            });
            $.prettyPhoto.open();
            return false;
        }
        $.prettyPhoto.open = function (event) {
            if (typeof settings == "undefined") {
                settings = pp_settings;
                if ($.browser.msie && $.browser.version == 6) settings.theme = "light_square";
                pp_images = $.makeArray(arguments[0]);
                pp_titles = (arguments[1]) ? $.makeArray(arguments[1]) : $.makeArray("");
                pp_descriptions = (arguments[2]) ? $.makeArray(arguments[2]) : $.makeArray("");
                isSet = (pp_images.length > 1) ? true : false;
                set_position = 0;
                _build_overlay(event.target);
            }
            if ($.browser.msie && $.browser.version == 6) $('select').css('visibility', 'hidden');
            if (settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility', 'hidden');
            _checkPosition($(pp_images).size());
            $('.pp_loaderIcon').show();
            if ($ppt.is(':hidden')) $ppt.css('opacity', 0).show();
            $pp_overlay.show().fadeTo(settings.animation_speed, settings.opacity);
            $pp_pic_holder.find('.currentTextHolder').text((set_position + 1) + settings.counter_separator_label + $(pp_images).size());
            if (pp_descriptions[set_position] != "") {
                $pp_pic_holder.find('.pp_description').show().html(unescape(pp_descriptions[set_position]));
            } else {
                $pp_pic_holder.find('.pp_description').hide();
            }
            movie_width = (parseFloat(getParam('width', pp_images[set_position]))) ? getParam('width', pp_images[set_position]) : settings.default_width.toString();
            movie_height = (parseFloat(getParam('height', pp_images[set_position]))) ? getParam('height', pp_images[set_position]) : settings.default_height.toString();
            percentBased = false;
            if (movie_height.indexOf('%') != -1) {
                movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 150);
                percentBased = true;
            }
            if (movie_width.indexOf('%') != -1) {
                movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 150);
                percentBased = true;
            }
            $pp_pic_holder.fadeIn(function () {
                (settings.show_title && pp_titles[set_position] != "" && typeof pp_titles[set_position] != "undefined") ? $ppt.html(unescape(pp_titles[set_position])) : $ppt.html('&nbsp;');
                imgPreloader = "";
                skipInjection = false;
                switch (_getFileType(pp_images[set_position])) {
                case 'image':
                    imgPreloader = new Image();
                    nextImage = new Image();
                    if (isSet && set_position < $(pp_images).size() - 1) nextImage.src = pp_images[set_position + 1];
                    prevImage = new Image();
                    if (isSet && pp_images[set_position - 1]) prevImage.src = pp_images[set_position - 1];
                    $pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup.replace(/{path}/g, pp_images[set_position]);
                    imgPreloader.onload = function () {
                        pp_dimensions = _fitToViewport(imgPreloader.width, imgPreloader.height);
                        _showContent();
                    };
                    imgPreloader.onerror = function () {
                        alert('Image cannot be loaded. Make sure the path is correct and image exist.');
                        $.prettyPhoto.close();
                    };
                    imgPreloader.src = pp_images[set_position];
                    break;
                case 'youtube':
                    pp_dimensions = _fitToViewport(movie_width, movie_height);
                    movie = 'http://www.youtube.com/embed/' + getParam('v', pp_images[set_position]);
                    (getParam('rel', pp_images[set_position])) ? movie += "?rel=" + getParam('rel', pp_images[set_position]) : movie += "?rel=1";
                    if (settings.autoplay) movie += "&autoplay=1";
                    toInject = settings.iframe_markup.replace(/{width}/g, pp_dimensions['width']).replace(/{height}/g, pp_dimensions['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, movie);
                    break;
                case 'vimeo':
                    pp_dimensions = _fitToViewport(movie_width, movie_height);
                    movie_id = pp_images[set_position];
                    var regExp = /http:\/\/(www\.)?vimeo.com\/(\d+)/;
                    var match = movie_id.match(regExp);
                    movie = 'http://player.vimeo.com/video/' + match[2] + '?title=0&amp;byline=0&amp;portrait=0';
                    if (settings.autoplay) movie += "&autoplay=1;";
                    vimeo_width = pp_dimensions['width'] + '/embed/?moog_width=' + pp_dimensions['width'];
                    toInject = settings.iframe_markup.replace(/{width}/g, vimeo_width).replace(/{height}/g, pp_dimensions['height']).replace(/{path}/g, movie);
                    break;
                case 'quicktime':
                    pp_dimensions = _fitToViewport(movie_width, movie_height);
                    pp_dimensions['height'] += 15;
                    pp_dimensions['contentHeight'] += 15;
                    pp_dimensions['containerHeight'] += 15;
                    toInject = settings.quicktime_markup.replace(/{width}/g, pp_dimensions['width']).replace(/{height}/g, pp_dimensions['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, pp_images[set_position]).replace(/{autoplay}/g, settings.autoplay);
                    break;
                case 'flash':
                    pp_dimensions = _fitToViewport(movie_width, movie_height);
                    flash_vars = pp_images[set_position];
                    flash_vars = flash_vars.substring(pp_images[set_position].indexOf('flashvars') + 10, pp_images[set_position].length);
                    filename = pp_images[set_position];
                    filename = filename.substring(0, filename.indexOf('?'));
                    toInject = settings.flash_markup.replace(/{width}/g, pp_dimensions['width']).replace(/{height}/g, pp_dimensions['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, filename + '?' + flash_vars);
                    break;
                case 'iframe':
                    pp_dimensions = _fitToViewport(movie_width, movie_height);
                    frame_url = pp_images[set_position];
                    frame_url = frame_url.substr(0, frame_url.indexOf('iframe') - 1);
                    toInject = settings.iframe_markup.replace(/{width}/g, pp_dimensions['width']).replace(/{height}/g, pp_dimensions['height']).replace(/{path}/g, frame_url);
                    break;
                case 'ajax':
                    doresize = false;
                    pp_dimensions = _fitToViewport(movie_width, movie_height);
                    doresize = true;
                    skipInjection = true;
                    $.get(pp_images[set_position], function (responseHTML) {
                        toInject = settings.inline_markup.replace(/{content}/g, responseHTML);
                        $pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
                        _showContent();
                    });
                    break;
                case 'custom':
                    pp_dimensions = _fitToViewport(movie_width, movie_height);
                    toInject = settings.custom_markup;
                    break;
                case 'inline':
                    myClone = $(pp_images[set_position]).clone().append('<br clear="all" />').css({
                        'width': settings.default_width
                    }).wrapInner('<div id="pp_full_res"><div class="pp_inline"></div></div>').appendTo($('body')).show();
                    doresize = false;
                    pp_dimensions = _fitToViewport($(myClone).width(), $(myClone).height());
                    doresize = true;
                    $(myClone).remove();
                    toInject = settings.inline_markup.replace(/{content}/g, $(pp_images[set_position]).html());
                    break;
                };
                if (!imgPreloader && !skipInjection) {
                    $pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;
                    _showContent();
                };
            });
            return false;
        };
        $.prettyPhoto.changePage = function (direction) {
            currentGalleryPage = 0;
            if (direction == 'previous') {
                set_position--;
                if (set_position < 0) set_position = $(pp_images).size() - 1;
            } else if (direction == 'next') {
                set_position++;
                if (set_position > $(pp_images).size() - 1) set_position = 0;
            } else {
                set_position = direction;
            };
            rel_index = set_position;
            if (!doresize) doresize = true;
            $('.pp_contract').removeClass('pp_contract').addClass('pp_expand');
            _hideContent(function () {
                $.prettyPhoto.open();
            });
        };
        $.prettyPhoto.changeGalleryPage = function (direction) {
            if (direction == 'next') {
                currentGalleryPage++;
                if (currentGalleryPage > totalPage) currentGalleryPage = 0;
            } else if (direction == 'previous') {
                currentGalleryPage--;
                if (currentGalleryPage < 0) currentGalleryPage = totalPage;
            } else {
                currentGalleryPage = direction;
            };
            slide_speed = (direction == 'next' || direction == 'previous') ? settings.animation_speed : 0;
            slide_to = currentGalleryPage * (itemsPerPage * itemWidth);
            $pp_gallery.find('ul').animate({
                left: -slide_to
            }, slide_speed);
        };
        $.prettyPhoto.startSlideshow = function () {
            if (typeof pp_slideshow == 'undefined') {
                $pp_pic_holder.find('.pp_play').unbind('click').removeClass('pp_play').addClass('pp_pause').click(function () {
                    $.prettyPhoto.stopSlideshow();
                    return false;
                });
                pp_slideshow = setInterval($.prettyPhoto.startSlideshow, settings.slideshow);
            } else {
                $.prettyPhoto.changePage('next');
            };
        }
        $.prettyPhoto.stopSlideshow = function () {
            $pp_pic_holder.find('.pp_pause').unbind('click').removeClass('pp_pause').addClass('pp_play').click(function () {
                $.prettyPhoto.startSlideshow();
                return false;
            });
            clearInterval(pp_slideshow);
            pp_slideshow = undefined;
        }
        $.prettyPhoto.close = function () {
            if ($pp_overlay.is(":animated")) return;
            $.prettyPhoto.stopSlideshow();
            $pp_pic_holder.stop().find('object,embed').css('visibility', 'hidden');
            $('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animation_speed, function () {
                $(this).remove();
            });
            $pp_overlay.fadeOut(settings.animation_speed, function () {
                if ($.browser.msie && $.browser.version == 6) $('select').css('visibility', 'visible');
                if (settings.hideflash) $('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility', 'visible');
                $(this).remove();
                $(window).unbind('scroll.prettyphoto');
                settings.callback();
                doresize = true;
                pp_open = false;
                delete settings;
            });
        };

        function _showContent() {
            $('.pp_loaderIcon').hide();
            projectedTop = scroll_pos['scrollTop'] + ((windowHeight / 2) - (pp_dimensions['containerHeight'] / 2));
            if (projectedTop < 0) projectedTop = 0;
            $ppt.fadeTo(settings.animation_speed, 1);
            $pp_pic_holder.find('.pp_content').animate({
                height: pp_dimensions['contentHeight'] - 100,
                width: pp_dimensions['contentWidth']
            }, settings.animation_speed);
            $pp_pic_holder.animate({
                'top': projectedTop,
                'left': (windowWidth / 2) - (pp_dimensions['containerWidth'] / 2),
                width: pp_dimensions['containerWidth']
            }, settings.animation_speed, function () {
                $pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(pp_dimensions['height']).width(pp_dimensions['width']);
                $pp_pic_holder.find('.pp_fade').fadeIn(settings.animation_speed);
                if (isSet && _getFileType(pp_images[set_position]) == "image") {
                    $pp_pic_holder.find('.pp_hoverContainer').show();
                } else {
                    $pp_pic_holder.find('.pp_hoverContainer').hide();
                }
                if (pp_dimensions['resized']) {
                    $('a.pp_expand,a.pp_contract').show();
                } else {
                    $('a.pp_expand').hide();
                }
                if (settings.autoplay_slideshow && !pp_slideshow && !pp_open) $.prettyPhoto.startSlideshow();
                if (settings.deeplinking) setHashtag();
                settings.changepicturecallback();
                pp_open = true;
            });
            _insert_gallery();
        };

        function _hideContent(callback) {
            $pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility', 'hidden');
            $pp_pic_holder.find('.pp_fade').fadeOut(settings.animation_speed, function () {
                $('.pp_loaderIcon').show();
                callback();
            });
        };

        function _checkPosition(setCount) {
            (setCount > 1) ? $('.pp_nav').show() : $('.pp_nav').hide();
        };

        function _fitToViewport(width, height) {
            resized = false;
            _getDimensions(width, height);
            imageWidth = width, imageHeight = height;
            if (((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allow_resize && !percentBased) {
                resized = true, fitting = false;
                while (!fitting) {
                    if ((pp_containerWidth > windowWidth)) {
                        imageWidth = (windowWidth - 200);
                        imageHeight = (height / width) * imageWidth;
                    } else if ((pp_containerHeight > windowHeight)) {
                        imageHeight = (windowHeight - 200);
                        imageWidth = (width / height) * imageHeight;
                    } else {
                        fitting = true;
                    };
                    pp_containerHeight = imageHeight, pp_containerWidth = imageWidth;
                };
                _getDimensions(imageWidth, imageHeight);
                if ((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) {
                    _fitToViewport(pp_containerWidth, pp_containerHeight)
                };
            };
            return {
                width: Math.floor(imageWidth),
                height: Math.floor(imageHeight),
                containerHeight: Math.floor(pp_containerHeight),
                containerWidth: Math.floor(pp_containerWidth) + (settings.horizontal_padding * 2),
                contentHeight: Math.floor(pp_contentHeight),
                contentWidth: Math.floor(pp_contentWidth),
                resized: resized
            };
        };

        function _getDimensions(width, height) {
            width = parseFloat(width);
            height = parseFloat(height);
            $pp_details = $pp_pic_holder.find('.pp_details');
            $pp_details.width(width);
            detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));
            $pp_details = $pp_details.clone().addClass(settings.theme).width(width).appendTo($('body')).css({
                'position': 'absolute',
                'top': -10000
            });
            detailsHeight += $pp_details.height();
            detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight;
            if ($.browser.msie && $.browser.version == 7) detailsHeight += 8;
            $pp_details.remove();
            $pp_title = $pp_pic_holder.find('.ppt');
            $pp_title.width(width);
            titleHeight = parseFloat($pp_title.css('marginTop')) + parseFloat($pp_title.css('marginBottom'));
            $pp_title = $pp_title.clone().appendTo($('body')).css({
                'position': 'absolute',
                'top': -10000
            });
            titleHeight += $pp_title.height();
            $pp_title.remove();
            pp_contentHeight = height + detailsHeight;
            pp_contentWidth = width;
            pp_containerHeight = pp_contentHeight + titleHeight + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
            pp_containerWidth = width;
        }

        function _getFileType(itemSrc) {
            if (itemSrc.match(/youtube\.com\/watch/i)) {
                return 'youtube';
            } else if (itemSrc.match(/vimeo\.com/i)) {
                return 'vimeo';
            } else if (itemSrc.match(/\b.mov\b/i)) {
                return 'quicktime';
            } else if (itemSrc.match(/\b.swf\b/i)) {
                return 'flash';
            } else if (itemSrc.match(/\biframe=true\b/i)) {
                return 'iframe';
            } else if (itemSrc.match(/\bajax=true\b/i)) {
                return 'ajax';
            } else if (itemSrc.match(/\bcustom=true\b/i)) {
                return 'custom';
            } else if (itemSrc.substr(0, 1) == '#') {
                return 'inline';
            } else {
                return 'image';
            };
        };

        function _center_overlay() {
            if (doresize && typeof $pp_pic_holder != 'undefined') {
                scroll_pos = _get_scroll();
                contentHeight = $pp_pic_holder.height(), contentwidth = $pp_pic_holder.width();
                projectedTop = (windowHeight / 2) + scroll_pos['scrollTop'] - (contentHeight / 2);
                if (projectedTop < 0) projectedTop = 0;
                if (contentHeight > windowHeight) return;
                $pp_pic_holder.css({
                    'top': projectedTop,
                    'left': (windowWidth / 2) + scroll_pos['scrollLeft'] - (contentwidth / 2)
                });
            };
        };

        function _get_scroll() {
            if (self.pageYOffset) {
                return {
                    scrollTop: self.pageYOffset,
                    scrollLeft: self.pageXOffset
                };
            } else if (document.documentElement && document.documentElement.scrollTop) {
                return {
                    scrollTop: document.documentElement.scrollTop,
                    scrollLeft: document.documentElement.scrollLeft
                };
            } else if (document.body) {
                return {
                    scrollTop: document.body.scrollTop,
                    scrollLeft: document.body.scrollLeft
                };
            };
        };

        function _resize_overlay() {
            windowHeight = $(window).height(), windowWidth = $(window).width();
            if (typeof $pp_overlay != "undefined") $pp_overlay.height($(document).height()).width(windowWidth);
        };

        function _insert_gallery() {
            if (isSet && settings.overlay_gallery && _getFileType(pp_images[set_position]) == "image" && (settings.ie6_fallback && !($.browser.msie && parseInt($.browser.version) == 6))) {
                itemWidth = 52 + 5;
                navWidth = (settings.theme == "facebook" || settings.theme == "pp_default") ? 50 : 30;
                itemsPerPage = Math.floor((pp_dimensions['containerWidth'] - 100 - navWidth) / itemWidth);
                itemsPerPage = (itemsPerPage < pp_images.length) ? itemsPerPage : pp_images.length;
                totalPage = Math.ceil(pp_images.length / itemsPerPage) - 1;
                if (totalPage == 0) {
                    navWidth = 0;
                    $pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').hide();
                } else {
                    $pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').show();
                };
                galleryWidth = itemsPerPage * itemWidth;
                fullGalleryWidth = pp_images.length * itemWidth;
                $pp_gallery.css('margin-left', -((galleryWidth / 2) + (navWidth / 2))).find('div:first').width(galleryWidth + 5).find('ul').width(fullGalleryWidth).find('li.selected').removeClass('selected');
                goToPage = (Math.floor(set_position / itemsPerPage) < totalPage) ? Math.floor(set_position / itemsPerPage) : totalPage;
                $.prettyPhoto.changeGalleryPage(goToPage);
                $pp_gallery_li.filter(':eq(' + set_position + ')').addClass('selected');
            } else {
                $pp_pic_holder.find('.pp_content').unbind('mouseenter mouseleave');
            }
        }

        function _build_overlay(caller) {
            settings.markup = settings.markup.replace('{pp_social}', (settings.social_tools) ? settings.social_tools : '');
            $('body').append(settings.markup);
            $pp_pic_holder = $('.pp_pic_holder'), $ppt = $('.ppt'), $pp_overlay = $('div.pp_overlay');
            if (isSet && settings.overlay_gallery) {
                currentGalleryPage = 0;
                toInject = "";
                for (var i = 0; i < pp_images.length; i++) {
                    if (!pp_images[i].match(/\b(jpg|jpeg|png|gif)\b/gi)) {
                        classname = 'default';
                        img_src = '';
                    } else {
                        classname = '';
                        img_src = pp_images[i];
                    }
                    toInject += "<li class='" + classname + "'><a href='#'><img src='" + img_src + "' width='50' alt='' /></a></li>";
                };
                toInject = settings.gallery_markup.replace(/{gallery}/g, toInject);
                $pp_pic_holder.find('#pp_full_res').after(toInject);
                $pp_gallery = $('.pp_pic_holder .pp_gallery'), $pp_gallery_li = $pp_gallery.find('li');
                $pp_gallery.find('.pp_arrow_next').click(function () {
                    $.prettyPhoto.changeGalleryPage('next');
                    $.prettyPhoto.stopSlideshow();
                    return false;
                });
                $pp_gallery.find('.pp_arrow_previous').click(function () {
                    $.prettyPhoto.changeGalleryPage('previous');
                    $.prettyPhoto.stopSlideshow();
                    return false;
                });
                $pp_pic_holder.find('.pp_content').hover(function () {
                    $pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeIn();
                }, function () {
                    $pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeOut();
                });
                itemWidth = 52 + 5;
                $pp_gallery_li.each(function (i) {
                    $(this).find('a').click(function () {
                        $.prettyPhoto.changePage(i);
                        $.prettyPhoto.stopSlideshow();
                        return false;
                    });
                });
            };

            if (settings.slideshow) {
                $pp_pic_holder.find('.pp_nav').prepend('<a href="#" class="pp_play">Play</a>')
                $pp_pic_holder.find('.pp_nav .pp_play').click(function () {
                    $.prettyPhoto.startSlideshow();
                    return false;
                });
            }
            $pp_pic_holder.attr('class', 'pp_pic_holder ' + settings.theme);			
            $pp_overlay.css({
                'opacity': 0,
                'height': $(document).height(),
                'width': $(window).width()
            }).bind('click', function () {
                if (!settings.modal) $.prettyPhoto.close();
            });
            $('a.pp_close').bind('click', function () {
                $.prettyPhoto.close();
                return false;
            });
            $('a.pp_expand').bind('click', function (e) {
                if ($(this).hasClass('pp_expand')) {
                    $(this).removeClass('pp_expand').addClass('pp_contract');
                    doresize = false;
                } else {
                    $(this).removeClass('pp_contract').addClass('pp_expand');
                    doresize = true;
                };
                _hideContent(function () {
                    $.prettyPhoto.open();
                });
                return false;
            });
            $pp_pic_holder.find('.pp_previous, .pp_nav .pp_arrow_previous').bind('click', function () {
                $.prettyPhoto.changePage('previous');
                $.prettyPhoto.stopSlideshow();
                return false;
            });
            $pp_pic_holder.find('.pp_next, .pp_nav .pp_arrow_next').bind('click', function () {
                $.prettyPhoto.changePage('next');
                $.prettyPhoto.stopSlideshow();
                return false;
            });
            _center_overlay();
        };
        if (!pp_alreadyInitialized && getHashtag()) {
            pp_alreadyInitialized = true;
            hashIndex = getHashtag();
            hashRel = hashIndex;
            hashIndex = hashIndex.substring(hashIndex.indexOf('/') + 1, hashIndex.length - 1);
            hashRel = hashRel.substring(0, hashRel.indexOf('/'));
            setTimeout(function () {
                $("a[rel^='" + hashRel + "']:eq(" + hashIndex + ")").trigger('click');
            }, 50);
        }
        return this.unbind('click.prettyphoto').bind('click.prettyphoto', $.prettyPhoto.initialize);
    };

    function getHashtag() {
        url = location.href;
        hashtag = (url.indexOf('#!') != -1) ? decodeURI(url.substring(url.indexOf('#!') + 2, url.length)) : false;
        return hashtag;
    };

    function setHashtag() {
        if (typeof theRel == 'undefined') return;
        location.hash = '!' + theRel + '/' + rel_index + '/';
    };

    function getParam(name, url) {
        name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
        var regexS = "[\\?&]" + name + "=([^&#]*)";
        var regex = new RegExp(regexS);
        var results = regex.exec(url);
        return (results == null) ? "" : results[1];
    }
})(jQuery);
var pp_alreadyInitialized = false;


/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function (name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
