function getElement(id, obj)
{
	if (typeof obj == 'undefined')
		obj = document;
	else
		obj = obj.document;

	if (obj.all)
		var element = obj.all[id];
	else if (obj.layers)
		var element = obj.layers[id];
	else if (obj.getElementById)
		var element = obj.getElementById(id);
	else
		return null;

	return element;
}

sprintfWrapper = {

	init : function () {

		if (typeof arguments == 'undefined') { return null; }
		if (arguments.length < 1) { return null; }
		if (typeof arguments[0] != 'string') { return null; }
		if (typeof RegExp == 'undefined') { return null; }

		var string = arguments[0];
		var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);
		var matches = new Array();
		var strings = new Array();
		var convCount = 0;
		var stringPosStart = 0;
		var stringPosEnd = 0;
		var matchPosEnd = 0;
		var newString = '';
		var match = null;

		while (match = exp.exec(string)) {
			if (match[9]) { convCount += 1; }

			stringPosStart = matchPosEnd;
			stringPosEnd = exp.lastIndex - match[0].length;
			strings[strings.length] = string.substring(stringPosStart, stringPosEnd);

			matchPosEnd = exp.lastIndex;
			matches[matches.length] = {
				match: match[0],
				left: match[3] ? true : false,
				sign: match[4] || '',
				pad: match[5] || ' ',
				min: match[6] || 0,
				precision: match[8],
				code: match[9] || '%',
				negative: parseInt(arguments[convCount]) < 0 ? true : false,
				argument: String(arguments[convCount])
			};
		}
		strings[strings.length] = string.substring(matchPosEnd);

		if (matches.length == 0) { return string; }
		if ((arguments.length - 1) < convCount) { return null; }

		var code = null;
		var match = null;
		var i = null;

		for (i=0; i<matches.length; i++) {

			if (matches[i].code == '%') { substitution = '%' }
			else if (matches[i].code == 'b') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
				substitution = sprintfWrapper.convert(matches[i], true);
			}
			else if (matches[i].code == 'c') {
				matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
				substitution = sprintfWrapper.convert(matches[i], true);
			}
			else if (matches[i].code == 'd') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
				substitution = sprintfWrapper.convert(matches[i]);
			}
			else if (matches[i].code == 'f') {
				matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
				substitution = sprintfWrapper.convert(matches[i]);
			}
			else if (matches[i].code == 'o') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
				substitution = sprintfWrapper.convert(matches[i]);
			}
			else if (matches[i].code == 's') {
				matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)
				substitution = sprintfWrapper.convert(matches[i], true);
			}
			else if (matches[i].code == 'x') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
				substitution = sprintfWrapper.convert(matches[i]);
			}
			else if (matches[i].code == 'X') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
				substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
			}
			else {
				substitution = matches[i].match;
			}

			newString += strings[i];
			newString += substitution;

		}
		newString += strings[i];

		return newString;

	},

	convert : function(match, nosign){
		if (nosign) {
			match.sign = '';
		} else {
			match.sign = match.negative ? '-' : match.sign;
		}
		var l = match.min - match.argument.length + 1 - match.sign.length;
		var pad = new Array(l < 0 ? 0 : l).join(match.pad);
		if (!match.left) {
			if (match.pad == '0' || nosign) {
				return match.sign + pad + match.argument;
			} else {
				return pad + match.sign + match.argument;
			}
		} else {
			if (match.pad == '0' || nosign) {
				return match.sign + match.argument + pad.replace(/0/g, ' ');
			} else {
				return match.sign + match.argument + pad;
			}
		}
	}
}

sprintf = sprintfWrapper.init;

