/**
 * Implementuje funkcjonalność znacznika HTML: <select> umożliwiając
 * zastosowanie stylów CSS do różnych elementów komponentu
 */
var width = 0;

function tamingselect() 
{
	if (!document.getElementById && !document.createTextNode) 
	{
		return;
	}
	// Classes for the link and the visible dropdown
	var ts_selectclass = 'turnintodropdown'; // class to identify selects
	var ts_selectclass2 = 'turnintodropdown2'; // class to identify selects z
												// onchangiem
	var ts_listclass = 'turnintoselect'; // class to identify ULs

	var ts_boxclass = 'dropcontainer'; // parent element
	var ts_triggeron = 'combo_trigger'; // class for the active trigger link
	var ts_triggeroff = 'combo_trigger'; // class for the inactive trigger
											// link
	var ts_dropdownclosed = 'dropdownhidden'; // closed dropdown
	var ts_dropdownopen = 'dropdownvisible'; // open dropdown
	/*
	 * Turn all selects into DOM dropdowns
	 */

	var count = 0;
	var toreplace = new Array();
	var sels = document.getElementsByTagName('select');
	
	/** Pobranie nazwy tabeli */
	//var tableName = get_table_name();
	var funct = new Array;
	var i = 0;
	for ( i = 0; i < sels.length; i++) 
	{
		if (ts_check(sels[i], ts_selectclass2)) 
		{
			var lv_width = fix_combo_width(sels[i]);
			var hiddenfield = document.createElement('input');
			hiddenfield.name = sels[i].name;
			hiddenfield.type = 'hidden';
			hiddenfield.id = sels[i].id;
			//hiddenfield.value = sels[i].options[0].value;
			sels[i].parentNode.insertBefore(hiddenfield, sels[i]);
			var trigger = document.createElement('a');
			ts_addclass(trigger, ts_triggeroff);
			trigger.style.width = lv_width;
			trigger.style.textAlign = 'left';
			trigger.onclick = function() 
			{
				ts_swapclass(this, ts_triggeroff, ts_triggeron);
				ts_swapclass(this.parentNode.getElementsByTagName('ul')[0],	ts_dropdownclosed, ts_dropdownopen);
				return false;
			}
			trigger.appendChild(document.createTextNode(sels[i].options[0].text));

			sels[i].parentNode.insertBefore(trigger, sels[i]);
			var replaceUL = document.createElement('ul');
			for ( var j = 0; j < sels[i].getElementsByTagName('option').length; j++) 
			{
				if (sels[i].getElementsByTagName('option')[j].selected == true)
				{
					hiddenfield.value = sels[i].getElementsByTagName('option')[j].value;
					trigger.innerHTML = sels[i].getElementsByTagName('option')[j].innerHTML;
				}
				var newli = document.createElement('li');
				newli.style.width = lv_width;
				//var newa = document.createElement('a');
				newli.name = get_onchange(sels[i]);
				newli.v = sels[i].getElementsByTagName('option')[j].value;
				newli.elm = hiddenfield;
				newli.istrigger = trigger;

				var newa=document.createElement('a');
				newa.style.width = lv_width;
				newa.style.textAlign = 'left';
				newa.appendChild(document.createTextNode(sels[i].getElementsByTagName('option')[j].text));

//				newli.innerHTML = '<a style=\'width: '+lv_width+';\' >'+newli.v+'</a>'; 

				newli.onclick=function()
				{
					myFunc(this);
				}
				newli.appendChild(newa);
				replaceUL.appendChild(newli);
			}
			ts_addclass(replaceUL, ts_dropdownclosed);
			var div = document.createElement('div');
			div.appendChild(replaceUL);
			ts_addclass(div, ts_boxclass);
			sels[i].parentNode.insertBefore(div, sels[i]);
			toreplace[count] = sels[i];
			count++;
		}
	}
	for (var k = 0; k < count; k++) 
	{
		toreplace[k].parentNode.removeChild(toreplace[k]);
	}
	function myFunc(that)
	{
		that.elm.value = that.v;
		ts_swapclass(that.parentNode, ts_dropdownopen, ts_dropdownclosed);
		that.istrigger.firstChild.nodeValue = that.firstChild.firstChild.nodeValue;
		eval(that.name);
	}
	function ts_check(o, c) 
	{
		return new RegExp('\\b' + c + '\\b').test(o.className);
	}
	function ts_swapclass(o, c1, c2) 
	{
		var cn = o.className
		o.className = !ts_check(o, c1) ? cn.replace(c2, c1) : cn.replace(c1, c2);
	}
	function ts_addclass(o, c) 
	{
		if (!ts_check(o, c)) 
		{
			o.className += o.className == '' ? c : ' ' + c;
		}
	}
}

/** funkcja która dynamicznie generuje długość kombo*/
function fix_combo_width(pm_parent) 
{
	width = 0;
	/** Sprawdzenie czy przekazany parametr posiada atrybut id */
	if (pm_parent.id == null || pm_parent.id == '')
	{
		alert('Błąd: Select musi posiadać unikalne ID w ramach okna.');
		/** Ustaw poprawne działanie kontrolki */
		return '10em';
	}
	var node = document.getElementById(pm_parent.id);
	/** Oblicz długość combo jeśli dev nie podał atrybutu width */
	if (node.style.width == null || node.style.width == '') {
		var optionList = node.getElementsByTagName('option');
		for ( var i = 0, j = optionList.length; i < j; i++) 
		{
			if (width < optionList[i].text.length) 
			{
				width = optionList[i].text.length;
			}
		}
		/** Najdłuższy element + 1*/
		return (width + 1 + 'em');
	} 
	else 
	{
		width = node.style.width;
		return width;
	}
}

/** funkcja zwracająca nazwe tabeli na oknie.*/
function get_table_name()
{
//	var inputs = document.getElementsByTagName('input');
//	for (var i = 0; i < inputs.length; i++)
//	{
//		
//		if (inputs[i].className == 'table_name')
//		{
//			alert('TABLE_NAME: ' + inputs[i].className)
//			return inputs[i].value;
//		}
//	}	
//	alert('Błąd przy pobraniu nazwy tabeli');
	return false;
}

/** funkcja zwracająca wartość onchange selecta.*/
function get_onchange(obj)
{
	var tmpString = new String (obj.onchange);
	return tmpString.substring(tmpString.indexOf('{')+1,tmpString.indexOf('}'));
}