// библиотечка для работы с объектами

// переменные, определяющие возможность браузера
var isCSS, isW3C, isIE4, isNN4, isIE6;

// инициализация переменных
function objsInit() {
	if (document.images) {
		isCSS = (document.body && document.body.style) ? true : false;
		isW3C = (isCSS && document.getElementById) ? true : false;
		isIE4 = (isCSS && document.all) ? true : false;
		isNN4 = (document.layers) ? true : false;
		isIE6 = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
	}

//	alert('isCSS: ' + isCSS + '; isW3C: ' + isW3C + '; isIE4: ' + isIE4 + '; isNN4: ' + isNN4 + '; isIE6: ' + isIE6);
}

// рекурсивный поиск объекта Layer для NN4 (по имени)
function objsSeekLayer(docs, name) {
	var objs;

	for (var i = 0; i < doc.layers.length; i++) {
		if (doc.layers[i].name == name) {
			objs = doc.layers[i];
			break;
		}
		if (doc.layers[i].document.layers.length > 0) objs = objsSeyekLaer(doc.layers[i].document, name);
	}

	return (objs);
}

// преобразование имени объекта или ссылки на объект в ссылку на элемент документа
function objsTakeThis(o) {
	var objs;

	if (typeof(o) == "string") {
		if (isW3C) { objs = document.getElementById(o); }
		else
		if (isIE4) { objs = document.all(o); }
		else
		if (isNN4) { objs = objsSeekLayer(o); }
	} else {
		objs = o;
	}

	return (objs);
}

// преобразование имени объекта или ссылки на объект в ссылку на объект его таблицы стилей (или в ссылку на слой для NN4)
function objsTakeStyle(o) {
	var objs = objsTakeThis(o);

	if (objs && isCSS) { objs = objs.style; }

	return (objs);
}

//*******************************************************************
//    Определение различных координат и размеров объекта            *
//*******************************************************************
function elemTakeLeft(o) {
	var elem = objsTakeThis(o);
	var r    = 0;

	if (elem) {
		if (elem.offsetLeft) {
			r = elem.offsetLeft;
		} else
		if (window.getComputedStyle) {
			var s = document.defaultView;
			var c = s.getComputedStyle(elem, null);
			r = c.getPropertyValue("left");
		} else
		if (elem.currentStyle) {
			r = elem.currentStyle["left"];
		} else
		if (elem.style) {
			r = elem.style.left;
		} else
		if (isNN4) {
			r = elem.left;
		}
	}

	if (isNaN(r)) { r = 0; }

	return (parseInt(r));
}

function objsTakeLeft(o) {
	var elem = objsTakeThis(o);
	var r    = 0;

	while (elem) {
		r    += elemTakeLeft(elem);
		elem  = elem.offsetParent;
	}

	if (isNaN(r)) { r = 0; }

	return (parseInt(r));
}

function elemTakeTop(o) {
	var elem = objsTakeThis(o);
	var r    = 0;

	if (elem) {
		if (elem.offsetTop) {
			r = elem.offsetTop;
		} else
		if (window.getComputedStyle) {
			var s = document.defaultView;
			var c = s.getComputedStyle(elem, null);
			r = c.getPropertyValue("top");
		} else
		if (elem.currentStyle) {
			r = elem.currentStyle["top"];
		} else
		if (elem.style) {
			r = elem.style.top;
		} else
		if (isNN4) {
			r = elem.top;
		}
	}

	if (isNaN(r)) { r = 0; }

	return (parseInt(r));
}

function objsTakeTop(o) {
	var elem = objsTakeThis(o);
	var r    = 0;

	while (elem) {
		r    += elemTakeTop(elem);
		elem  = elem.offsetParent;
	}

	if (isNaN(r)) { r = 0; }

	return (parseInt(r));
}


function objsTakeWidth(o) {
	var elem = objsTakeThis(o);
	var r    = 0;

//	alert('TakeWidth\nisCSS: ' + isCSS + '; isW3C: ' + isW3C + '; isIE4: ' + isIE4 + '; isNN4: ' + isNN4 + '; isIE6: ' + isIE6 + '\nname: ' + o + '\nelem: ' + elem);

	if (elem) {
		if (elem.offsetWidth) {
			r = elem.offsetWidth;
		} else
		if (elem.clip && elem.clip.width) {
			r = elem.clip.width;
		} else
		if (elem.style && elem.style.pixelWidth) {
			r = elem.style.pixelWidth;
		}
	}

	if (isNaN(r)) { r = 0; }

	return (parseInt(r));
}

function objsTakeHeight(o) {
	var elem = objsTakeThis(o);
	var r    = 0;

//	alert('TakeHeight\nisCSS: ' + isCSS + '; isW3C: ' + isW3C + '; isIE4: ' + isIE4 + '; isNN4: ' + isNN4 + '; isIE6: ' + isIE6 + '\nname: ' + o + '\nelem: ' + elem);

	if (elem) {
		if (elem.offsetHeight) {
			r = elem.offsetHeight;
		} else
		if (elem.clip && elem.clip.height) {
			r = elem.clip.height;
		} else
		if (elem.style && elem.style.pixelHeight) {
			r = elem.style.pixelHeight;
		}
	}

	if (isNaN(r)) { r = 0; }

	return (parseInt(r));
}

function objsTakeInsideWidth() {
	if (window.innerWidth) {
		return (parseInt(window.innerWidth));
	} else
	if (isIE6) {
		return (parseInt(document.body.parentElement.clientWidth));
	} else
	if (document.body && document.body.clientWidth) {
		return (parseInt(document.body.clientWidth));
	}

	return (0);
}

function objsTakeInsideHeight() {
	if (window.innerHeight) {
		return (parseInt(window.innerHeight));
	} else
	if (isIE6) {
		return (parseInt(document.body.parentElement.clientHeight));
	} else
	if (document.body && document.body.clientHeight) {
		return (parseInt(document.body.clientHeight));
	}

	return (0);
}

//*******************************************************************
// функции работы с DOM объектами
//*******************************************************************

function objsReplaceTxt(eID, text) {
	if (isW3C) {
		var elem = document.getElementById(eID);
		var node = document.createTextNode("" + text);
		elem.replaceChild(node, elem.firstChild);
	}
}