function sprintf2()
{
   if (!arguments || arguments.length < 1 || !RegExp)
   {
      return;
   }
   var str = arguments[0];
   var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
   var a = b = [], numSubstitutions = 0, numMatches = 0;
   while (a = re.exec(str))
   {
      var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
      var pPrecision = a[5], pType = a[6], rightPart = a[7];

      numMatches++;
      if (pType == '%')
      {
         subst = '%';
      }
      else
      {
         numSubstitutions++;
         if (numSubstitutions >= arguments.length)
         {
            alert('Error! Not enough function arguments (' + (arguments.length - 1)
               + ', excluding the string)\n'
               + 'for the number of substitution parameters in string ('
               + numSubstitutions + ' so far).');
         }
         var param = arguments[numSubstitutions];
         var pad = '';
                if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
           else if (pPad) pad = pPad;
         var justifyRight = true;
                if (pJustify && pJustify === "-") justifyRight = false;
         var minLength = -1;
                if (pMinLength) minLength = parseInt(pMinLength);
         var precision = -1;
                if (pPrecision && pType == 'f')
                   precision = parseInt(pPrecision.substring(1));
         var subst = param;
         switch (pType)
         {
         case 'b':
            subst = parseInt(param).toString(2);
            break;
         case 'c':
            subst = String.fromCharCode(parseInt(param));
            break;
         case 'd':
            subst = parseInt(param) ? parseInt(param) : 0;
            break;
         case 'u':
            subst = Math.abs(param);
            break;
         case 'f':
            subst = (precision > -1)
             ? Math.round(parseFloat(param) * Math.pow(10, precision))
              / Math.pow(10, precision)
             : parseFloat(param);
            break;
         case 'o':
            subst = parseInt(param).toString(8);
            break;
         case 's':
            subst = param;
            break;
         case 'x':
            subst = ('' + parseInt(param).toString(16)).toLowerCase();
            break;
         case 'X':
            subst = ('' + parseInt(param).toString(16)).toUpperCase();
            break;
         }
         var padLeft = minLength - subst.toString().length;
         if (padLeft > 0)
         {
            var arrTmp = new Array(padLeft+1);
            var padding = arrTmp.join(pad?pad:" ");
         }
         else
         {
            var padding = "";
         }
      }
      str = leftpart + padding + subst + rightPart;
   }
   return str;
}

function gotoURL(url, nowe)
{
	if (typeof nowe == 'undefined' || !nowe)
		window.location.href = url;
	else
		window.open(url);
}

function modul(nazwa)
{
	gotoURL('Modul=' + nazwa);
}

function pokazUkryj(id)
{
	getElement(id).style.display = getElement(id).style.display == 'none' ? 'block' : 'none';
}

function pobierzPole(f, p)
{
	for (i = 0; i < f.elements.length; i++)
		if (f.elements[i].name == p)
			return f.elements[i];

	return null;
}

function pobierzPoleRadioWybrane(f, p)
{
	for (i = 0; i < f.elements.length; i++)
		if (f.elements[i].name == p && f.elements[i].checked)
			return f.elements[i];

	return null;
}

function usunZdarzenia(e)
{
	if (e && e.stopPropagation)
		e.stopPropagation();
	else
		event.cancelBubble = true;
}

/* walidacje */

function sprawdzGodzine(czas)
{
	return czas.match(/^[0-9]{1,2}:[0-9]{2}$/) && parseInt(czas.substring(0, 2)) >= 0 && parseInt(czas.substring(0, 2)) < 24;
}

function sprawdzDate(data)
{
	return data.match(/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/) || data.match(/^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/);
}

function sprawdzWiek(dataUrodzenia)
{
	var dzis = Math.floor(new Date().getTime() / 1000 / 60 / 60 / 24);

	if (dataUrodzenia.match(/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/))
	{
		var elementy = dataUrodzenia.split('-');

		var data = new Date(elementy[0], elementy[1] - 1, elementy[2]);

		data = Math.floor(data.getTime() / 1000 / 60 / 60 / 24);
	}
	else if (dataUrodzenia.match(/^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/))
	{
		var elementy = dataUrodzenia.split('.');

		var data = new Date(elementy[2], elementy[1] - 1, elementy[1]);

		data = Math.floor(data.getTime() / 1000 / 60 / 60 / 24);
	}
	else
		var data = dzis;

	return (dzis - data) / 365.25;
}

