if (typeof $G == 'undefined') { 
	var $G = {};
}

$G.fx = new (function() {
	var self = this;
	
	self.items = {};
	
	jQuery.easing.def = "easeOutExpo";
	self.sSpeed = 'slow';
	self.sEasing = 'easeOutExpo';
	self.fSpeed = 'fast';	
	
	self.toggleBox = function( box ) {
		if (typeof self[box] == 'undefined') {
			return false;
		}
		if (self[box].isOpen()) {
			self[box].disappear();
		} else {
			self[box].open();
		}
	};
	
	self.allClose = function() {
		for (x in self.items) {
			self.items[x].removeClass('open');
		}
	}
	
	self.getStory = function() {
		if (typeof self.items.story == 'undefined') {
			self.items.story = jQuery("#storyBox");
		}
		return self.items.story;
	}
	self.getPortfolio = function() {
		if (typeof self.items.portfolio == 'undefined') {
			self.items.portfolio = jQuery("#portfBox");
		}
		return self.items.portfolio;
	}
	self.getServices = function() {
		if (typeof self.items.services == 'undefined') {
			self.items.services = jQuery("#servicesBox");
		}
		return self.items.services;
	}
	
	self.story = {
		isOpen: function() {
			return self.getStory().hasClass('open');
		},
		open: function() {
			self.getPortfolio()
				.fadeOut(self.fSpeed );
			self.getServices()
				.fadeOut(self.fSpeed );
			self.allClose();
			self.getStory()
				.prev().animate({ top: '-434px' }, self.sSpeed, self.sEasing).end()
				.animate({ top: '44' }, self.sSpeed, self.sEasing, self.story.appear )
				.addClass("open");
			self.story.nudgeUp();
		},
		close: function() {
			self.getStory()
				.prev().animate({ top: '0' }, self.sSpeed, self.sEasing).end()
				.animate({ top: '0' }, self.sSpeed, self.sEasing )
				.removeClass("open");
			self.story.nudgeDn();
		},
		appear: function() {
			self.getStory()
				.fadeIn(self.fSpeed);
		},
		disappear: function() {
			self.getStory()
				.fadeOut(self.fSpeed, self.story.close );
		},
		nudgeUp: function (lines) {
			self.getPortfolio()
				.prev().animate({ top: '-'+self.getPortfolio().prev().height() }, self.sSpeed, self.sEasing);
			self.getServices()
				.prev().animate({ top: '-'+self.getServices().prev().height() }, self.sSpeed, self.sEasing);
		},
		nudgeDn: function (lines) {
			self.getPortfolio()
				.prev().animate({ top: '0' }, self.sSpeed, self.sEasing);
			self.getServices()
				.prev().animate({ top: '0' }, self.sSpeed, self.sEasing);
		}
	};
	self.portfolio = {
		isOpen: function() {
			return self.getPortfolio().hasClass('open');
		},
		open: function() {
			self.getStory()
				.fadeOut(self.fSpeed );
			self.getServices()
				.fadeOut(self.fSpeed );
			self.allClose();
			self.getPortfolio()
				.prev().animate({ top: '-474px' }, self.sSpeed, self.sEasing).end()
				.css({width:'100%', visibility: 'visible', display:'none'})
				.animate({ top: '10px' }, self.sSpeed, self.sEasing, self.portfolio.appear )
				.addClass("open");
			self.portfolio.nudgeUp();
		},
		close: function() {
			self.getPortfolio()
				.removeClass("open");
			self.story.open();
		},
		appear: function() {
			/* fix-up for ie rendering issue */
			if (jQuery.browser.msie) self.getPortfolio().width(self.getPortfolio().width() + 424);

			self.getPortfolio()
				.fadeIn(self.fSpeed);
		},
		disappear: function() {
			self.getPortfolio()
				.fadeOut(self.fSpeed, self.portfolio.close );
		},
		nudgeUp: function (lines) {
			self.getStory()
				.prev().animate({ top: '-474px' }, self.sSpeed, self.sEasing);
			self.getServices()
				.prev().animate({ top: '-38px' }, self.sSpeed, self.sEasing);
		},
		nudgeDn: function (lines) {
			self.getStory()
				.prev().animate({ top: '-424px' }, self.sSpeed, self.sEasing);
			self.getServices()
				.prev().animate({ top: '0' }, self.sSpeed, self.sEasing);
		}
	};
	self.services = {
		isOpen: function() {
			return self.getServices().hasClass('open');
		},
		open: function() {
			self.getPortfolio()
				.fadeOut(self.fSpeed );
			self.getStory()
				.fadeOut(self.fSpeed );
			self.allClose();
			self.getServices()
				.prev().animate({ top: '-474px' }, self.sSpeed, self.sEasing).end()
				.animate({ top: '34px' }, self.sSpeed, self.sEasing, self.services.appear )
				.addClass("open");
			self.services.nudgeUp();
		},
		close: function() {
			self.getServices()
				.removeClass("open");
			self.portfolio.open();
		},
		appear: function() {
			self.getServices()
				.fadeIn(self.fSpeed);
		},
		disappear: function() {
			self.getServices()
				.fadeOut(self.fSpeed, self.services.close );
		},
		nudgeUp: function (lines) {
			self.getStory()
				.prev().animate({ top: '-474px' }, self.sSpeed, self.sEasing);
			self.getPortfolio()
				.prev().animate({ top: '-474px' }, self.sSpeed, self.sEasing);
		}
	};
	return self;
})();
