/*  
	Active navigation trail resolver
	(c) 2007 Kimmo Tapala / Verkkojulkaisut Oy
	
	Usage:
		- Mark navigation items according to these rules:
			- Navigation links ("a" tags) that point to section fronts should be marked with 'rel="alternate"'
			- Navigation links ("a" tags) that point to section subpages should be marked with 'rel="contents"'
		- Call resolveNavitems in the onload event of the body element
		- Use CSS to style the links. Active navigation items belong to class "active"
	
	Notice:
		- The resolver ignores all named anchor information (addresses that end with "#foobar") in the links and in the current location
		- You should always refer to the section fronts using only the folder paths and leave out the file name
*/

// Top level resolver
function resolveNavitems(){
	var currentURL = location.href; // The entire location URL is used in the resolution process
	currentURL = currentURL.replace(/(#.*)$/, ""); // Strip anchor names

	for(var i = 0; i < document.getElementsByTagName("a").length; i++){
		var linkURL = document.getElementsByTagName("a")[i].href;
		linkURL = linkURL.replace(/(#.*)$/, ""); // Strip anchor names
		
		// Check link relations and try if the link URLs match the criteria
		if((document.getElementsByTagName("a")[i].rel == "alternate" && (currentURL == linkURL || subfolderMatch(linkURL, currentURL))) || (document.getElementsByTagName("a")[i].rel == "contents" && currentURL == linkURL)){
			document.getElementsByTagName("a")[i].className += " active";
			var imageLinks = document.getElementsByTagName("a")[i].getElementsByTagName("img");
			for(var img = 0; img < imageLinks.length; img++){
				if(imageLinks[img].className && imageLinks[img].className.search("preloadableImage") >= 0 && imageLinks[img].src.search("_active") < 0){
					var imgSrc = imageLinks[img].src;
					var startPos = imgSrc.lastIndexOf(".");
					imageLinks[img].src = imgSrc.substring(0, startPos) + "_active" + imgSrc.substring(startPos);
				}
			}
		}
	}
}

// Compare two folder URLs and return true, if the first folder contains the second
function subfolderMatch(parentURL, childURL){	
	var parentPath = getPath(parentURL).replace("//", "/");
	var childPath = getPath(childURL).replace("//", "/");
	
	if(getProtocol(parentURL) == getProtocol(childURL) && getHost(parentURL) == getHost(childURL) && childPath.indexOf(parentPath) >= 0){
		return true;
	}
	else{
		return false;
	}
}

// Return the protocol part of the given URL
function getProtocol(url){
	var urlParts = url.split("://");
	var retval = "";
	
	if(urlParts.length > 1){
		retval = urlParts[0];
	}
	
	return retval;
}

// Return the host part of the given URL
function getHost(url){
	var urlParts = url.split("://");
	var retval = "";
	
	if(urlParts.length > 1){
		var pathParts = urlParts[1].split("/");
		retval = pathParts[0];
	}
	
	return retval;
}

// Return the path part of the given URL
function getPath(url){
	var urlParts = url.split("://");
	var retval = "";
	
	if(urlParts.length > 1){
		var pathParts = urlParts[1].split("/");
		if(pathParts.length > 1){
			var fullPath = "/";
			var fileIncluded = 0;
			
			if(pathParts[pathParts.length - 1].indexOf(".") >= 0){
				fileIncluded = 1;
			}
			
			for(var i = 1; i < pathParts.length - fileIncluded; i++){
				fullPath += pathParts[i] + "/";
			}
			
			retval = fullPath;
		}
	}
	
	return retval;
}
