var Common = {

	/**
	 * metoda zmienia podswietlenia wybranej zakladki
	 */
	highlightTab: function(obj, hlClass)
	{
		obj = $(obj);
		var tabs = obj.up('ul').childElements();

		tabs.each(function(s) {
			var inner = s.firstDescendant();
			if (inner == obj)
			{
				inner.addClassName(hlClass);
			}
			else
			{
				inner.removeClassName(hlClass);
			}
		});
	},

	/**
	 * Toggluje klasę
	 */
	toggleClass: function(selector, className, obj)
	{
		$$(selector).invoke('removeClassName', className);
		$(obj).addClassName(className);
	},

	/**
	 * Skacze do elementu
	 */
	jumpToElement: function(id, offset)
	{
		if (id == '')
			return false;

		id = id.replace(/^#/, "");

		var element = $(id);

		if (!Object.isElement(element))
			return false;

		var yPos = 0;

		var oElement = element;
		while (oElement != null )
		{
			yPos += oElement.offsetTop;
			oElement = oElement.offsetParent;
		}

		if (typeof offset != "undefined")
			yPos = yPos - offset;

		window.scrollTo(0, yPos);
	},


	/**
	 * Czyści znaki diakrytyczne
	 */
	toAscii: function(str)
	{
		var map = [
			{'base':'A', 'letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},
			{'base':'AA','letters':/[\uA732]/g},
			{'base':'AE','letters':/[\u00C6\u01FC\u01E2]/g},
			{'base':'AO','letters':/[\uA734]/g},
			{'base':'AU','letters':/[\uA736]/g},
			{'base':'AV','letters':/[\uA738\uA73A]/g},
			{'base':'AY','letters':/[\uA73C]/g},
			{'base':'B', 'letters':/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},
			{'base':'C', 'letters':/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},
			{'base':'D', 'letters':/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},
			{'base':'DZ','letters':/[\u01F1\u01C4]/g},
			{'base':'Dz','letters':/[\u01F2\u01C5]/g},
			{'base':'E', 'letters':/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},
			{'base':'F', 'letters':/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},
			{'base':'G', 'letters':/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},
			{'base':'H', 'letters':/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},
			{'base':'I', 'letters':/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},
			{'base':'J', 'letters':/[\u004A\u24BF\uFF2A\u0134\u0248]/g},
			{'base':'K', 'letters':/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},
			{'base':'L', 'letters':/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},
			{'base':'LJ','letters':/[\u01C7]/g},
			{'base':'Lj','letters':/[\u01C8]/g},
			{'base':'M', 'letters':/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},
			{'base':'N', 'letters':/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},
			{'base':'NJ','letters':/[\u01CA]/g},
			{'base':'Nj','letters':/[\u01CB]/g},
			{'base':'O', 'letters':/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},
			{'base':'OI','letters':/[\u01A2]/g},
			{'base':'OO','letters':/[\uA74E]/g},
			{'base':'OU','letters':/[\u0222]/g},
			{'base':'P', 'letters':/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},
			{'base':'Q', 'letters':/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},
			{'base':'R', 'letters':/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},
			{'base':'S', 'letters':/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},
			{'base':'T', 'letters':/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},
			{'base':'TZ','letters':/[\uA728]/g},
			{'base':'U', 'letters':/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},
			{'base':'V', 'letters':/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},
			{'base':'VY','letters':/[\uA760]/g},
			{'base':'W', 'letters':/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},
			{'base':'X', 'letters':/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},
			{'base':'Y', 'letters':/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},
			{'base':'Z', 'letters':/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},
			{'base':'a', 'letters':/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},
			{'base':'aa','letters':/[\uA733]/g},
			{'base':'ae','letters':/[\u00E6\u01FD\u01E3]/g},
			{'base':'ao','letters':/[\uA735]/g},
			{'base':'au','letters':/[\uA737]/g},
			{'base':'av','letters':/[\uA739\uA73B]/g},
			{'base':'ay','letters':/[\uA73D]/g},
			{'base':'b', 'letters':/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},
			{'base':'c', 'letters':/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},
			{'base':'d', 'letters':/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},
			{'base':'dz','letters':/[\u01F3\u01C6]/g},
			{'base':'e', 'letters':/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},
			{'base':'f', 'letters':/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},
			{'base':'g', 'letters':/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},
			{'base':'h', 'letters':/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},
			{'base':'hv','letters':/[\u0195]/g},
			{'base':'i', 'letters':/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},
			{'base':'j', 'letters':/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},
			{'base':'k', 'letters':/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},
			{'base':'l', 'letters':/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},
			{'base':'lj','letters':/[\u01C9]/g},
			{'base':'m', 'letters':/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},
			{'base':'n', 'letters':/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},
			{'base':'nj','letters':/[\u01CC]/g},
			{'base':'o', 'letters':/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},
			{'base':'oi','letters':/[\u01A3]/g},
			{'base':'ou','letters':/[\u0223]/g},
			{'base':'oo','letters':/[\uA74F]/g},
			{'base':'p','letters':/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},
			{'base':'q','letters':/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},
			{'base':'r','letters':/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},
			{'base':'s','letters':/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},
			{'base':'t','letters':/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},
			{'base':'tz','letters':/[\uA729]/g},
			{'base':'u','letters':/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},
			{'base':'v','letters':/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},
			{'base':'vy','letters':/[\uA761]/g},
			{'base':'w','letters':/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},
			{'base':'x','letters':/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},
			{'base':'y','letters':/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},
			{'base':'z','letters':/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}
		];
		
		for (var i = 0; i < map.length; i++)
		{
			str = str.replace(map[i].letters, map[i].base);
		}

		return str;
	},

	/**
	 * Metoda ustawia display, sprawdzając czy element jest blokowy czy inline
	 */
	setDisplay: function(element, display)
	{
		if (element.tagName == 'SPAN')
			element.style.display = display ? 'inline' : 'none';
		else
			element.style.display = display ? 'block' : 'none';
	},

	Tip: {

		offset: 20,
		_image: null,

		text: function(event, message, offset)
		{
			if (message == '')
				return;

			var m = $('common_tip');

			var xy = [Event.pointerX(event), Event.pointerY(event)];
			Position.prepare();
			var x = xy[0] - Position.deltaX;
			var y = xy[1] - Position.deltaY;
			if (typeof offset == "undefined")
				var offset = Common.Tip.offset;
			var viewportDims = document.viewport.getDimensions();

			m.innerHTML = message;
			m.style.display = "block";

			x = (x < viewportDims.width / 2) ? x + offset : x - offset - m.offsetWidth;
			y = (y < viewportDims.height / 2) ? y + offset : y - offset - m.offsetHeight;

			m.style.left = x + Position.deltaX + "px";
			m.style.top = y + Position.deltaY + "px";

		},

		image: function(ev, element, url, offset, onclick)
		{
			var m = $('common_tip');
			
			if (m.visible())
			{
				return;
			}

			Common.Tip._image = new Image();

			element = $(element);
			Event.observe(element, 'mouseout', function(ev) {
				var toElement = (ev.toElement === undefined) ? ev.relatedTarget : ev.toElement;
				if ((toElement == element || toElement.up('a') == element))
				{
					return;
				}
				window.setTimeout(function() {
					Common.Tip.hide();
					element.stopObserving('mouseout');
				}, 50);
			});
			element.style.cursor = 'wait';

			var xy = [Event.pointerX(ev), Event.pointerY(ev)];
			Position.prepare();
			var x = xy[0] - Position.deltaX;
			var y = xy[1] - Position.deltaY;

			if (typeof offset == "undefined")
			{
				var offset = Common.Tip.offset;
			}

			if (typeof onclick == "undefined")
			{
				var onclick = false;
			}

			var viewportDims = document.viewport.getDimensions();

			if (onclick)
			{
				m.onclick = onclick;
			}
			else
			{
				m.onclick = function() { Common.Tip.hide(); };
			}

			var width = onclick ? 0 : element.measure('width');

			Event.observe(Common.Tip._image, 'load', function() {
				if (onclick)
				{
					element.stopObserving();
				}
				var yOffset = (Math.abs(viewportDims.height / 2 - y) < 120) ? Common.Tip._image.height / 2 : 0;
				var tmpX = (x < viewportDims.width / 2) ? x + offset + width: x - offset - width - Common.Tip._image.width;
				var tmpY = (y < viewportDims.height / 2) ? y + offset - yOffset : y - offset + yOffset - Common.Tip._image.height;
				m.style.display = 'block';
				m.style.left = tmpX + Position.deltaX + "px";
				m.style.top = tmpY + Position.deltaY + "px";
				m.innerHTML = '';
				m.appendChild(Common.Tip._image);
				element.style.cursor = '';
				if (onclick)
				{
					Event.observe(m, 'mouseout', function() {
						Common.Tip.hide();
					});
				}
			});

			if (Common.Tip._image != null)
			{
				Common.Tip._image.src = url;
			}
		},

		hide: function()
		{
			try
			{
				$(Common.Tip._image).stopObserving();
				Common.Tip._image = null;
			} catch (e) {};
			
			var m = $('common_tip');
			m.style.display = "none";
			m.innerHTML = '';
		}
	},

	truncate: function(string, options)
	{
		var defaultOptions = {
			length: 80,
			etc: '...',
			breakWords: false,
			middle: false,
			pattern: /[\s,]+?(\S+)?$/,
			comma: false
		};

		var options = Object.extend(defaultOptions, options);

		if (options.length == 0)
			return '';

		if (options.comma && string.search(/,/) != -1)
		{
			return string.replace(/,.*/, '') + options.etc;
		}

		if (string.length > options.length)
		{
			options.length -= options.etc.length;

			if (!options.break_words && !options.middle)
			{
				string = string.substr(0, options.length + 1).replace(options.pattern, '');
			}

			if (!options.middle)
			{
				string = string.substr(0, options.length) + options.etc;
			}
			else
			{
				string = string.substr(0, options.length/2) + options.etc + string.substr(-options.length/2);
			}

			return string;
		}
		else
		{
			return string;
		}
	},

	Event: {

		fire: function(element, ev)
		{
			if (document.createEvent)
			{
				// dispatch for firefox + others
				var evt = document.createEvent("HTMLEvents");
				evt.initEvent(ev, true, true); // event type,bubbling,cancelable
				return !element.dispatchEvent(evt);
			} else if (document.createEventObject) {
				// dispatch for IE
				var evt = document.createEventObject();
				return element.fireEvent('on'+ev, evt)
			}
			else
			{
				// who knows
				return Event.fire(element, ev);
			}
		},


		click: function(ev, any, left, middle)
		{
			ev = Event.extend(ev);

			if (ev.isRightClick())
			{
				return;
			}

			if (typeof any != 'undefined' && any != null)
			{
				any(ev);
			}

			if (ev.isLeftClick() && typeof left != 'undefined' && left != null)
			{
				left(ev);
			}

			if (ev.isMiddleClick() && typeof middle != 'undefined' && middle != null)
			{
				middle(ev);
			}
		}
	},

	Form: {

		Submit: function(form, ajax, objIdClass)
		{
			var ajaxObj = new Ajax.Request(ajax,
			{
				method: 'post',
				parameters: Form.serialize(form, true),
				onSuccess: function(transport) {
					form.getElements().each(function(obj) {
						obj.removeClassName('errors');
					});
					$$('#' + objIdClass +' .errors').each(function(obj) {
						obj.remove()
					});
					if (/^Exception:/.test(transport.responseText))
					{
						alert(transport.responseText);
						return false;
					} else if (transport.responseText == 'true') {
						form.submit();
					}
					else
					{
						var response = transport.responseText.evalJSON();
						
						for (objId in response) {
							obj = $(objId);
							obj.addClassName('errors');
							obj.insert({after: '<ul class="errors"><li>' + response[objId][0] + '</li></ul>'});
						}
					}
				},
				onError: function(transport) {
					alert(LangJs.generic_error);
				}
			});
		},

		clearSelect: function(obj, removeAll)
		{
			if (typeof removeAll == 'undefined')
				removeAll = false;

			var value = $F(obj);
			var firstIndex = (removeAll) ? 0 : 1;
			for (var i = obj.childNodes.length - 1; i >= firstIndex; i--)
				obj.remove(i);

			return value;
		},


		/**
		 * Parametr selectOne powoduje wybranie pierwszego elementu, jezeli na liscie nie ma nic innego do wyboru
		 */
		fillSelect: function(obj, options, value, selectOne)
		{
			if (typeof selectOne == 'undefined')
			{
				selectOne = false;
			}

			count = 0;
			options = $H(options).sortBy(function(pair) {return Common.toAscii(pair.value).toLowerCase();});
			for (option in options)
			{
				if (typeof options[option] == 'function')
					continue;

				var oElement = document.createElement('option');
				oElement.value = options[option][0];
				oElement.text = options[option][1];
				// nie dotykać tego jak się nie wie dlaczego tak
				try { obj.add(oElement, null); } catch (e) { obj.add(oElement); }

				count ++;

				if (count == 1)
					var first = options[option][0];
			}

			if (selectOne && (count == 1))
				value = first;

			if (typeof value != "undefined")
				obj.setValue(value);

			if (selectOne && (count == 1))
				Common.Event.fire(obj, 'change');
		},


		fillSelectOpt: function(obj, options)
		{
			for (optGroup in options)
			{
				if (typeof options[optGroup] == 'function')
					continue;

				var optElement = document.createElement('optgroup');
				optElement.label = optGroup;

				var tmpOptions = $H(options[optGroup]).sortBy(function(pair) {return Common.toAscii(pair.value).toLowerCase()});
				for (option in tmpOptions)
				{
					if (typeof tmpOptions[option] == 'function')
						continue;

					var oElement = document.createElement('option');
					oElement.value = tmpOptions[option][0];
					oElement.text = tmpOptions[option][1];
					oElement.innerText = tmpOptions[option][1]; // hack na IE6
					optElement.appendChild(oElement);
				}

				obj.appendChild(optElement);
			}
		},


		filterInt: function(ev, extra)
		{
			var keys = [8, 9, 13, 16, 17, 18, 37, 39, 46];
			if (typeof extra != 'undefined')
				keys = keys.concat(extra);
			var unicode = ev.charCode ? ev.charCode : ev.keyCode;
			for (var i = 0, len = keys.length; i < len; ++i)
				if (unicode == keys[i])
					return;
			if (unicode < 48 || unicode > 57)
				return false
		},


		implode: function(elName, wholeSelect)
		{
			if (typeof wholeSelect == 'undefined')
				wholeSelect = false;

			var value = (wholeSelect) ? $(elName).options : $(elName).getValue();

			if (typeof value == 'string')
				return $value;

			if (!value || !value.length)
				return '';

			var last = value.length - 1;
			var out = '';
			for (i = 0; i <= last; i ++) {
				out += (wholeSelect) ? value[i]['value'] : value[i];
				if (i < last)
					out += ',';
			}

			return out;
		},


		ImgRadio: {
			_sets: Object(),
			_dict: Object(),

			init: function(set, options)
			{
				this._sets[set] = options;
				var self = this;

				for (i = 0, len = this._sets[set].radios.length; i < len; i ++) {
					// Powiązania: id => set, wartość
					this._dict[set + '[' + this._sets[set].radios[i] + ']'] = {
						set: set,
						value: this._sets[set].radios[i]
					};

					Event.observe($(set + '[' + this._sets[set].radios[i] + ']'), 'click', function(event) {
						var el = event.findElement();
						self.setValue(self._dict[el.id].set, self._dict[el.id].value);
					});

					// Jeżeli label istnieje, to też go podpinamy.
					var label = $(set + '[' + this._sets[set].radios[i] + '][label]');
					if (Object.isElement(label))
					{
						this._dict[set + '[' + this._sets[set].radios[i] + '][label]'] = {
							set: set,
							value: this._sets[set].radios[i]
						};

						Event.observe($(set + '[' + this._sets[set].radios[i] + '][label]'), 'click', function(event) {
							var el = event.findElement();
							self.setValue(self._dict[el.id].set, self._dict[el.id].value);
						});
					}
				}

				this.render(set);

			},

			render: function(set)
			{
				for (i = 0, len = this._sets[set].radios.length; i < len; i ++) {
					val = this._sets[set].radios[i];
					checked = $(this._sets[set].hidden).getValue();
					$(set + '[' + val + ']').src = (val == checked) ? this._sets[set].img.checked : this._sets[set].img.unchecked;
				}
			},

			setValue: function(set, value)
			{
				$(this._sets[set].hidden).setValue(value);
				Common.Event.fire($(this._sets[set].hidden), 'change');
				this.render(set);
			}

		},

		multiChange: function(element, ev)
		{
			var keys = [0, 8, 9, 13, 16, 17, 18, 37, 39, 46];
			var unicode = ev.charCode ? ev.charCode : ev.keyCode;
			for (var i = 0, len = keys.length; i < len; ++i)
				if (unicode == keys[i])
					return true;
			var element = $(element);
			if ($F(element).length == element.maxLength)
			{
				var nextElement = element.next('input');
				if (Object.isElement(nextElement))
				{
					nextElement.activate();
				}
				return true;
			}
		}
	},

	Position: {

		center: function(element)
		{
			var options = Object.extend({
				zIndex: 999,
				update: false
			}, arguments[1] || {});

			element = $(element);

			if (!element._centered){
				Element.setStyle(element, {position: Prototype.Browser.IE6 ? 'absolute' : 'fixed', zIndex: options.zIndex });
				element._centered = true;
			}

			var dims = Element.getDimensions(element);
			var viewportDims = document.viewport.getDimensions();

//			Position.prepare();

			var offLeft = /*Position.deltaX + */Math.floor((viewportDims.width - dims.width) / 2);
			var offTop = /*Position.deltaY + */Math.floor((viewportDims.height - dims.height) / 2);
			element.style.top = ((offTop != null && offTop > 0) ? offTop : '0') + 'px';
			element.style.left = ((offLeft != null && offLeft > 0) ? offLeft :'0') + 'px';

//			if (options.update) {
//				Event.observe(window, 'resize', function(evt) { Common.Position.center(element); }, false);
//				Event.observe(window, 'scroll', function(evt) { Common.Position.center(element); }, false);
//			}
		}
	},

	Loader: {
		// Licznik aktywnych ajaxów
		_ajax: 0,

		open: function(text) // text dla kompatybilności ze starym loaderem
		{
			var loader = $('common_loader');

			if (!Object.isElement(loader))
				return Common.Loader;

			if (loader.visible())
				return Common.Loader;

			Common.Position.center(loader, {update: true});

			Event.observe(loader, 'click', Common.Loader.destroy);

			loader.style.display = '';
			return Common.Loader;
		},

		destroy: function()
		{
			var loader = $('common_loader');
			if (!Object.isElement(loader)) return;
			loader.style.display = 'none';
		},

		// Inkrementuje licznik aktywnych ajaxów, włącza w razie potrzeby loader
		startAjax: function()
		{
			if ((++ this._ajax) == 1)
				this.open();
		},

		// Dekrementuje licznik aktywnych ajaxów, wyłącza w razie potrzeby loader
		stopAjax: function()
		{
			if ((-- this._ajax) == 0)
				this.destroy();
		}
	},

	Debug: {

		dump: function(text, clear)
		{
			var debugWindow = window.open('','CommonDebugWindow','resizable=1,scrollbars=1,width=800,height=600');

			if (debugWindow == null)
			{
				return false;
			}

			if (typeof debugWindow.document.body == 'undefined' || debugWindow.document.body.innerHTML == '' || clear)
			{
				debugWindow.document.writeln('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n<title>Common_Debug::dump</title>\n<style type="text/css">pre {overflow-x: auto; white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word; }</style></head>\n<body><hr /></body>\n</html>');
				debugWindow.document.close();
				debugWindow = window.open('','CommonDebugWindow','resizable=1,scrollbars=1,width=800,height=600');
			}

			if (typeof debugWindow.document.body != 'undefined')
			{
				var div = debugWindow.document.createElement('div');
				div.innerHTML = (text);
				debugWindow.document.body.appendChild(div);

				hr = debugWindow.document.createElement('hr');
				debugWindow.document.body.appendChild(hr);
			}

			debugWindow.document.close();

			return false;
		}
	},

	Splash: {

		index: 1,
		count: null,
		splashes: [],
		links: [],
		pe: null,

		stop: function()
		{
			Common.Splash.pe.stop();
		},

		show: function(index)
		{
			if (index == Common.Splash.index)
				return true;

			if (typeof Common.Splash.splashes[index-1] != 'undefined')
			{
				var queue = Effect.Queues.get('splash');
				queue.each(function(effect) { effect.cancel(); });

				var lastIndex = Common.Splash.index;
				var previousSplash = Common.Splash.splashes[lastIndex-1];
				var newSplash = Common.Splash.splashes[index-1];

				Effect.Fade(previousSplash, { duration: 1.0, queue: { scope: 'splash' } });
				Effect.Appear(newSplash, { duration: 1.0, queue: { scope: 'splash' } });

				Common.Splash.links[lastIndex-1].removeClassName('b');
				Common.Splash.links[index-1].addClassName('b');

				Common.Splash.index = index;

				// Po przejściu wygaszenie wszystkich pozostałych elementów
				for (var i = 1; i <= Common.Splash.count; ++i)
					if (i != index && i != lastIndex)
						Effect.Fade(Common.Splash.splashes[i-1], { duration: 1.0, queue: { scope: 'splash' } });
			}
			else
			{
				return false;
			}
		},

		previous: function()
		{
			var newIndex = Common.Splash.index - 1;
			if (newIndex < 1)
			{
				newIndex = Common.Splash.count;
			}
			Common.Splash.show(newIndex);
		},

		next: function()
		{
			var newIndex = Common.Splash.index + 1;
			if (newIndex > Common.Splash.count)
			{
				newIndex = 1;
			}
			Common.Splash.show(newIndex);
		},

		init: function()
		{
			var splashElement = $('splash');
			Common.Splash.splashes = Common.$$(splashElement, 'div.splash');
			Common.Splash.count = Common.Splash.splashes.length;
			Common.Splash.links = Common.$$(splashElement, 'a.splash span');

			Common.Splash.pe = new PeriodicalExecuter(function(pe) {
				Common.Splash.next();
			}, 7);

		}

	},
	
	PopupWindowBox: {
		basicBox: function(container, options)
		{
			var window_wrapper = new Element('div',{  
				className: 'window_wrapper'  
			});  
			var window_header = new Element('h1',{  
				className: 'window_header'  
			});  
			var window_close = new Element('a',{  
				className: 'window_close'  
			});  
			var window_contents = new Element('div',{  
				className: 'window_contents'  
			});  
			var w = new Control.Window(container, Object.extend({  
				className: 'winow_box',  
				closeOnClick: window_close,  
				draggable: window_header,  
				insertRemoteContentAt: window_contents,  
				afterOpen: function(){  
					window_header.update(container.readAttribute('title'))  
				}  
			},options || {}));  
			
			window_wrapper.insert(window_header);  
			window_wrapper.insert(window_close);  
			window_wrapper.insert(window_contents);
			
			w.container.insert(window_wrapper);
			
			w.content = window_contents;
			
			return w;
		}
	},

	/**
	 * Otwarcie okna www klienta
	 *
	 */
	openWindow: function(params)
	{
		var defaultOptions = {
			name: 'externalWindow' + Math.ceil((Math.random() * 100))
		};

		var options = Object.extend(defaultOptions, params);

		if (Object.isString(options.link))
		{
			if (Object.isString(options.analytics))
			{
				pageTracker._trackPageview(options.analytics);
			}

			window.open(options.link, options.name);
		}
	},

	Colorizer: {

		duration: 0.4,

		init: function(element)
		{
			var queue = Effect.Queues.get('colorizer_' + element.className);
			queue.each(function(effect) { effect.cancel(); });
		},

		enable: function(element)
		{
			this.init(element);
			new Effect.Opacity(element, {
				queue: {scope: 'colorizer_' + element.className},
				from: $(element).getStyle('opacity'),
				to: 0.0,
				duration: this.duration
			});
		},

		disable: function(element)
		{
			this.init(element);
			new Effect.Opacity(element, {
				queue: {scope: 'colorizer_' + element.className},
				from: $(element).getStyle('opacity'),
				to: 1.0,
				duration: this.duration
			});
		}
	},
	
	InterstitialUp: {
		showCloseBtn: function()
		{
			var btn = $('interstitialUp-closeBtn');
			if (btn != null)
				btn.show();
			var iframe = $('interstitialUp-iframe');
			var div = $('interstitialUp-div');
			var interstitial = $('interstitialUp');
			if (iframe != null)
			{
				iframe.setStyle({
				  width: div.getWidth() + 'px',
				  height: div.getHeight() + 'px'
				});
				interstitial.setStyle({
				  width: div.getWidth() + 'px',
				  height: div.getHeight() + 'px'
				});
				Common.Position.center(interstitial);
				iframe.show();
			}
		},
		
		close: function()
		{
			e = document.getElementById('interstitialUp');
			if (e != null)
			{
				e.style.display = "none";
				e.innerHTML = '';
			}
		}
	},
	
	InterstitialScroller: {
		close: function()
		{
			e = document.getElementById('scroller');
			if (e != null)
			{
				e.style.display = "none";
				e.innerHTML = '';
			}
		}
	},

	Interstitial: {

		init: function()
		{
			e = $('interstitial');

			if (e.offsetWidth == 0)
				return;

			if (Prototype.Browser.IE6)
				e.style.position = 'absolute';

			Position.prepare();
			var x = Position.deltaX;
			var y = Position.deltaY;
			var viewportDims = document.viewport.getDimensions();

			x = (viewportDims.width / 2) - (e.offsetWidth / 2);
			y = (viewportDims.height / 2) - (e.offsetHeight / 2);

			e.style.left = x + Position.deltaX + "px";
			e.style.top = y + Position.deltaY + "px";
		},

		delayedClose: function(delay)
		{
			if (typeof delay == 'undefined')
				delay = 10000;

			window.setTimeout(function() {
				e = document.getElementById('interstitial');
				e.style.display = "none";
				e.innerHTML = '';
			}, delay);
		},

		close: function()
		{
			e = document.getElementById('interstitial');
			if (e != null)
			{
				e.style.display = "none";
				e.innerHTML = '';
			}
		}
	},

	DropMenu: {

		timeout: 100,
		dropmenu: null,
		timer: null,

		addObservers: function(element)
		{
			var self = this;
			var submenu = element.down('div.dropmenu');
			var anchor = element.down('a');

			if (typeof submenu != "undefined")
			{
				Event.observe(element, 'mouseover', function(event) {
					anchor.addClassName('hover');
					self.show(submenu);
				});
				Event.observe(element, 'mouseout', function(event) {
					anchor.removeClassName('hover');
					self.hide(submenu);
				});
				Event.observe(submenu, 'mouseover', function(event) {
					anchor.addClassName('hover');
					self.cancel();
				});
				Event.observe(submenu, 'mouseout', function(event) {
					anchor.removeClassName('hover');
					self.hide(submenu);
				});
			}
		},

		show: function(element)
		{
			this.cancel();

			if (this.dropmenu)
			{
				this.dropmenu.style.display = 'none';
			}

			this.dropmenu = element;
			this.dropmenu.style.display = '';
			//this.dropmenu.style.minWidth = (this.dropmenu.up('li').measure('width') - 1) + 'px';
		},

		_hide: function(element)
		{
			if (element)
				element.style.display = 'none';
		},

		hide: function(element)
		{
			var self = this;
			if (!this.timer)
				this.timer = window.setTimeout(function() {self._hide(self.dropmenu);}, this.timeout);
		},

		cancel: function()
		{
			if (this.timer)
			{
				window.clearTimeout(this.timer);
				this.timer = null;
			}
		},

		init: function()
		{
			elements = $$('li.dropmenu');
			for (var i = 0; i < elements.length; i++) {
				this.addObservers(elements[i]);
			}
		}
	},

	Tracker: {
		trackLink: function(anchor, id)
		{
			var ajaxObj = new Ajax.Request('/ajax-form,track-link',
			{
				method: 'post',
				parameters : {
					referer: window.location.href,
					link: anchor.href,
					title: (typeof anchor.title == 'undefined' || anchor.title == '') ? '-' : anchor.title,
					inner: (typeof anchor.innerHTML == 'undefined') ? '-' : anchor.innerHTML,
					id: (typeof id == 'undefined') ? '-' : id
				},

				onSuccess: function(transport) {
				},

				onError: function() {
					alert(LangJs.generic_error);
				}
			});

			return false;
		}
	},

	Lightbox: {
		_lightbox: null,
		_gallery: null,
		_prev: null,
		_next: null,
		_area: null,
		_img: [],

		_style: {
			img:  {
				width: 80,
				height: 60,
				border: 4
			},

			gallery: {
				duration: 0.2,
				scroll: 575
			},

			prev: {
				backgroundImage: '/images/to/btn/galeria_prev.gif'
			},

			next: {
				backgroundImage: '/images/to/btn/galeria_next.gif'
			},

			button: {
				width: 30,
				height: 80
			},

			back: {
				backgroundColor: '#222',
				height: 80,
				zIndex: 1010
			},

			lightbox: {
				bottom: 140
			}
		},

		initialize: function(lightbox)
		{
			if (Prototype.Browser.IE6)
				return;

			this._lightbox = lightbox;

			this._back = Builder.node('div', {
				id: 'common_lightbox_back',
				style:
					'background-color: ' + this._style.back.backgroundColor + ';' +
					'z-index: ' + this._style.back.zIndex + ';' +
					'display: none; position: fixed; bottom: 0px; left: 0px; width: 100%; height: ' + this._style.back.height + 'px'
			});

			// Buttony
			this._prev = Builder.node('div', {
				id: 'common_lightbox_prev',
				style:
					'width: ' + this._style.button.width + 'px;' +
					'height: ' + this._style.button.height + 'px;' +
					'background-image: url(' + this._style.prev.backgroundImage + ');' +
					'float: left'
			});
			this._next = Builder.node('div', {
				id: 'common_lightbox_next',
				style:
					'width: ' + this._style.button.width + 'px;' +
					'height: ' + this._style.button.height + 'px;' +
					'background-image: url(' + this._style.next.backgroundImage + ');' +
					'float: right'
			});
			///

			this._area = Builder.node('div', {
				id: 'common_lightbox_area',
				style: 'float: left; width: 0px; overflow: hidden'
			});

			this._gallery = Builder.node('div', {
				id: 'common_lightbox_gallery',
				style: 'white-space: nowrap; position: relative; left: 0px; top: 0px'
			});

			this._area.appendChild(this._gallery);

			this._back.appendChild(this._prev);
			this._back.appendChild(this._area);
			this._back.appendChild(this._next);

			this._back.appendChild(Builder.node('div', { style: 'clear: both' }));

			//$('overlay').appendChild(this._back);
			$$('body')[0].appendChild(this._back);

		/*	$('lightbox').style.position = 'fixed';
			$('lightbox').style.bottom = this._style.lightbox.bottom + 'px';
			$('lightbox').style.left = '0px'; */
			
			this._downloadBtn = Builder.node('a',{id:'bottomNavDownload', href: '#' },
				[
					Builder.node('span', {id:'bottomNavDownloadLabel'}, LightboxOptions.fileBottomNavDownloadLabel),
					Builder.node('img', {src: LightboxOptions.fileBottomNavDownloadImage })
				]
			).hide();
			
			$('bottomNav').appendChild(this._downloadBtn);
			
			$('bottomNavDownload').observe('click', (function(event) { 
				event.stop(); 
				var url = this.imageArray[this.activeImage][2];			
				window.open(LightboxOptions.fileDownloadLink + url);
			}).bind(lightbox));

			var self = this;

			this._prev.observe('click', (function(event) {
				event.stop();
				self._scroll(self._style.gallery.scroll);
			}).bindAsEventListener(this));

			this._next.observe('click', (function(event) {
				event.stop();
				self._scroll(- self._style.gallery.scroll);
			}).bindAsEventListener(this));

			Event.observe(document.onresize ? document : window, 'resize', function() { self._resize(); });
		},

		_scroll: function(offset)
		{
			var last = parseInt(this._gallery.style.left.replace('px', ''));
			var left = last + offset;
			var min = - (this._gallery.offsetWidth - this._area.offsetWidth);

			if (left < min)
				left = min;

			if (left > 0)
				left = 0;

			if (left == last)
				return;

			var queue = Effect.Queues.get('lightbox_gallery');
			queue.each(function(effect) { effect.cancel(); });

			new Effect.Morph(this._gallery, { duration: this._style.gallery.duration, style: 'left: ' + left + 'px', queue: { scope: 'lightbox_gallery' } });
		},

		_resize: function()
		{
			this._area.style.width = (document.viewport.getWidth() - 60) + 'px';
		},

		_observer: function(obj, i)
		{
			this._img[i].observe('click', (function(event) {
				event.stop();
				if (this._lightbox.activeImage == i)
					return;
				
				this._lightbox.changeImage(i);
			}).bindAsEventListener(this));
		},
		
		preChangeImage: function(i, img)
		{
			this._downloadBtn.hide();
			
			if (typeof this._lightbox.activeImage != "undefined" && typeof this._img[this._lightbox.activeImage] != 'undefined')
				this._img[this._lightbox.activeImage].removeClassName("selected");
			
			if (typeof this._img[i] != 'undefined')
			{
				this._img[i].addClassName("selected");
			}
			
			if (img[2] != null)
			{
				this._downloadBtn.show();
			}
		},

		_miniature: function(url)
		{
			var result = url.replace(/thumb_[0-9]+x[0-9]+/, 'zzz,thumb_' + this._style.img.width + 'x' + this._style.img.height);
			result = result.replace(/,add_([0-9]+_)?[0-9a-zA-Z]+/g, '');
			return result;
		},

		start: function(imageNum)
		{
		
			if (this._lightbox == null)
				return;

			this._resize();
			this._gallery.innerHTML = '';
			this._img = [];

			for (var i = 0; i < this._lightbox.imageArray.length; i ++) {
				this._img[i] = Builder.node('img', {
					src: this._miniature(this._lightbox.imageArray[i][0]),
					style:
						'width: ' + this._style.img.width + 'px;' +
						'height: ' + this._style.img.height + 'px;'
				});

				this._observer(this._img[i], i);

				this._gallery.appendChild(this._img[i]);	
			}

			this._gallery.style.width = this._lightbox.imageArray.length * (
				this._style.img.width + 20 // 20 = 2* (5 + 4 + 1) wyciagniete z css margin border padding
			) + 'px';

			this._back.style.display = 'block';
		},

		end: function()
		{
			if (this._lightbox == null)
				return;

			this._back.style.display = 'none';
		}
	},
	
	Lokalizacja: {

		regionChange: function(prefix) 
		{
			Common.Form.clearSelect($(prefix + '_powiat'));
			Common.Form.clearSelect($(prefix + '_gmina'));
			Common.Form.clearSelect($(prefix + '_miejscowosc'));
			if (Object.isElement($(prefix + '_dzielnica')))
				Common.Form.clearSelect($(prefix + '_dzielnica'));

			var ajaxObj = new Ajax.Request('/ajax-form,powiaty',
			{
				method: 'post',
				parameters: { region: $F(prefix + '_region') },
				onSuccess: function(transport) {
					Common.Form.fillSelect($(prefix + '_powiat'), transport.responseText.evalJSON(), null, true);
				},
				onError: function(transport) {
					alert(LangJs.generic_error);
				}
			});
		},


		powiatChange: function(prefix) 
		{
			Common.Form.clearSelect($(prefix + '_gmina'));
			Common.Form.clearSelect($(prefix + '_miejscowosc'));
			if (Object.isElement($(prefix + '_dzielnica')))
				Common.Form.clearSelect($(prefix + '_dzielnica'));

			var ajaxObj = new Ajax.Request('/ajax-form,gminy',
			{
				method: 'post',
				parameters: { powiat: $F(prefix + '_powiat') },
				onSuccess: function(transport) {
					Common.Form.fillSelect($(prefix + '_gmina'), transport.responseText.evalJSON(), null, true);
				},
				onError: function(transport) {
					alert(LangJs.generic_error);
				}
			});
		},


		gminaChange: function(prefix)
		{
			Common.Form.clearSelect($(prefix + '_miejscowosc'));
			if (Object.isElement($(prefix + '_dzielnica')))
				Common.Form.clearSelect($(prefix + '_dzielnica'));

			var ajaxObj = new Ajax.Request('/ajax-form,miejscowosci',
			{
				method: 'post',
				parameters: { gmina: $F(prefix + '_gmina') },
				onSuccess: function(transport) {
					Common.Form.fillSelect($(prefix + '_miejscowosc'), transport.responseText.evalJSON(), null, true);
				},
				onError: function(transport) {
					alert(LangJs.generic_error);
				}
			});
		},


		miejscowoscChange: function(prefix)
		{
			Common.Form.clearSelect($(prefix + '_dzielnica'));

			var ajaxObj = new Ajax.Request('/ajax-form,dzielnice',
			{
				method: 'post',
				parameters: { miejscowosc: $F(prefix + '_miejscowosc'), dzielnica_typ: 'administracyjna' },
				onSuccess: function(transport) {
					var response = transport.responseText.evalJSON();
					delete response['-1'];
					Common.Form.fillSelect($(prefix + '_dzielnica'), response, null, true);
				},
				onError: function(transport) {
					alert(LangJs.generic_error);
				}
			});
		}
	},

	Hint: {

		focus: function(element)
		{
			element = $(element);
			if (element.hasClassName('hint'))
			{
				element.writeAttribute('alt', $F(element));
				element.setValue('');
				element.removeClassName('hint');
			}
		},

		blur: function(element)
		{
			element = $(element);
			if (!element.hasClassName('hint') && $F(element) == '')
			{
				element.addClassName('hint');
				element.setValue(element.readAttribute('alt'));
			}
		},

		clear: function()
		{
			$$('.hint').each(function(element) {
				element.setValue('');
			});
		}
	},

	Refresh: {

		running: true,
		period: 300, // domyślny okres w sekundach

		run: function(period)
		{
			if (typeof period == 'undefined')
				period = Common.Refresh.period;

			window.setTimeout(function() {
				if (Common.Refresh.running)
				{
					var ajaxObj = new Ajax.Request('/clear',
					{
						method: 'post',
						onSuccess: function(transport) {
							Common.Refresh.run(period);
						},
						onError: function(transport) {
							Common.Refresh.running = false;
						}
					});
				}
			}, period * 1000);
		}
	},

	$$: function()
	{
		var args = $A(arguments);
		var element = args.shift();
		return Selector.findChildElements(element, args);
	},

	getRadioValue: function(name)
	{
		return $$('input:checked[type="radio"][name="' + name + '"]').pluck('value');
	},

	randomString: function(length) {
		var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
		var result = '';
		for (var i = 0; i < length; i++) {
			var rnum = Math.floor(Math.random() * chars.length);
			result += chars.substring(rnum, rnum+1);
		}
		return result;
	},

	toggleChecked: function(element) {
		element.checked = element.checked ? false : true;
	},

	toggleDisabled: function(element) {
		element.disabled = element.disabled ? false : true;
	},

	Cookie: {
		get: function(key) {
			var result = undefined;
			document.cookie.split(';').each(function(element) {
				var data = element.split('=');
				if (data[0].strip() == key)
				{
					result = data[1].strip();
					return;
				}
			});
			return result;
		},
		set: function(key, value) {
			document.cookie = key + '=' + value + ';max-age=2592000';
		}
	}

};

//pads left
String.prototype.lpad = function(padString, length) {
	var str = this;
	while (str.length < length)
		str = padString + str;
	return str;
}

//pads right
String.prototype.rpad = function(padString, length) {
	var str = this;
	while (str.length < length)
		str = str + padString;
	return str;
}

Array.prototype.inArray = function(p_val)
{
	for (var i = 0, l = this.length; i < l; i++)
	{
		if (this[i] == p_val)
		{
			return true;
		}
	}
	return false;
};

// mam dość IE6
Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;

// IE7 sux as well
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;

// get selected option html
Element.addMethods("SELECT", {
	getSelectedOptionHTML: function(element) {
		if (!(element = $(element))) return;
		var index = element.selectedIndex;
		return index >= 0 ? element.options[index].innerHTML : undefined;
	}
});

// bypass na buga w Google Maps
if(!tick) var tick = function(){};

/**
 * Ajax.Request.abort
 * extend the prototype.js Ajax.Request object so that it supports an abort method
 */
Ajax.Request.prototype.abort = function() {
	// prevent and state change callbacks from being issued
	this.transport.onreadystatechange = Prototype.emptyFunction;
	// abort the XHR
	this.transport.abort();
	// update the request counter
	Ajax.activeRequestCount--;
	if (Ajax.activeRequestCount < 0)
	{
		Ajax.activeRequestCount = 0;
	}
};


