﻿window.onload = function()
{
	installMailto();
	installTableOfContents();
	installImageExpander();
	installDefaultValueHiding();
}

function installMailto()
{
	var alinks = document.getElementsByTagName('a');
	if (alinks && alinks.length > 0)
	{
		for (var i = 0; i < alinks.length; i++)
		{
			var alink = alinks[i];
			var text = alink.textContent || alink.innerText;
			if (text && text.indexOf('(at)') >= 0)
			{
				var address = text.replace('(at)', '@');

				alink.href = 'mailto:'+ address;

				alink.textContent = address;
				alink.innerText = address;
			}
		}
	}
}

function installTableOfContents()
{
	var toc = document.getElementById('table_of_contents');
	if (toc)
	{
		var h2s = document.getElementsByTagName('h2'); 
		if (h2s && h2s.length > 0)
		{
			var newToc = document.createElement('div');
			newToc.id = 'table_of_contents';

			var newHeader = document.createElement('h2');
			newHeader.appendChild(document.createTextNode(toc.firstChild.nodeValue));
			newToc.appendChild(newHeader);

			var newList = document.createElement('ol');
			for (var i = 0; i < h2s.length; i++)
			{
				var h2 = h2s[i];
				if (h2.id)
				{
					var li = document.createElement('li');

					var a = document.createElement('a');
					a.href = '#' + h2.id;
					a.appendChild(document.createTextNode(h2.firstChild.nodeValue));

					li.appendChild(a);
					newList.appendChild(li);
				}
			}
			newToc.appendChild(newList);

			toc.parentNode.replaceChild(newToc, toc);
		}
	}
}

function installImageExpander()
{
	var addClick = function(img)
	{
		myAddEventListener(img, 'click', function() { toggleImageExpander(img) });
	};

	var alinks = document.getElementsByTagName('a');
	if (alinks && alinks.length > 0)
	{
		var alinkArray = new Array(alinks.length);
		for (var i = 0; i < alinks.length; i++)
		{
			alinkArray[i] = alinks[i];
		}
		for (var i = 0; i < alinkArray.length; i++)
		{
			var alink = alinkArray[i];
			var imgs = alink.getElementsByTagName('img');
			if (imgs && imgs.length > 0)
			{
				for (var j = 0; j < imgs.length; j++)
				{
					var img = imgs[j];
					if (img.src.indexOf('thumb') >= 0)
					{
						img.imagePath = alink.href;

						img.style.cursor = 'pointer';

						addClick(img);

						alink.parentNode.replaceChild(img, alink);
					}
				}
			}
		}
	}
}

function installDefaultValueHiding()
{
	var textareas = document.getElementsByTagName('textarea');
	if (textareas && textareas.length > 0)
	{
		for (var i = 0; i < textareas.length; i++)
		{
			var textarea = textareas[i];
			myAddEventListener(textarea, 'mousedown', function()
			{
				hideDefaultValue(textarea);
			});
			myAddEventListener(textarea, 'keydown', function()
			{
				hideDefaultValue(textarea);
			});
			myAddEventListener(textarea, 'blur', function()
			{
				showDefaultValue(textarea);
			});
		}
	}
}

function myAddEventListener(element, type, listener)
{
	if (element.addEventListener) // for W3C browser.
	{
		element.addEventListener(type, listener, false);
	}
	else if (element.attachEvent) // for Internet Explorer.
	{
		element.attachEvent('on' + type, listener);
	}
}

function getPosition(element)
{
	var ex = element.offsetLeft;
	var ey = element.offsetTop;

	while (element.offsetParent)
	{
		element = element.offsetParent;
		ex += element.offsetLeft;
		ey += element.offsetTop;
	}

	return { x: ex, y: ey };
}

function toggleImageExpander(img)
{
	if (!img.expanded)
	{
		var addClick = function(img, newImg)
		{
			myAddEventListener(newImg, 'click', function() { removeNewImg(img); });
		};

		var imgPosition = getPosition(img);

		var newImg = document.createElement('img');
		newImg.src = img.imagePath;
		newImg.style.display = 'block';
		newImg.style.position = 'absolute';
		newImg.style.left = imgPosition.x + 'px';
		newImg.style.top = imgPosition.y + 'px';
		newImg.style.cursor = 'pointer';

		addClick(img, newImg);

		img.parentNode.appendChild(newImg);

		img.expanded = true;
		img.newImg = newImg;
	}
}

function removeNewImg(img)
{
	img.parentNode.removeChild(img.newImg);
	img.expanded = false;
}

function hideDefaultValue(node)
{
	if (node.value == node.defaultValue)
	{
		node.value = '';
	}
}

function showDefaultValue(node)
{
	if (!node.value)
	{
		node.value = node.defaultValue;
	}
}
