var g_maxLangCount = 10;
var g_curLangCount = 1;

if (window.addEventListener)
{
	window.addEventListener('load', onPageLoad, false);
}
else if (window.attachEvent)
{
	window.attachEvent('onload', onPageLoad);
}

function onPageLoad()
{
	var objSpanOrig = document.getElementById('lang_0');
	if (objSpanOrig != null)
	{
		var objSelect = getInnerSelect(objSpanOrig);
		if (objSelect != null)
		{
			g_maxLangCount = countOptions(objSelect);
		}
	}
	
	g_curLangCount = detectCurCount();
	if (g_curLangCount >= g_maxLangCount)
	{
		var objAdd = document.getElementById('addlang');
		if (objAdd != null)
		{
			objAdd.style.display = 'none';
		}
	}
}

function detectCurCount()
{
	var count = 0;
	while (count < g_maxLangCount)
	{
		var objSpan = document.getElementById('lang_' + (count + 1));
		if (objSpan == null)
		{
			break;
		}
		count++;
	}
	return count;
}

function countOptions(select)
{
	var childIdx;
	var options = 0;
	for (childIdx in select.childNodes)
	{
		var node = select.childNodes[childIdx];
		if ((node != null) && (node.nodeType == 1) && (node.nodeName == "OPTION"))
		{
			options++;
		}
	}
	return options;
}

function getInnerSelect(span)
{
	var childIdx;
	for (childIdx in span.childNodes)
	{
		var child = span.childNodes[childIdx];
		if ((child.nodeName == "SELECT") && (child.name == "language[]"))
		{
			return child;
		}
	}
	return null;
}

function getInnerLabel(span)
{
	var childIdx;
	for (childIdx in span.childNodes)
	{
		var child = span.childNodes[childIdx]; 
		if (child.nodeName == "LABEL")
		{
			return child;
		}
	} 
	return null;
}

// FIXME: this function can be standard method of tag object?
function removeAllChildren(tag)
{
	while (tag.firstChild != null)
	{
		tag.removeChild(tag.firstChild);
	}
}

function renumberLangs()
{
	var str = '';
	
	var objSpanOrig = document.getElementById('lang_0');
	if (objSpanOrig != null)
	{
		var objLabelOrig = getInnerLabel(objSpanOrig);
		if (objLabelOrig != null)
		{
			str = objLabelOrig.childNodes[0].nodeValue;
		}
	}

	var newNo = 1;
	for (i = 1; i <= g_curLangCount + 1; i++)
	{
		var objSpan = document.getElementById('lang_' + i);
		if (objSpan != null)
		{
			objSpan.setAttribute('id', 'lang_' + newNo);
			var objLabel = getInnerLabel(objSpan);
			if (objLabel != null)
			{
				var text = document.createTextNode(str + ' ' + newNo + ':');
				removeAllChildren(objLabel);
				objLabel.appendChild(text);
				newNo++;
			}
		}
	}
}

function add_another_language()
{
	var divElem = document.getElementById('langs');
	if (divElem == null)
	{
		return;
	}
	
	var orig = document.getElementById('lang_0');
	if (orig == null)
	{
		return;
	}
	
	g_curLangCount++;

	var newInfo = orig.cloneNode(true);
	newInfo.removeAttribute('style');
	newInfo.setAttribute('id', 'lang_' + g_curLangCount);
	
	var innerLabel = getInnerLabel(newInfo);
	if (innerLabel != null)
	{
		var textNode = document.createTextNode(' ' + g_curLangCount + ':');
		innerLabel.appendChild(textNode);
	}
	
	divElem.appendChild(newInfo);
	
	if (g_curLangCount >= g_maxLangCount)
	{
		var objAdd = document.getElementById('addlang');
		if (objAdd != null)
		{
			objAdd.style.display = 'none';
		}
	}
}

function delete_language(span)
{
	if (g_curLangCount == g_maxLangCount)
	{
		var objAdd = document.getElementById('addlang');
		if (objAdd != null)
		{
			objAdd.style.display = 'block';
		}
	}
	var parent = span.parentNode;
	parent.removeChild(span);
	g_curLangCount--;
	renumberLangs();
}