//
// Link stuff
//

function getCurrentLocation() {
	if(document.location.href.indexOf('#/') == -1) {
		return '';
	} 
	return document.location.href.replace(/(.*)\#(.*)/, '$2');
}


savedLocation = getCurrentLocation();
linkUpdating = false;

if(useAjaxNavigation && savedLocation != '') {
	// bookmark handling.
	// look at what's actually loaded now and if there is a trailing #/xxx... path. if there is, load the /xxx.
	var loadedNow = document.location.href.replace(/http:..[^\/]*(\/[^\#]*)\#?(.*)/, '$1');
	if(loadedNow != savedLocation) {
		document.location.href = savedLocation;
	}
}

function startHistoryMonitor() {
	 if(useAjaxNavigation) {
		 setInterval('checkLocation()', 100);
	 }
}

function checkLocation() {
	if(linkUpdating || (!useAjaxNavigation)) {
		return;
	}
	var here = getCurrentLocation();
	if(savedLocation != '' && document.location.href.indexOf('#/') == -1) {
		var afterDomain = document.location.href.substr(projectUrl.length);
		openLink(afterDomain);
	}
	if(here != savedLocation) {
		savedLocation = here;
		openLink(here);
	}
}

function openMenuLink(a, main, sub) {

	//menu.set(main, sub);
	//menu.init();

	if(!useAjaxNavigation) {
		return true;
	}

	try {
		return openLink(a.href.substr(projectUrl.length));
	} catch(e) {
		return false;
	}
}

function openLink(after) {

	if(!useAjaxNavigation) {
		return true;
	}

	linkUpdating = true;
	new Ajax.Request(projectUrl + after, {
		method: 'get',
		parameters: {
			hrcMode:	'json'
		},
		onSuccess: function(transport) {
			if(transport.readyState == 4) {
				var raw = transport.responseText;

				obj = eval('(' + raw + ')');
				
				if(obj.jsCount != 0) {
					loadJSFiles(obj.js);
				}
				if(obj.cssCount != 0) {
					loadCSSFiles(obj.css);
				}
				updateUserInfo(obj.user);
				

				$('content-middle').innerHTML = obj.contents;
					document.title = obj.title;

				var before = document.location.href.replace(/(.*)\#.*/, '$1') ;

				document.location.href = before + "#" + after;

				savedLocation = after;
				linkUpdating = false;
			}
		}
	}); 


	return false;
}


function loadJSFiles(files) {
	for(jsName in files) { 
		if(!(loadedJavascripts.contains(jsName))) {
			var jsUrl = files[jsName];
			loadedJavascripts.push(jsName);
			
			var head = document.getElementsByTagName("head")[0];
			var script = document.createElement('script');
			script.setAttribute('type', 'text/javascript');
			script.setAttribute('src', jsUrl);
			head.appendChild(script);
		}
	}
}

function loadCSSFiles(files) {
	for(cssName in files) { 
		if(!(loadedCss.contains(cssName))) {
			var cssCode = files[cssName];
			loadedCss.push(cssName);

			var head = document.getElementsByTagName("head")[0];
			var link = document.createElement('link');
			link.setAttribute("rel", "stylesheet")
			link.setAttribute("type", "text/css")
			link.setAttribute("href", cssCode)
			head.appendChild(link);
		}
	}
}

function updateUserInfo(obj) {

	if(cPrivateMessageUnread != obj.messages.count) {
		$('userPrivateMessagesDisplay').innerHTML = obj.messages.block;
		cPrivateMessageUnread = obj.messages.count;
	}
	try {	// feature-dependent
		if(cUserGiftPoints != obj.detail.gift.count) {
			$('userGiftPoints').innerHTML = obj.detail.gift.block;
			cUserGiftPoints = obj.detail.gift.count;
		}
	}catch(e) { }
	if(cUserTokenBonus != obj.detail.tokenBonus.count) {
		$('userTokenBonus').innerHTML = obj.detail.tokenBonus.block;
		cUserTokenBonus = obj.detail.tokenBonus.count;
	}
	if(cUserToken != obj.detail.token.count) {
		$('userToken').innerHTML = obj.detail.token.block;
		cUserToken = obj.detail.token.count;
	}
	if(cUserScore != obj.detail.score.count) {
		$('userScore').innerHTML = obj.detail.score.block;
		cUserScore = obj.detail.score.count;
	}
}

