	var doc = document;
	var $ = function (id) {
		return doc.getElementById(id);
	}

	window.onload = function () {
		og.init();
	}
	window.onresize = function () {
		og.usunZdarzenie(doc, "mousedown", og.pobPoz);
		og.init();
	}

var og = {
	powieksz: {id: 'powieksz', visible: -1, top: 0, left: 0, fromTop: 30, width: 50, height: 50, pad: 5, border: 1, krokiSkal: 50, predkoscSkal: 10, alpha: 1, wRuchu: {top: 0, left: 0, tDelta: 0, lDelta: 0, topStop: 0, leftStop: 0, width: 0, height: 0, widthStop: 0, heightStop: 0, whRatio: 1, wDelta: 0}},

	obrD: {id: 'obrD', top: 0, left: 0, width: 0, height: 0},
	obrM: {uchwyt: '', top: 0, left: 0, width: 0, height: 0},

	dodajZdarzenie: function(odnosnik, zdarzenie, funkcja) {
		if (odnosnik.addEventListener) odnosnik.addEventListener(zdarzenie, funkcja, false);
		else odnosnik.attachEvent("on" + zdarzenie, funkcja);
	},

	usunZdarzenie: function(odnosnik, zdarzenie, funkcja) {
		if (odnosnik.removeEventListener) odnosnik.removeEventListener(zdarzenie, funkcja, false);
		else odnosnik.detachEvent("on" + zdarzenie, funkcja);
	},

	alpha: function (id, value) {
		if (document.all && !window.opera) $(id).style.filter = 'alpha(opacity=' + value * 100 + ')';
		else $(id).style.opacity = value;
	},

	//kontener z powiększeniem - utwórz/pokaz
	powiekszPokaz: function() {
		var element;
		//utwórz kontener z powiększeniem
		if (og.powieksz.visible == -1) {
			element = document.createElement('div');
			element.setAttribute('id', og.powieksz.id);
			with (element.style) {
				border = '0';
				padding = '0';
				position = 'absolute';
				width = og.obrM.width + 'px';
				height = og.obrM.height + 'px';
				overflow = 'hidden';
				textAlign = 'left';
				cursor = 'pointer';
				zIndex = '100';
				backgroundColor = '#fff';
			}

			doc.body.appendChild(element);
		}
		else
			//ustaw parametry startowe dla powiększenia
			with ($(og.powieksz.id).style) {
				width = og.obrM.width + 'px';
				height = og.obrM.height + 'px';
				display = 'block';
			}

			//zmień przezroczystość powiększenia
			og.powieksz.alpha = 1;
			og.alpha(og.powieksz.id, og.powieksz.alpha);
			og.powieksz.visible = 1;
	},

	go: function(el) {
		var element;
		var imgTmp = new Image();

		if (og.powieksz.visible == 1) return false;

		imgTmp.onerror = function () {
			alert("Wystąpil błąd podczas ładowania powiększenia.");
		}

		imgTmp.onload = function () {
			element = document.createElement('img');
			element.setAttribute('id', og.obrD.id);
			element.src = imgTmp.src;

			//utwórz kontener główny
			og.powiekszPokaz();

			if (!$(og.obrD.id)) {
				$(og.powieksz.id).appendChild(element);
			}
			else {
				$(og.powieksz.id).replaceChild(element, $(og.obrD.id));
			}

			//ustaw wielkość dużego obrazka na wielskość z wczytanego pliku
			og.powieksz.width = element.width;
			og.powieksz.height = element.height;
			og.obrD.width = element.width;
			og.obrD.height = element.height;

			//oblicz położenie powiększenia tak aby bylo na środku ekranu z uwzględnieniem wcześniej ustawionych współczynników przesunięcia
			og.powieksz.top = og.scrollBarY + og.powieksz.fromTop;
			og.powieksz.left = (og.viewWidth - og.scrollBarX - element.width) / 2;

			$(og.obrD.id).width = og.obrM.width;
			$(og.obrD.id).height = og.obrM.height;

			//powiększ i przesuń
			og.przesunIskaluj(og.obrM.top, og.obrM.left, og.obrM.top, og.obrM.left, og.obrM.width, og.powieksz.width, og.powieksz.height);
		}
		imgTmp.src = el;

		og.usunZdarzenie(doc, "mousedown", og.pobPoz);

		return false;
	},

	//pobież początkowe położenie powiększenia na współczynniki przesunięcia scrollbars
	docScrollbars: function() {
		//sprawdź ile wynosi przesunięcie spowowodowane przesunięciem suwaków okna
		var przesOdsX = 0, przesOdsY = document.body.scrollTop; //przesOdsY = 0; //
		if (przesOdsY == 0) {
			if (window.pageYOffset)
				przesOdsY = window.pageYOffset;
			else
				przesOdsY = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
		}
		if (przesOdsX == 0) {
			if (window.pageXOffset)
				przesOdsX = window.pageXOffset;
			else
				przesOdsX = (document.body.parentElement) ? document.body.parentElement.scrollLeft : 0;
		}
		return {x: przesOdsX, y: przesOdsY};
	},

	pobPoz: function(e) {
		var tempWspX, tempWspY;
		//ustaw początkowe położenie powiększenia na współczynniki przesunięcia scrollbars
		temp = og.docScrollbars();
		og.scrollBarY = temp.y;
		og.scrollBarX = temp.x;

		//odczytaj położenie myszy nad elementem aktywnym uwzględniając położenie pasków "scrollbars"
		if (e.layerX) {
			tempWspX = e.layerX - og.scrollBarX;
			tempWspY = e.layerY - og.scrollBarY;
		}
		if (e.offsetX) {
			tempWspX = e.offsetX - og.scrollBarX;
			tempWspY = e.offsetY - og.scrollBarY;
		}

		var target = e.target;
		if (!target) target = e.srcElement;
		if (target.nodeName == "IMG") {
			og.obrM.width = target.width;
			og.obrM.height = target.height;
			og.obrM.uchwyt = target;
		}

		//pobierz polożenie miniatury
		og.obrM.top = e.clientY - tempWspY;
		og.obrM.left = e.clientX - tempWspX;
	},

	przesunIskaluj: function(topStart, leftStart, topStop, leftStop, widthStart, widthStop, heightStop) {
		og.powieksz.wRuchu.top = topStart;
		og.powieksz.wRuchu.left = leftStart;
		og.powieksz.wRuchu.width = widthStart;
		og.powieksz.wRuchu.widthStop = widthStop;
		og.powieksz.wRuchu.heightStop = heightStop;

		//ustwa stosunek XY szerokości do wysokości
		og.powieksz.wRuchu.whRatio = og.powieksz.width / og.powieksz.height;

		og.powieksz.wRuchu.tDelta = (topStart - topStop) / og.powieksz.krokiSkal;
		og.powieksz.wRuchu.lDelta = (leftStart - leftStop) / og.powieksz.krokiSkal;
		og.powieksz.wRuchu.wDelta = Math.round((widthStart - widthStop) / og.powieksz.krokiSkal);

		//ustal krok przenikania przy zmniejszaniu
		og.powieksz.alphaStep = 0.75 / og.powieksz.krokiSkal;

		$(og.powieksz.id).style.top = topStop + 'px';
		$(og.powieksz.id).style.left = leftStop + 'px';

		og.przesunIskalujPetla();
	},

	przesunIskalujPetla: function() {
		var top = 1, left = 1, width = 1, height = 1, deltaTmp = 1;

		top = og.powieksz.wRuchu.top - og.powieksz.wRuchu.topStop;
		left = og.powieksz.wRuchu.left - og.powieksz.wRuchu.leftStop;
		if (og.powieksz.wRuchu.wDelta < 0) {
			width = og.powieksz.wRuchu.widthStop - og.powieksz.wRuchu.width;
			height = og.powieksz.wRuchu.heightStop - og.powieksz.wRuchu.height;
			deltaTmp = -1;
		}
		else {
			width = og.powieksz.wRuchu.width - og.powieksz.wRuchu.widthStop;
			height = og.powieksz.wRuchu.height - og.powieksz.wRuchu.heightStop;
			og.powieksz.alpha -= og.powieksz.alphaStep;
			og.alpha(og.powieksz.id, og.powieksz.alpha);
		}

			top = 'stop';
			left = 'stop';

		if (width > og.powieksz.wRuchu.wDelta * deltaTmp) {
			og.powieksz.wRuchu.width -= og.powieksz.wRuchu.wDelta;
			$(og.obrD.id).width = og.powieksz.wRuchu.width;
			$(og.powieksz.id).style.width = og.powieksz.wRuchu.width + 'px';

			og.powieksz.wRuchu.height = (og.powieksz.wRuchu.width / og.powieksz.wRuchu.whRatio);
			$(og.obrD.id).height = og.powieksz.wRuchu.height;
			$(og.powieksz.id).style.height = og.powieksz.wRuchu.height + 'px';
		}
		else {
			$(og.obrD.id).width = og.powieksz.wRuchu.widthStop;
			$(og.powieksz.id).style.width = og.powieksz.wRuchu.widthStop + 'px';
			width = 'stop';

			if (height > (og.powieksz.wRuchu.wDelta / og.powieksz.wRuchu.whRatio) * deltaTmp) {
				og.powieksz.wRuchu.height -= og.powieksz.wRuchu.wDelta / og.powieksz.wRuchu.whRatio;
				$(og.obrD.id).height = og.powieksz.wRuchu.height;
				$(og.powieksz.id).style.height = og.powieksz.wRuchu.height + 'px';
			}
			else {
				og.powieksz.wRuchu.height = og.powieksz.wRuchu.heightStop;
				$(og.obrD.id).height = og.powieksz.wRuchu.height;
				$(og.powieksz.id).style.height = og.powieksz.wRuchu.height + 'px';
				height = 'stop';
			}
		}
		if ((top != 'stop' || left != 'stop' || width != 'stop' || height != 'stop')) window.setTimeout('og.przesunIskalujPetla()', og.powieksz.predkoscSkal);
		else {
			if (og.powieksz.wRuchu.wDelta < 0) og.poMax();
			else og.poMin();
		}
	},

	poMin: function() {
		og.powieksz.visible = 0;
		$(og.powieksz.id).style.display = 'none';
		og.dodajZdarzenie(doc, "mousedown", og.pobPoz);
	},

	poMax: function() {
		og.dodajZdarzenie($(og.powieksz.id), "click", og.powiekszZamknij);
		og.dodajZdarzenie(doc, "click", og.powiekszZamknij);
		document.body.style.cursor = 'pointer';
		og.powieksz.visible = 1;
	},

	powiekszZamknij: function() {
		og.usunZdarzenie(doc, "click", og.powiekszZamknij);
		document.body.style.cursor = 'auto';
		og.usunZdarzenie($(og.powieksz.id), "click", og.powiekszZamknij);
		og.przesunIskaluj(og.obrM.top, og.obrM.left, og.obrM.top, og.obrM.left, og.powieksz.width, og.obrM.width, og.obrM.height);
	},

	init: function() {
		//dodaj obsługę zdarzeń
		this.dodajZdarzenie(doc, "mousedown", this.pobPoz);
	}
}
