var jestCSS, jestW3C, jestIE4, jestNN4, jestIE6CSS;
var wybranyObiekt;
var przesX, przesY;
var obszar = {lewaKrawedz:20, gornaKrawedz:20, prawaKrawedz:980, dolnaKrawedz:2000};

function inicjujDHTMLAPI() {
	if (document.images) {
		jestCSS = (document.body && document.body.style) ? true : false;
		jestW3C = (jestCSS && document.getElementById) ? true : false;
		jestIE4 = (jestCSS && document.all) ? true : false;
		jestNN4 = (document.layers) ? true : false;
		jestIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
	}
}

window.onload = inicjujDHTMLAPI;

function wyszukajWarstwe(dok, nazwa) {
	var obiekt;
	for (var i = 0; i < dok.layers.length; i++) {
		if (dok.layers[i].name == nazwa) {
			obiekt = dok.layers[i];
			break;
		}
		if (dok.layers[i].document.layers.length > 0) {
			obiekt = wyszukajWarstwe(document.layers[i].document, nazwa);
		}
	}
	return obiekt;
}

function pobierzObiektElem(ob) {
	var obiekt;
	if (typeof ob == "string") {
		if (jestW3C) {
			obiekt = document.getElementById(ob);
		} else if (jestIE4) {
			obiekt = document.all(ob);
		} else if (jestNN4) {
			obiekt = wyszukajWarstwe(document, ob);
		}
	} else {
		obiekt = ob;
	}
	return obiekt;
}

function pobierzObiekt(ob) {
	var obiekt = pobierzObiektElem(ob);
	if (obiekt && jestCSS) {
		obiekt = obiekt.style;
	}
	return obiekt;
}

function przesunDo(ob, x, y) {
	var obiekt = pobierzObiekt(ob);
	if (obiekt) {
		if (jestCSS) {
			var jednostki = (typeof obiekt.left == "string") ? "px" : 0;
			obiekt.left = x + jednostki;
			obiekt.top = y + jednostki;
		} else if (jestNN4) {
			obiekt.moveTo(x,y);
		}
	}
}


function przesunDo(ob, x, y) {
	var obiekt = pobierzObiekt(ob);
	if (obiekt) {
		if(jestCSS) {
			var jednostki = (typeof obiekt.left == "string") ? "px" : 0;
			obiekt.left = x + jednostki;
			obiekt.top = y + jednostki;
		} else if (jestNN4) {
			obiekt.moveTo(x,y)
		}
	}
}

function przesun(ob, deltaX, deltaY) {
	var obiekt = pobierzObiekt(ob);
	if(obiekt) {
		if(jestCSS) {
			var jednostki = (typeof obiekt.left == "string") ? "px" : 0;
			obiekt.left = pobierzWspX(ob) + deltaX + jednostki;
			obiekt.top = pobierzWspY(ob) + deltaY + jednostki;
		} else if (jestNN4) {
			obiekt.moveBy(deltaX, deltaY);
		}
	}
}

function podajIndeksZ(ob, pozycjaZ) {
	var obiekt = pobierzObiekt(ob);
	if (obiekt) {
		obiekt.zIndex = pozycjaZ;
	}
}

function ustawKolorTla(ob, kolor) {
	var obiekt = pobierzObiekt(ob);
	if (obiekt) {
		if (jestNN4) {
			obiekt.bgColor = kolor;
		} else if (jestCSS) {
			obiekt.backgroundColor = kolor;
		}
	}
}


function pokaz (ob) {
	var obiekt = pobierzObiekt(ob);
	if (obiekt) {
		obiekt.visibility = "visible";
	}
}

function ukryj(ob) {
	var obiekt = pobierzObiekt(ob);
	if (obiekt) {
		obiekt.visibility = "hidden";
	}
}

function pobierzWspX (ob) {
	var elem = pobierzObiektElem(ob);
	var wynik = 0;
	if (document.defaultView) {
		var styl = document.defaultView;
		var cssDekl = styl.getComputedStyle(elem, "");
		wynik = cssDekl.getPropertyValue("left");
	} else if (elem.currentStyle) {
		wynik = elem.currentStyle.left;
	} else if (elem.style) {
		wynik = elem.style.left;
	} else if (jestNN4) {
		wynik = elem.left;
	}
	return parseInt(wynik);
}


function pobierzWspY(ob) {
	var elem = pobierzObiektElem(ob);
	var wynik = 0;
	if (document.defaultView) {
		var styl = document.defaultView;
		var cssDekl = styl.getComputedStyle(elem, "");
		wynik = cssDekl.getPropertyValue("top");
	} else if (elem.currentStyle) {
		wynik = elem.currentStyle.top;
	} else if (elem.style) {
		wynik = elem.style.top;
	} else if (jestNN4) {
		wynik = elem.top;
	}
	return parseInt(wynik);
}

function pobierzSzerObiektu(ob) {
	var elem = pobierzObiektElem(ob);
	var wynik = 0;
	if (elem.offsetWidth) {
		if (elem.scrollWidth && (elem.offsetWidth != elem.scrollWidth)) {
			wynik = elem.scrollWidth;
		} else {
			wynik = elem.offsetWidth;
		}
	} else if (elem.clip && elem.clip.width) {
		wynik = elem.clip.width;
	} else if (elem.style && elem.style.pixelWidth) {
		wynik = elem.style.pixelWidth;
	}
	return parseInt(wynik);
}

