text: $(document).ready(function() {
  	
  	// link demos
  	
  	$(".demoflow div.wrapper").click(function() {
  		
  		var demo = $(this).children('img').attr('_demo');
  		
  		if (demo) {
  			location.href = '/repository/real-world/' + demo;
  		}else {
  			//alert('Under construction!');
  		}
  		
  	});
  	
  	if ($("div.demoflow").size()) {
  		
  		var inst = new $.ui.carousel($("div.demoflow")[0], { height: 200, width: 310 });
  
  		$("div.demoflow-button-left, div.demoflow-button-right").bind("mousedown", function() {
  			var right = this.className.indexOf("right") == -1;
  			if(inst.autoRotator) window.clearInterval(inst.autoRotator);
  			inst.timer = window.setInterval(function() { inst.rotate(right ? "right" : null); }, 13);
  		})
  		.bind("mouseup", function() {
  			window.clearInterval(inst.timer);
  		});
  		
  		$('.demoflow div.shadow').hover(function() {
  			this._lastopacity = $(this).css('opacity');
  			$(this).stop().animate({opacity: 0 }, 300); 
  		}, function() {
  			$(this).stop().animate({opacity: this._lastopacity }, 300);
  		});
  		
  
  		window.setTimeout(function() {
  			inst.element.animate({ opacity: 1 },2000); inst.rotate(0,2000,0.45);
  			window.setTimeout(function() {
  				inst.autoRotator = window.setInterval(function() { inst.rotate(0,2000,0.45); },5000);
  			},3000);
  		},0);
  
  	}
  
  	$('a').click(function(){
  		this.blur();
  	});
  	
  	// smooth hover effects by DragonInteractive
  	var hover = hoverEffects();
  	hover.init();
  
  });
  	
  	$.ui.carousel = function(element, options) {
  
  		this.element = $(element);
  		this.options = $.extend({}, options);
  		var self = this;
  
  		$.extend(this, {
  			start: Math.PI/2,
  			step: 2*Math.PI/$("> *", this.element).length,
  			radiusX: 400,
  			radiusY: -45,
  			paddingX: this.element.outerWidth() / 2,
  			paddingY: this.element.outerHeight() / 2
  		});
  		
  		$("> *", this.element).css({ position: "absolute", top: 0, left: 0, zIndex: 1 });
  		this.rotate();
  		this.rotate("right");
  		
  		this.element.parent().bind("mousewheel", function(e,delta) {
  			if(self.autoRotator) window.clearInterval(self.autoRotator);
  			self.rotate(delta < 0 ? "right" : "left");
  			return false;
  		});
  		
  	};
  	
  	$.ui.carousel.prototype.rotate = function(d,ani,speed) {
  
  		this.start = this.start + (d == "right" ? -(speed || 0.03) : (speed || 0.03));
  		var o = this.options;
  		var self = this;
  		
  		setTimeout(function(){
  			$("> *", self.element).each(function(i) {
  				var angle = self.start + i * self.step;
  				var x = self.radiusX * Math.cos(angle);
  				var y = self.radiusY * Math.sin(angle);
  				var _self = this;
  				
  				var width = o.width * ((self.radiusY+y) / (2 * self.radiusY));
  				width = (width * width * width) / (o.width * o.width); //This makes the pieces smaller
  				var height = parseInt(width * o.height / o.width);
  	
  				//This is highly custom - it will hide the elements at the back
  				$(_self).css({ visibility: height < 30 ? "hidden" : "visible" });
  				if(height < 30 && !ani) return; //This imrpoves the speed, but cannot be used with animation
  				
  				
  				if(ani) {
  					$(_self).animate({
  						top: Math.round(self.paddingY + y - height/2) + "px",
  						left: Math.round(self.paddingX + x - width/2) + "px",
  						width: Math.round(width) + "px",
  						height: Math.round(height) + "px"
  					},{ duration: ani, easing: "easeOutQuad" });
  				$(_self).css({ zIndex: Math.round(parseInt(100 * (self.radiusY+y) / (2 * self.radiusY))) });
  				} else {
  					$(_self).css({
  						top: self.paddingY + y - height/2 + "px",
  						left: self.paddingX + x - width/2 + "px",
  						width: width + "px",
  						height: height + "px",
  						zIndex: parseInt(100 * (self.radiusY+y) / (2 * self.radiusY))
  					});
  				}
  
  				$("div.shadow",_self).css({ opacity: 1 - (width / o.width) });
  				
  			});
  		}, 0);
  	}
  
  
  /**
   * All credit here goes to DragonInteractive and Yuri Vishnevsky
   */
  var hoverEffects = function() {
  	var me = this;
  	var args = arguments;
  	var self = {
  		c: {
  			navItems: '.download .click-to-download, #launch-pad .launch-pad-button, div.demoflow-button-left, div.demoflow-button-right',
  			navSpeed: ($.browser.safari ? 600: 350),
  			snOpeningSpeed: ($.browser.safari ? 400: 250),
  			snOpeningTimeout: 150,
  			snClosingSpeed: function() {
  				if (self.subnavHovered()) return 123450;
  				return 150
  			},
  			snClosingTimeout: 700
  		},
  		init: function() {
  			//$('.bg', this.c.navItems).css({
  			//	'opacity': 0
  			//});
  			this.initHoverFades()
  		},
  		subnavHovered: function() {
  			var hovered = false;
  			$(self.c.navItems).each(function() {
  				if (this.hovered) hovered = true
  			});
  			return hovered
  		},
  		initHoverFades: function() {
  			//$('#navigation .bg').css('opacity', 0);
  			$(self.c.navItems).hover(function() {
  				self.fadeNavIn.apply(this)
  			},
  			function() {
  				var el = this;
  				setTimeout(function() {
  					if (!el.open) self.fadeNavOut.apply(el)
  				},
  				10)
  			})
  		},
  		fadeNavIn: function() {
  			$('.bg', this).stop().animate({
  				'opacity': 1
  			},
  			self.c.navSpeed)
  		},
  		fadeNavOut: function() {
  			$('.bg', this).stop().animate({
  				'opacity': 0
  			},
  			self.c.navSpeed)
  		},
  		initSubmenus: function() {
  			$(this.c.navItems).hover(function() {
  				$(self.c.navItems).not(this).each(function() {
  					self.fadeNavOut.apply(this);
  				});
  				this.hovered = true;
  				var el = this;
  				self.fadeNavIn.apply(el);
  			},
  			function() {
  				this.hovered = false;
  				var el = this;
  				if (!el.open) self.fadeNavOut.apply(el);
  			})
  		}
  	};
  	
  	return self;
  };