/*
Copyright Justin Whitford 2006.
http://www.whitford.id.au/
Perpetual, non-exclusive license to use this code is granted
on the condition that this notice is left in tact.

20/10/2008
Many modifications made by the Department of Education Web Production team.
*/

var chunks;
var DAY = 24 * 60 * 60 * 1000;
var MAXLEN = 2048;
var delim = '|';
var maxCharacters = MAXLEN;

function doCrumbs(siteName) {

	maxCharacters = getMaxCharacters(siteName);

	if (cookieTest('crumbTest')) {
		crumbList = new CrumbList();
		var bcURL   = document.getElementById('bcURL');
		var bcTitle = document.getElementById('bcTitle');

		if (getCookie('trailLinks' + siteName)) {

			var newTrailLinks = getCookie('trailLinks' + siteName);
			var newTrailText  = getCookie('trailText' + siteName);
			if(addCrumb(bcURL.innerHTML, bcTitle.innerHTML, siteName)){
			    newTrailLinks = newTrailLinks + delim + bcURL.innerHTML;
			    newTrailText  = newTrailText  + delim + bcTitle.innerHTML;
			}
			var newTrailTotalLen = newTrailLinks.length + newTrailText.length;
		
			var newTrailLinkCrumbs = newTrailLinks.split(delim);
			var newTrailTextCrumbs = newTrailText.split(delim);

			var startPos = 0;
			//alert('newTrailTotalLen: ' + newTrailTotalLen + '\n maxCharacters: ' + maxCharacters);
			if (newTrailTotalLen < maxCharacters) {
				startPos = 0;
			} else {
				//alert('newTrailLinkCrumbs.len: '+newTrailLinkCrumbs.length);
				for ( var i = 1; i < newTrailLinkCrumbs.length; i++) {
					//alert('i: ' + i);
					newTrailLinks = newTrailLinks.substring(newTrailLinks.indexOf(delim)+1,newTrailLinks.length);
					newTrailText = newTrailText.substring(newTrailText.indexOf(delim)+1,newTrailText.length);
					newTrailTotalLen = newTrailLinks.length + newTrailText.length;
					//alert('\n trailLinks: ' + newTrailLinks +
					//		'\n trailTexts: ' + newTrailText +
					//		'\n newTrailTotalLen: ' + newTrailTotalLen + 
					//	    '\n (newTrailTotalLen < maxCharacters): ' + (newTrailTotalLen < maxCharacters) );
					if (newTrailTotalLen < maxCharacters) {
						startPos = i;
						break;
					}
				}
			}
			
			//alert('startPos' + startPos);
			for ( var j = startPos; j < newTrailLinkCrumbs.length; j++) {
				//alert( 'j: ' + j + ': '+ newTrailLinkCrumbs[j] + newTrailTextCrumbs[j] );
				if (newTrailTextCrumbs[j] != 'null') {
					crumbList.add(newTrailLinkCrumbs[j], newTrailTextCrumbs[j]);
				}
			}
        }

		// if can add crumb, add crumb to cookies
		if(!getCookie('trailLinks' + siteName) && addCrumb(bcURL.innerHTML, bcTitle.innerHTML, siteName)){
			crumbList.add(bcURL.innerHTML,bcTitle.innerHTML);
		}
		setCookie('trailLinks' + siteName, crumbList.links.join(delim), -1);
		setCookie('trailText' + siteName, crumbList.text.join(delim), -1);
		crumbList.output();
	}
}

function stripQueryStr(url) {
	var tmp = url;
	if (url.lastIndexOf("?") != -1) {
		tmp = url.substring(0, url.lastIndexOf("?"));
	}
	return tmp;
}

// determines if crumb can be added
function addCrumb(currentURL, currentTitle, siteName) {
	var add = false;
    var previousURL = null;
	var previousTitle = null;

	if(getCookie('trailLinks' + siteName)){
		var links = getCookie('trailLinks' + siteName).split(delim);
		var titles = getCookie('trailText' + siteName).split(delim);
		previousURL = links[links.length - 1];
		previousTitle = titles[titles.length - 1];

	}

    if ((currentURL.length + currentTitle.length) > maxCharacters) {
	  add = false;
    }
    else {  
		if (currentTitle != null && currentTitle != "") {
			// compare the urls
			if (previousURL == null) {
				// no previous, so always add.
				add = true;
			} else if (currentTitle == previousTitle) {
				// don't add title if they are the same and paths are different
				if (document.getElementById('bcComparePaths').innerHTML != 'false') {
					// add if titles are the same and paths are different
					if (stripQueryStr(currentURL) != stripQueryStr(previousURL)) {
						add = true;
					}
				}
			} else {
				add = true;
			}
		}
	}
	return add;
}

function CrumbList() {
	this.links = new Array();
	this.text = new Array();
	this.add = crumbListAdd;
	this.output = crumbListShow;
}

function crumbListAdd(href, text) {
	this.links[this.links.length] = href;
	this.text[this.text.length] = text;
}

function crumbListShow() {
	for ( var i in this.links) {
		if (i == this.links.length - 1) {
			document.write(((i == 0) ? "" : " &#8249; ") + this.text[i]);
			
		} else {
			document.write(((i == 0) ? "" : " &#8249; ") + "<a href='"
					+ this.links[i] + "'>" + this.text[i] + "</a>");
		}
	}
}

function cookieTest(name) {
	try {
		setCookie(name, 'true', -1);
		chunks = document.cookie.split("; ");
		return (getCookie(name) == 'true');
	} catch (e) {
		return false;
	}
}

function getCookie(name) {
	var returnVal = null;
	for ( var i in chunks) {
		var chunk = chunks[i].split("=");
		returnVal = (chunk[0] == name) ? unescape(chunk[1]) : returnVal;
	}
	return returnVal;
}

function setCookie(name, value, days) {
	if (value != null && value != "") {
		var expiry;
		if (days > 0) {
			expiry = new Date(new Date().getTime() + days * DAY);
		}
		document.cookie = name + "=" + escape(value)
				+ ((expiry) ? "; expires=" + expiry.toGMTString() : "")
				+ "; path=/";
		chunks = document.cookie.split("; ");
	}
}

function getMaxCharacters(siteName) {
	var cookiesLen = document.cookie.length;
	var iChunks = document.cookie.split("; ");
	var testString = '';

	for ( var i = 0; i < iChunks.length; i++) {
		var cookieLen = iChunks[i].length;
		var cookie = iChunks[i].split("=");
		var cookieName = cookie[0];
		if (cookieName == 'crumbTest' || cookieName == 'trailLinks' + siteName
				|| cookieName == 'trailText' + siteName) {
		} else {
			testString = testString + iChunks[i] + '  ';
		}
	}
	return (MAXLEN - testString.length);
}
