/**
 * Troche przydatnych roznosci
 */

function MoveFocusToNextTabIndex(field, e)
{
	key = GetKeyCode(GetEvent(e));

	if (key == 13) 
	{
		e.returnValue = false;
		e.cancel = true;
		
		for (i = 0; i < field.form.elements.length; i++)
		{
			if (field.form.elements[i].tabIndex == field.tabIndex+1) 
			{
				field.form.elements[i].focus();
				if(field.form.elements[i].type == "text")
				{
					field.form.elements[i].select();
				}
				break;
			}			
		}		
		return false;
	}	
	return false;
}

// Funkcja zaznacza wybrany fragment tekstu w podanym polu typu 'text'
function SelectTextRange(field, start, end)
{
	if(start == undefined || start == -1) {
		start = 0;
	}
	if(end == undefined || start == -1) {
		end = field.value.length;
	}
	
	if(field.createTextRange) {
		var range = field.createTextRange();
		range.collapse(true);
		range.moveStart('character', start);
		range.moveEnd('character', end);
		range.select();
	} else if(field.setSelectionRange) {
		field.setSelectionRange(start, end);
	} else if(field.selectionStart) {
		field.selectionStart = start;
		field.selectionEnd = end;
	}
}

function GetEvent(event)
{
	if(!event && window.event)
	{
		event = window.event;
	}
	return event;
}

function GetKeyCode(event)
{
    if(typeof(event.keyCode ) == 'number') //DOM
    {
    	return event.keyCode;
    }
    else if( typeof( e.which ) == 'number' ) //NS 4 compatible
    {
    	return event.which;
    }
    else if( typeof( e.charCode ) == 'number'  ) //also NS 6+, Mozilla 0.9+
    {
    	return event.charCode;
    }
    else //total failure, we have no way of obtaining the key code
    {
    	return 0;
    }
}

function fillSelect(control, text)
{
    text = text.replace(/\r\n/, "\n");
    var t = text.split("\n");
    
    // wyczyszczenie wszystkich dotychczasowych elementow
    control.innerHTML = '';
    
    for(var i = 0; i < t.length; i++)
    {
        var option = document.createElement('option');
        option.setAttribute('value', i + 1);
        option.appendChild(document.createTextNode(t[i]));
        control.appendChild(option);
    }
}

// Metoda ustawia właściwość innerHTML elementu select.
// Może się to wydać dziwne, bo powinna starczać 1 linijka, żeby to zrobić. I wystarcza.
// Ale nie w explorerze. W tej wspaniałej przeglądarce istnieje błąd, który od 2003 roku
// uniemożliwia zrobienie tego 1 linijką. Ale jak się jest potentatem to nie ma co się męczyć.
// Funkcja obchodzi ten problem dla IE, a dla pozostałych przeglądarek wykonuje ową 1 linijkę.
// O błędzie można poczytać tutaj:
// http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
function setSelectInnerHtml(select, innerHTML)
{
	select.innerHTML = '';
	
	if (whichBrowser() == 'Internet Explorer')
	{
		var selTemp = document.createElement('micoxselect');
		var opt;
		selTemp.id = 'micoxselect1';
		document.body.appendChild(selTemp);
		selTemp = document.getElementById('micoxselect1');
		selTemp.style.display = 'none';
		if(innerHTML.indexOf('<option') < 0)
		{
			innerHTML = '<option>' + innerHTML + '</option>';
		}
		innerHTML = innerHTML.replace(/<option/g, '<span').replace(/<\/option/g, '</span');
		selTemp.innerHTML = innerHTML;
	
		for(var i = 0; i < selTemp.childNodes.length; i++)
		{
			var spantemp = selTemp.childNodes[i];
	
			if(spantemp.tagName)
			{
				opt = document.createElement('option');
				if(document.all)
				{
					select.add(opt);
	   			}
				else
				{
					select.appendChild(opt);
				}
	
				for(var j = 0; j < spantemp.attributes.length; j++)
				{
					var attrName = spantemp.attributes[j].nodeName;
					var attrVal = spantemp.attributes[j].nodeValue;
					if(attrVal)
					{
						try
						{
							opt.setAttribute(attrName,attrVal);
		  					opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
		 				}
						catch(e) { }
					}
				}
	
				if(spantemp.style)
				{
					for(var y in spantemp.style)
					{
						try
						{
							opt.style[y] = spantemp.style[y];
						}
						catch(e) { }
					}
				}
				opt.value = spantemp.getAttribute('value');
				opt.text = spantemp.innerHTML;
	
				opt.selected = spantemp.getAttribute('selected');
				opt.className = spantemp.className;
			}
		}
		document.body.removeChild(selTemp);
		selTemp = null;
	}
	else
	{
		select.innerHTML = innerHTML;
	}
}

// Funkcja sprawdza z jakÄ przeglÄdarkÄ mamy do czynienia
function whichBrowser() 
{
	var agt = navigator.userAgent.toLowerCase();
	
	if (agt.indexOf("opera") != -1) return 'Opera';
	if (agt.indexOf("staroffice") != -1) return 'Star Office';
	if (agt.indexOf("webtv") != -1) return 'WebTV';
	if (agt.indexOf("beonex") != -1) return 'Beonex';
	if (agt.indexOf("chimera") != -1) return 'Chimera';
	if (agt.indexOf("netpositive") != -1) return 'NetPositive';
	if (agt.indexOf("phoenix") != -1) return 'Phoenix';
	if (agt.indexOf("firefox") != -1) return 'Firefox';
	if (agt.indexOf("safari") != -1) return 'Safari';
	if (agt.indexOf("skipstone") != -1) return 'SkipStone';
	if (agt.indexOf("msie") != -1) return 'Internet Explorer';
	if (agt.indexOf("netscape") != -1) return 'Netscape';
	if (agt.indexOf("mozilla/5.0") != -1) return 'Mozilla';
	if (agt.indexOf('\/') != -1) 
	{
		if (agt.substr(0,agt.indexOf('\/')) != 'mozilla') 
		{	
			return navigator.userAgent.substr(0,agt.indexOf('\/'));
		}
		else
		{ 
			return 'Netscape';
		}
	} 
	else if (agt.indexOf(' ') != -1)
	{
		return navigator.userAgent.substr(0,agt.indexOf(' '));
	}
	else 
	{
		return navigator.userAgent;
	}
}