
String.prototype.parseURL = function(query) {
	var url=this,
		rx=/^((?:ht|f|nn)tps?)\:\/\/(?:([^\:\@]*)(?:\:([^\@]*))?\@)?([^\/]*)([^\?\#]*)(?:\?([^\#]*))?(?:\#(.*))?$/,
		rg=[null,'scheme','user','pass','host','path','query','fragment'],
		r=url.match(rx),i,q,ret={};
	if (r==null) return ret;
	for (i=1; i<rg.length; i++) 
		if (r[i]!=undefined)
			ret[rg[i]]=r[i];	
	if (ret.path=='') ret.path='/';
	if (query!=undefined && r[6]!=undefined) {
		var q=r[6];
		ret.query={};
		q=q.split('&');
		for (var i=0; i<q.length; i++) {
			q[i]=q[i].split('=',2);
			ret.query[unescape(q[i][0])]=unescape(q[i][1]);
		}
	}
	ret.build = function () {
		var ret=this.scheme+'://';
		if (this.user!=undefined) {
			ret+=this.user;
			if (this.pass!=undefined)
				ret+=':'+this.pass;
			ret+='@';
		}
		ret+=this.host+this.path;
		if (ret.query != undefined) {
			if (this.query.constructor == String)
				ret+='?'+this.query;
			else {
				var i,tmp=[];
				for (i in this.query)
					tmp.push(escape(i)+'='+escape(this.query[i]));
				ret+='?'+tmp.join('&');
			}
		}
		if (this.fragment!=undefined)
			ret+='#'+this.fragment;
		return ret;
	}
	return ret;
}
window.urlObject=window.location.toString().parseURL();
$(function () {
	$('.column .overlay, .column .bar').hover(function (e) {
		//Get parent of this node with class 'column'
		var owner=$(this).parents('.column');
		//if relatedTarget's similarly described parent is the same, don't 
		//	execute the rollover
		if (owner[0]==$(e.fromElement||e.relatedTarget).parents('.column')[0]) return true;
		//Set the animation state, so we can't queue up more events than time
		if (!!owner[0].state) return true;
		owner[0].state=true;
		owner.find('.out').animate({opacity:0}, function () {
			//When we're done, close the animation state
			owner[0].state=false;
		});
	},function (e) {
		//See above
		var owner=$(this).parents('.column');
		if (owner[0]==$(e.toElement||e.relatedTarget).parents('.column')[0]) return true;
		//We don't want to prevent a rolldown
		owner[0].state=true;
		owner.find('.out').animate({opacity:1}, function () {
			//But we do want to set the states as before
			owner[0].state=false;
			this.style.filter='';
		});
	}).each(function () {
		this.mode='out';
	});
	$('.column .overlay, .column .go').click(function () {
		var owner=$(this).parents('.column');
		//$('.column').not(owner[0]).find('.back').click();
		owner.find('.nav a').eq(0).click();
		owner.find('.bar').animate({top: 549});
		owner.find('.overlay').animate({top: -566},{queue: false}).fadeOut();	
		owner.find('.bar .go').fadeOut();
	});
	$('.column .back').click(test=function () {
		var owner=$(this).parents('.column');
		owner.find('.overlay').animate({top: 0},{queue: false}).fadeIn('fast');
		owner.find('.bar').animate({top: 272});
		owner.find('.bar .go').fadeIn();

	});
	
	$('.nav a').click(function () {
		var ref=this.href.parseURL();
		$(this).parents('.nav').find('li').removeClass('active');
		$(this).parents('li').addClass('active');
		var here=window.urlObject;
		if (ref.scheme == here.scheme && ref.host == here.host) {
			if (ref.path==here.path) {
				var cnt=$(this).parents('.column');
				cnt.find('.body').load('_inc/content.html #'+ref.fragment);
				window.location.hash='#'+ref.fragment;
				return false;
			}
		}
		return true;
	});
	$('#footer a').click(function () {
		var ref=this.href.parseURL();
		var here=window.urlObject;
		window.location.hash='#'+ref.fragment;
		reHash();
		if (ref.scheme == here.scheme && ref.hosts == here.host && ref.path == here.path) {
				return false;
		}
		return true;
	});
	function reHash() {
		var fr=window.location.hash;
		if (fr=='#' || fr=='') return true;
		var frp=$('.nav a[href="'+fr+'"], div'+fr+'');
		var frp=frp.parents('.column').add(frp.filter('.column'));
		frp.find('.overlay').click();
		$('.nav a[href="'+window.location.hash+'"]').click();
	}
	reHash();
});