function pobierzWysObiektu(ob) {
	var elem = pobierzObiektElem(ob);
	var wynik = 0;
	if (elem.offsetHeight) {
		wynik = elem.offsetHeight;
	} else if (elem.clip && elem.clip.height) {
		wynik = elem.clip.height;
	} else if (elem.style && elem.style.pixelHeight) {
		wynik = elem.style.pixelHeight;
	}
	return parseInt(wynik);
}

function pobierzWewnSzerOkna() {
	if (window.innerWidth) {
		return window.innerWidth;
	} else if (jestIE6CSS) {
		return document.body.parentElement.clientWidth;
	} else if (document.body && document.body.clientWidth) {
		return document.body.clientWidth;
	}
	return 0;
}

function pobierzWewnWysOkna() {
	if (window.innerHeight) {
		return window.innerHeight;
	} else if (jestIE6CSS) {
		return document.body.parentElement.clientHeight;
	} else  if (document.body && document.body.clientHeight) {
		return document.body.clientHeight;
	}
	return 0;
}

function wybranyElement(zdarzenie) {
	var cel = (zdarzenie.target) ? zdarzenie.target : zdarzenie.srcElement;
	var idDiv = (cel.name) ? cel.name + "Otocz" : "";
	if (idDiv) {
		if (document.layers) {
			wybranyObiekt = document.layers[idDiv];
		} else if (document.all) {
			wybranyObiekt = document.all(idDiv);
		} else if (document.getElementById) {
			wybranyObiekt = document.getElementById(idDiv);
		}
		podajIndeksZ(wybranyObiekt, 100);
		return;
	}
	wybranyObiekt = null;
	return;
}

function wlacz(zdarzenie) {
	zdarzenie = (zdarzenie) ? zdarzenie: event;
	wybranyElement(zdarzenie);

	if (wybranyObiekt) {
		if (document.body && document.body.setCapture) {
			document.body.setCapture();
		}
		if (zdarzenie.pageX) {
			przesX = zdarzenie.pageX - ((wybranyObiekt.offsetLeft) ?
					 	wybranyObiekt.offsetLeft : wybranyObiekt.left);
			przesY = zdarzenie.pageY - ((wybranyObiekt.offsetTop) ?
						wybranyObiekt.offsetTop : wybranyObiekt.top);
		} else if (typeof zdarzenie.offsetX != "undefined") {
			przesX = zdarzenie.offsetX - ((zdarzenie.offsetX < -2) ?
						0 : document.body.scrollLeft);
			przesX -= (document.body.parentElement &&
						 document.body.parentElement.scrollLeft) ?
						 document.body.parentElement.scrollLeft : 0
		   przesY = zdarzenie.offsetY - ((zdarzenie.offsetY < -2) ?
		   			0 : document.body.scrollTop);
		   przesY -= (document.body.parentElement &&
		   			 document.body.parentElement.scrollTop) ?
		   			 document.body.parentElement.scrollTop : 0
		} else if (typeof zdarzenie.clientX != "undefibed") {
			przesX = zdarzenie.clientX - ((wybranyObiekt.offsetLeft) ?
						wybranyObiekt.offsetLeft : 0);
			przesY = zdarzenie.clientY - ((wybranyObiekt.offsetTop) ?
						wybranyObiekt.offsetTop : 0);
		}
		return false;
	}
}


function przeciagnij(zdarzenie) {
	zdarzenie = (zdarzenie) ? zdarzenie: event;
	var x, y, szer, wys;
	if (wybranyObiekt) {
		if (zdarzenie.pageX) {
			x = zdarzenie.pageX - przesX;
			y = zdarzenie.pageY - przesY;
		} else if (zdarzenie.clientX || zdarzenie.clientY) {
			x = zdarzenie.clientX - przesX;
			y = zdarzenie.clientY - przesY;
		}
		szer = pobierzSzerObiektu(wybranyObiekt);
		wys = pobierzWysObiektu(wybranyObiekt);
		x = (x < obszar.lewaKrawedz) ? obszar.lewaKrawedz :
			  ((x + szer > obszar.prawaKrawedz) ? obszar.prawaKrawedz - szer: x);
		y = (y < obszar.gornaKrawedz) ? obszar.gornaKrawedz :
			  ((y + wys > obszar.dolnaKrawedz) ? obszar.dolnaKrawedz - wys : y);
		przesunDo(wybranyObiekt, x, y);
		zdarzenie.cancelBubble = true;
		return false;
	}
}

function zwolnij(zdarzenie) {
	if (wybranyObiekt) {
		podajIndeksZ(wybranyObiekt, 0);
		if (document.body && document.body.releaseCapture) {
			document.body.releaseCapture();
		}
		wybranyObiekt = null;
	}
}

function inicjujPrzeciaganie() {
	if (document.layers) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
		return;
	} else if (document.body & document.body.addEventListener) {
		document.addEventListener("mousedown", wlacz, true);
		document.addEventListener("mousemove", przeciagnij, true);
		document.addEventListener("mouseup", zwolnij, true);
		return;
	}
	document.onmousedown = wlacz;
	document.onmousemove = przeciagnij;
	document.onmouseup = zwolnij;
	return;
}