function sprawdzPESEL(numer)
{
	var i;
	var suma = 0;
	var wagi = [1,3,7,9,1,3,7,9,1,3];

	if (numer.search(/^[0-9]{11}$/) != -1)
	{
		numer = numer.replace(/[^0-9]/g, '');

		for (i = 0; i < wagi.length; i++)
			suma += wagi[i] * parseInt(numer.substr(i, 1));

		return parseInt(numer.substr(wagi.length, 1)) == (10 - suma % 10) % 10;
	}
	else
		return false;
}

function sprawdzNIP(numer)
{
	var i;
	var suma = 0;
	var wagi = [6,5,7,2,3,4,5,6,7];

	if (
		numer.search(/^[0-9]{3}-[0-9]{3}-[0-9]{2}-[0-9]{2}$/) != -1 ||
		numer.search(/^[0-9]{3}-[0-9]{2}-[0-9]{2}-[0-9]{3}$/) != -1 ||
		numer.search(/^[a-zA-Z]{2} [0-9]{3}-[0-9]{3}-[0-9]{2}-[0-9]{2}$/) != -1 ||
		numer.search(/^[a-zA-Z]{2} [0-9]{3}-[0-9]{2}-[0-9]{2}-[0-9]{3}$/) != -1 ||
		numer.search(/^[a-zA-Z]{2}[0-9]{3}-[0-9]{3}-[0-9]{2}-[0-9]{2}$/) != -1 ||
		numer.search(/^[a-zA-Z]{2}[0-9]{3}-[0-9]{2}-[0-9]{2}-[0-9]{3}$/) != -1 ||
		numer.search(/^[0-9]{10}$/) != -1 ||
		numer.search(/^[a-zA-Z]{2} [0-9]{10}$/) != -1 ||
		numer.search(/^[a-zA-Z]{2}[0-9]{10}$/) != -1
		)
	{
		numer = numer.replace(/[^0-9]/g, '');

		for (i = 0; i < wagi.length; i++)
			suma += wagi[i] * parseInt(numer.substr(i, 1));

		return parseInt(numer.substr(wagi.length, 1)) == suma % 11 % 10;
	}
	else
		return false;
}

function sprawdzREGON(numer)
{
	var i;
	var suma = 0;
	var wagi = [];

	wagi[7] = [2,3,4,5,6,7];
	wagi[9] = [8,9,2,3,4,5,6,7]
	wagi[14] = [2,4,8,5,0,9,7,3,6,1,2,4,8];

	if (
		numer.search(/^[0-9]{7}$/) != -1 ||
		numer.search(/^[0-9]{9}$/) != -1 ||
		numer.search(/^[0-9]{14}$/) != -1
		)
	{
		numer = numer.replace(/[^0-9]/g, '');

		for (i = 0; i < wagi[numer.length].length; i++)
			suma += wagi[numer.length][i] * parseInt(numer.substr(i, 1));

		return parseInt(numer.substr(wagi[numer.length].length, 1)) == suma % 11 % 10;
	}
	else
		return false;
}

function sprawdzEmail(email)
{
	return email.match(/^[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,}$/);
}

function sprawdzIdentyfikator(ident)
{
	ident = trim(ident);

	return ident.match(/^[a-zA-Z0-9\.\-_ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]+$/);
}

function sprawdzKod(numer)
{
	return numer.match(/^[0-9]{2}\-[0-9]{3}$/);
}

function sprawdzTelefon(numer)
{
	return sprawdzTelefonStacjonarny(numer) || sprawdzTelefonKomorkowy(numer);
}

function sprawdzTelefonStacjonarny(numer)
{
	return numer.match(/^[0-9]{2}\-[0-9]{7}$/);
}

