var numMyLinks = 0;
var maxNumMyLinks = 50;

function addMyLink(name, value) {
	var numLinks = getNumMyLinks();
	if (name && name != '' && value && value != '' && !hasMyLink(name)) {
		setNumMyLinks(numLinks + 1);
		setMyLink(numLinks, name, value);
	}
	sortMyLinks();
	refreshMyLinks();
}

// linkNum is zero-based
function removeMyLink(evt) {
	if (this && this.name.indexOf('my-link-') == 0) {
		var linkNum = parseInt(this.name.substr(this.name.lastIndexOf('-') + 1));
		// move all cookied links up 1, starting at linkNum + 1
		// delete cookie at numLinks
		// decrement numLinks
		var numLinks = getNumMyLinks();
		for (var i = linkNum; i < numLinks - 1; i++) {
			setMyLink(i, getMyLinkName(i + 1), getMyLinkValue(i + 1));
		}
		deleteCookie('my-links-' + (numLinks-1) + '-' + 0, '/', '');
		deleteCookie('my-links-' + (numLinks-1) + '-' + 1, '/', '');
		setNumMyLinks(numLinks - 1);
		refreshMyLinks();
		
		if (this.tagName == 'A' || this.tagName == 'a') {
			cancelEvent(evt, true);
		}
	}
}

// returns a 2-dim array, ex. [['link name', 'link value'],['link name', 'link value']] 
function getMyLinks() {
	var links = new Array();
	var numLinks = getNumMyLinks();
	for (i = 0; i < numLinks; i++) {
		var linkName = getMyLinkName(i);
		var linkValue = getMyLinkValue(i);
		if (linkName && linkValue) {
			links.push(new Array(linkName, linkValue));
		}
	}
	return links;
}

// linkNum is zero-based
function getMyLinkName(linkNum) {
	return getCookie('my-links-' + linkNum + '-' + 0);
}

// linkNum is zero-based
function getMyLinkValue(linkNum) {
	return getCookie('my-links-' + linkNum + '-' + 1);
}

// linkNum is zero-based
function setMyLink(linkNum, name, value) {
	if (linkNum > -1 && linkNum < getNumMyLinks()) {
		setCookie('my-links-' + linkNum + '-0', name, 365, '/', '');
		setCookie('my-links-' + linkNum + '-1', value, 365, '/', '');
	}
}

function hasMyLink(linkName) {
	var hasLink = false;
	var numLinks = getNumMyLinks();
	for (i = 0; i < numLinks; i++) {
		if (linkName == getMyLinkName(i)) {
			hasLink = true;
			break;
		}
	}
	return hasLink;
}

function sortMyLinks() {
	var links = getMyLinks();
	var sortedLinks = new Array();
	if (links != null && links.length > 0) {
		for (var i = 0; i < links.length; i++) {
			var currName = links[i][0];
			var insertAt = 0;
			while (insertAt < sortedLinks.length && currName >= sortedLinks[insertAt][0]) {
				insertAt++;
			}
			sortedLinks.splice(insertAt, 0, links[i]);
		}
	}
	
	for (var i = 0; i < sortedLinks.length; i++) {
		setMyLink(i, sortedLinks[i][0], sortedLinks[i][1]);
	}
}

function getNumMyLinks() {
	//var numLinks = getCookie('numMyLinks');
	if (numMyLinks != null && numMyLinks == parseInt(numMyLinks)) {
		return numMyLinks > maxNumMyLinks ? maxNumMyLinks : numMyLinks;
	} else {
		return 0;
	}	
}

function setNumMyLinks(numLinks) {
	if (numLinks > -1 && numLinks < maxNumMyLinks) {
		//setCookie('numMyLinks', numLinks, 7300, '/', '');
		numMyLinks = numLinks
	}	
}

function initializeNumMyLinks() {
	var supposed = 0;
	while (supposed < maxNumMyLinks && getMyLinkName(supposed) && getMyLinkValue(supposed)) { // supposed number
		supposed++;
	}
	
	var expected = 0
	for (var j = 0; j < maxNumMyLinks; j++) { // expected number
		if (getMyLinkName(j) && getMyLinkValue(j)) {
			expected++;
		}
	}
	
	setNumMyLinks(supposed + (expected-supposed));
	
	if (supposed != expected) { // my-link expired or deleted via browser cookies
		reinitializeMyLinks();
	}
	if (window.console) console.log('initializeNum');	  
}

