function Portfolio(portfolio_json){
	var $ = jQuery;

	var Portfolio = $("#Portfolio");
	var View = $("#Portfolio_View");
	var numItems = portfolio_json.length;
	var box = {h: 450, w: Portfolio.width()};

	var stopEvent = function stopEvent(e) {
		e = e || window.event;

		//e.cancelBubble is supported by IE - this will kill the bubbling process.
		e.cancelBubble = true;
		e.returnValue = false;

		//e.stopPropagation works only in Firefox.
		if (e.stopPropagation) {
			e.stopPropagation();
		}
		
		if(e.preventDefault){
			e.preventDefault();
		}
		return false;
	}



	View.css("width", (box.w * numItems) + "px");

	for (var i = 0; i < numItems; i ++) (function(i, item){
		var vitem = $("<DIV>").addClass("item").appendTo(View);
		vitem.css("width", box.w + "px");
		vitem.append($("<IMG>"));
	
		var vtext = $("<DIV>").addClass("content");
		vtext.append($("<H2>").append(item.title));
		vtext.append($("<H3>").append(item.client));
		if(item.href) {
			vtext.append($("<a>").attr("href", item.href).attr("target","_blank").append(item.href)).append($("<BR>")).append($("<BR>"));
		}
		vtext.append($("<DIV>").append(item.body.replace("\n", "<br />")));
		vitem.append(vtext);

		if(item.images.length > 1){
			var imgPick = $("<DIV>").addClass("imgPick").appendTo(vitem);
			var selectImg = function(k, image){
				var buttons = $("button", imgPick).removeClass("selected");
				buttons.eq(k).addClass("selected");
				var curImg = $("img", vitem);
				var newImg = $("<IMG>").attr("title", image.name).css("opacity", 0).appendTo(vitem);
				newImg.load(function(){
					$(this).animate({opacity: 1}, 300, function(){
						curImg.remove();
					});
				});
				newImg.attr("src", image.full);
			} 

			for(var k = 0, l = item.images.length; k < l; k ++) (function(k, image){ 
				var button;
				imgPick.append(button = $("<BUTTON>").attr("title", image.name).append(k+1).click(function(event){
					selectImg(k /*+1*/, image);
				}));
				if(k == 0){
					button.addClass("selected");
				}
				imgPick.append($("<BR>"));
			})(k, item.images[k]);
		} else {
			vtext.css("marginLeft", (parseInt(vtext.css("marginLeft")) - 25) + "px" );
		}
	})(i, portfolio_json[i]);

	var loading = true;
	var select = this.select = function(position){
		var current = (parseInt(View.css("marginLeft")) * -1) / Portfolio.width();

		if(position == current && !loading){
			// togglePortfolio();
		} else {
				loading = false;
				var img = View.children().eq(position).find("img").eq(0);
				if(!img.attr("src")){
					img.attr("src", portfolio_json[position].images[0].full);
				}
				if(portfolioShowing){
					View.animate({ marginLeft: position * Portfolio.width() * -1}, 400);
				} else {
					View.css("marginLeft", position * Portfolio.width() * -1);
				}
			}
			return true;
		}

		return this;
	};

	function portfolioLoaded(json){
			portfolio = new Portfolio(json);
			portfolio.select(0);
      // return the portfolios 'opened' state
      return jQuery("#Portfolio_Details").css("display") != "none"
	};
	
	portfolioShowing = false;
	function togglePortfolio(button){
		if(portfolioShowing){
			jQuery("#Portfolio_Details").slideUp(animSpeed,repositionSlideoutForm);
			portfolioShowing = false;
			if(button){
				button.innerHTML = "Show Details";
			}
		} else {
			jQuery("#Portfolio_Details").slideDown(animSpeed,repositionSlideoutForm);
			portfolioShowing = true;
			if(button){
				button.innerHTML = "Hide Details";
			}
		}
	}