function sprawdzTelefonKomorkowy(numer)
{
	return numer.match(/^[0-9]{3}\-[0-9]{6}$/);
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

/* siła hasła */

function silaHasla(haslo)
{
	var len = haslo.length;

	var litery_male = 0;
	var litery_duze = 0;
	var cyfry = 0;
	var inne = 0;

	for (var i = 0; i < haslo.length; i++)
	{
		if (haslo.substr(i, 1).match(/[a-z]/))
			litery_male++;
		if (haslo.substr(i, 1).match(/[A-Z]/))
			litery_duze++;
		if (haslo.substr(i, 1).match(/[0-9]/))
			cyfry++;
		if (haslo.substr(i, 1).match(/[^a-zA-Z0-9\ ]/))
			inne++;
	}

	var zestawy = 0;
	var punkty = 0;
	var mozliwePunkty = 4 + 1 + 3 + 3 + 5 + 16;

	if (litery_male > 0)
	{
		zestawy++;
		punkty += 1;
	}

	if (litery_duze > 0)
	{
		zestawy++;
		punkty += 3;
	}

	if (cyfry > 0)
	{
		zestawy++;
		punkty += 3;
	}

	if (inne > 0)
	{
		zestawy++;
		punkty += 5;
	}

	punkty += zestawy;
	punkty += len > 16 ? 16 : len;

	return Math.floor(100 * punkty / mozliwePunkty);
}

function ustalSile(haslo, miernik)
{
	var sila = silaHasla(haslo);

	var kolory = [];
	kolory[10] = '#00FF00';
	kolory[9] = '#22FF00';
	kolory[8] = '#44FF00';
	kolory[7] = '#88FF00';
	kolory[6] = '#CCFF00';
	kolory[5] = '#FFFF00';
	kolory[4] = '#FFCC00';
	kolory[3] = '#FF8800';
	kolory[2] = '#FF4400';
	kolory[1] = '#FF2200';
	kolory[0] = '#FF0000';

	getElement(miernik).style.width = sila + 'px';

	getElement(miernik).style.background = kolory[Math.floor(sila / 10)];
}

function dodajDoUlubionych(domena, nazwa)
{
	if (window.external)
		window.external.AddFavorite('http://www.' + domena, nazwa);
	else
		alert('Twoja przeglądarka nie umożliwia dodawania do ulubionych!');
}

function preloadMenu()
{
	var imgs = ['btn_forum', 'btn_kontakt', 'btn_narzedzia', 'btn_o_nas', 'btn_oferta', 'btn_publikacje_prawne'];


	for (var i = 0; i < imgs.length; i++)
	{
		var img = new Image();
		img.src = sprintf('/gfx/strona/%s_wybrany.jpg', imgs[i]);
	}
}

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

function formatujTelefonTypF(telefon, typ)
{
	var telefon_mem = telefon;
	var s = '-';
	var stacjonarne = [12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 29, 30, 32, 33, 34, 38, 39, 41, 42, 43, 44, 46, 48, 52, 54, 55, 56, 58, 59, 61, 62, 63, 65, 67, 68, 71, 74, 75, 76, 77, 81, 82, 83, 84, 85, 86, 87, 89, 91, 94, 95];

	telefon = telefon.replace(/[^0-9]/g, '');

	if(telefon.length > 9)
		telefon = telefon.substr(0, 9);

	if(telefon.length == 9)
	{
		switch(typ)
		{
			case 'k':
				telefon = telefon.substr(0, 3) + s + telefon.substr(3, 3) + telefon.substr(6, 3);
				break;
			case 's':
				telefon = telefon.substr(0, 2) + s + telefon.substr(2, 3) + telefon.substr(5, 2) + telefon.substr(7, 2);
				break;
			default:
				if (stacjonarne.indexOf(parseInt(telefon.substring(0, 2))) == -1)
					telefon = telefon.substr(0, 3) + s + telefon.substr(3, 3) + telefon.substr(6, 3);
				else
					telefon = telefon.substr(0, 2) + s + telefon.substr(2, 3) + telefon.substr(5, 2) + telefon.substr(7, 2);
				break;
		}
	}
	return telefon;
}

function formatujTelefon(telefon)
{
	return formatujTelefonTypF(telefon, '');
}

function formatujTelefonKomorkowy(telefon)
{
	return formatujTelefonTypF(telefon, 'k');
}

function formatujTelefonStacjonarny(telefon)
{
	return formatujTelefonTypF(telefon, 's');
}

function urlEncodeCharacter (c)
{
	return '%' + c.charCodeAt(0).toString(16);
}

function urlDecodeCharacter (str, c)
{
	return String.fromCharCode(parseInt(c, 16));
}

function urlEncode ( s )
{
      return encodeURIComponent( s ).replace( /\%20/g, '+' ).replace( /[!'()*~]/g, urlEncodeCharacter );
}

function urlDecode ( s )
{
      return decodeURIComponent(s.replace( /\+/g, '%20' )).replace( /\%([0-9a-f]{2})/g, urlDecodeCharacter);
}

/* wyszukaj zaawansowanie - góra */

var canGoToMain = true;

var wyszukajZaawGoraWyswietlone = false;

function wyszukajZaawGora()
{
	if(wyszukajZaawGoraWyswietlone)
	{
		wyszukajZaawGora_ukryj();
		wyszukajZaawGoraWyswietlone = false;
	}
	else
	{
		wyszukajZaawGora_pokaz();
		wyszukajZaawGoraWyswietlone = true;
	}
}

function wyszukajZaawGora_pokaz()
{
	//try { getElement('informacja_konto').style.visibility = 'hidden'; } catch(e) { }
	try { getElement('sh_zmien_kryteria').style.visibility = 'hidden'; } catch(e) { }
	try { getElement('sh_ostatnie_wyniki').style.visibility = 'hidden'; } catch(e) { }
	getElement('top_wyszukajzaaw').style.visibility = 'visible';
	getElement('shsrbtn_zaaw').style.visibility = 'hidden';
	//getElement('div_main_banner').style.height = '152px';
	getElement('div_shsr').style.height = '204px';
	getElement('pasek_nawigacji').style.top = 200;
	try { getElement('header_part').style.height = '204px'; } catch(e) { } // forum !!!

	try {
		getElement('div_shsr').className = "shadvVisible";
		getElement('shsr_bgl').src = '/gfx/strona/shsr/shsr_bgl_vis.gif';
		getElement('shsr_bgr').src = '/gfx/strona/shsr/shsr_bgr_vis.gif';
	} catch(e) { }
}

function wyszukajZaawGora_ukryj()
{
	//try { getElement('informacja_konto').style.visibility = 'visible'; } catch(e) { }
	try { getElement('sh_zmien_kryteria').style.visibility = 'visible'; } catch(e) { }
	try { getElement('sh_ostatnie_wyniki').style.visibility = 'visible'; } catch(e) { }
	getElement('top_wyszukajzaaw').style.visibility = 'hidden';
	getElement('shsrbtn_zaaw').style.visibility = 'visible';
	//getElement('div_main_banner').style.height = '52px';
	getElement('div_shsr').style.height = '94px';
	getElement('pasek_nawigacji').style.top = 100;
	try { getElement('header_part').style.height = '94px'; } catch(e) { } // forum !!!

	try {
		getElement('div_shsr').className = "shadvHidden";
		getElement('shsr_bgl').src = '/gfx/strona/shsr/shsr_bgl.gif';
		getElement('shsr_bgr').src = '/gfx/strona/shsr/shsr_bgr.gif';
	} catch(e) { }
}

var shsr_slowodefault = ""; // musi być ustawione gdzieś w szablonie

shsrformSubmit = function(ret)
{
	var slowo = getElement('szukaj_slowo');
	// var lokalizacja = getElement('szukaj_lokalizacja');

	if(slowo.value == shsr_slowodefault)
		slowo.value = '';

	// czyszczenie formularza, jeśli kryteria zwinięte
	if(!wyszukajZaawGoraWyswietlone)
	{
		var slowomem = slowo.value;

		getElement('sh_szukaj_nazwa').value = "";
		getElement('shr_select_profesje').value = "";
		getElement('sh_id_wojewodztwa').value = "";
		getElement('sh_szukaj_miasto').value = "";
		getElement('shr_select_specjalizacje').value = "";
		getElement('sh_szukaj_ulica').value = "";

		slowo.value = slowomem;
	}

	if(wyszukajZaawGoraWyswietlone || (slowo.value != ''))
	{
		getElement('shsrform').submit();
		if(ret) return true;
	}
	else
	{
		alert("Proszę podać słowo do wyszukania \nlub przejść do wyszukiwania zaawansowanego");
		slowo.value = shsr_slowodefault;
		if(ret) return false;
	}
}