function reinitializeMyLinks(expectedNumber) {
	var currLinkNum = 0;
	var currLinkName;
	var currLinkValue;
	for (var i = 0; i < expectedNumber && i < maxNumMyLinks; i++) {
		currLinkName = getMyLinkName(i);
		currLinkValue = getMyLinkValue(i);  
		if (currLinkName && currLinkValue) {
			setMyLink(currLinkNum++, currLinkName, currLinkValue)
		}
	} 
}

function refreshMyLinks() {
	var newRows = new Array();
	var links = getMyLinks();
	for (var i = 0; i < links.length; i++) {
		var newRow = document.createElement('tr');
		newRow.className = 'my-link';

		var col1 = document.createElement('td');
		col1.width = 15;
		newRow.appendChild(col1);
		var col1Content = document.createElement('img');
		col1Content.src = staticPath + '/images/button_small_blue.gif';
		col1Content.width = 15;
		col1Content.height = 15;
		col1.appendChild(col1Content);
		
		var col2 = document.createElement('td');
		col2.width = 7;
		newRow.appendChild(col2);
		var col2Content = document.createElement('img');
		col2Content.src = staticPath + '/images/spacer.gif';
		col2Content.width = 7;
		col2Content.height = 1;
		col2.appendChild(col2Content);
		
		var col3 = document.createElement('td');
		col3.width = 113;
		col3.align = 'left';
		col3.className = 'small_blue';
		newRow.appendChild(col3);
		var col3Content = document.createElement('a');
		col3Content.className = 'small_blue';
		col3Content.href = encodeURI(links[i][1]);
		col3.appendChild(col3Content);
		var col3ContentText = document.createTextNode(links[i][0]);
		col3Content.appendChild(col3ContentText);
		
		var col4 = document.createElement('td');
		col4.width = 7;
		newRow.appendChild(col4);
		var col4Content = document.createElement('img');
		col4Content.src = staticPath + '/images/spacer.gif';
		col4Content.width = 7;
		col4Content.height = 1;
		col4.appendChild(col4Content);
		
		var col5 = document.createElement('td');
		col5.width = 20;
		col5.align = 'center';
		newRow.appendChild(col5);
		var col5Content = document.createElement('a');
		col5Content.name = 'my-link-' + i;
		col5Content.href = '#';
		addEvent(col5Content, 'click', removeMyLink);
		col5.appendChild(col5Content);
		var col5ContentImg = document.createElement('img');
		col5ContentImg.src = staticPath + '/images/button_x.gif';
		col5ContentImg.width = 15;
		col5ContentImg.height = 12;
		col5ContentImg.border = 0;
		col5Content.appendChild(col5ContentImg);
		
		newRows.push(newRow);

		var newRowSpacer = document.createElement('tr');
		newRowSpacer.className = 'my-link-spacer';

		var newRowSpacerCol1 = document.createElement('td');
		newRowSpacerCol1.colSpan = 5;
		newRowSpacer.appendChild(newRowSpacerCol1);
		var newRowSpacerCol1Content = document.createElement('img');
		newRowSpacerCol1Content.src = staticPath + '/images/spacer.gif';
		newRowSpacerCol1Content.width = 1;
		newRowSpacerCol1Content.height = 6;
		newRowSpacerCol1.appendChild(newRowSpacerCol1Content);

		newRows.push(newRowSpacer);
	}
	
	if (document.getElementById('my-links')) {
		var myLinks = document.getElementById('my-links');
		var myLinksChildren = myLinks.childNodes;
		var myLinksLinksToRemove = new Array();
		for (var i = 0; i < myLinksChildren.length; i++) {
			if (myLinksChildren[i].className == 'my-link' || myLinksChildren[i].className == 'my-link-spacer') {
				myLinksLinksToRemove.push(myLinksChildren[i]);
			}
		}
		
		for (var i = 0; i < myLinksLinksToRemove.length; i++) {
			myLinks.removeChild(myLinksLinksToRemove[i]);
		}
		
		var myLinksLastSpacer = document.getElementById('my-links-last-spacer');
		for (var i = 0; i < newRows.length; i++) {
			if(myLinksLastSpacer != null) {
				myLinks.insertBefore(newRows[i], myLinksLastSpacer);
			} else {
				myLinks.appendChild(newRows[i]);
			}
		}
	}
	
		if (window.console) console.log('refreshed');
}

function myLinksRefresh(event) {
	initializeNumMyLinks();
	refreshMyLinks();
}

function myLinksRefreshFirefox(event) {
	if (event.persisted) {
		myLinksRefresh();
	}
}

addEvent(window, 'load', myLinksRefresh);
addEvent(window, 'pageshow', myLinksRefreshFirefox);

