// Глобальные переменные
var isCSS, isW3C, isIE4, isNN4;
// инициализация после загрузки, чтобы все браузеры
// успели сформировать структуру объектов
function initDHTMLAPI(){	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;
		isIE6Css=(document.compatMode && document.compatMode.indexOf("CSS1")>=0) ? true : false;	}}

// назначение обработчика событий для инициализации API
//window.onload=initDHTMLAPI();

// поиск вложенного объекта layer в NN4 по имени
function seekLayer (doc, name){	var theObj;
	for (var i=0; i < doc.layer.length; i++){		if (doc.layers[i].name==name){			theObj=doc.layers[i];
			break;		}	}
	// переходим к вложенным слоям если таковые имеются
	if (doc.layers[i].document.layers.length > 0){		theObj=seekLayer(document.layers[i].document, name);	}
	return theObj;}

//преобразуем строку с имененм элемента или ссылку на объект в ссылку на элемент документа.
function getRawObject(obj){	var theObj;
	if (typeof obj == "string"){		if (isW3C){			theObj=document.getElementById(obj);		}else if (isIE4){			theObj=document.all(Obj);		}else if (isNN4){			theObj=seekLayer(document, obj)		}	} else{		//получаем ссылку на объект
		theObj = obj;	}
	return theObj;}

// преобразуем строку с имененм объекта или ссылку на объект
// в ссылку на объект стиля (или в ссылку на слой NN4)
function getObject(obj){	var theObj = getRawObject(obj);
	if (theObj && isCSS){		theObj = theObj.style;	}
	return theObj;}

//располагаем объект по определенным пиксельным координатам
function shiftTo(obj, x, y){	var theObj=getObject(obj);
	if (theObj){		if (isCSS){			//преобразуем некорректные числовые значения
			var units = (typeof theObj.left == "string") ? 'px' : 0;
			theObj.left = x + units;
			theObj.top = y + units;		} else if (isNN4){			theObj.moveTo(x,y);		}	}}

//сдвиг объекта на заданный вектор
function shiftBy(obj, deltaX, deltaY){	var theObj = getObject(obj);
	if (theObj){		if (isCSS){			var units = (typeof theObj.left == "string") ? "px" : 0;
			theObj.left = getObjectLeft(obj) + deltaX + units;
			theObj.top = getObjectTop(obj) + deltaY + units;		} else if (isNN4){			theObj.moveBy(deltaX, deltaY);		}	}}

//устанавливаем порядок наложения объектов (Z order)
function setZIndex(obj, zOrder){	var theObj=getObject(obj);
	if (theObj){		theObj.zIndex = zOrder;	}}

// задаем фоновый цвет объекта
function setBGColor(obj, color){	var theObj=getObject(obj);
	if (theObj){		if(isNN4){			theObj.bgColor = color;		} else if (isCSS){			theObj.backgroundColor = color;		}	}}

//делаем объект видимым
function show(obj){	var theObj = getObject(obj);
	if (theObj){		theObj.display = "block";	}}

// убираем объект с экрана
function hide(obj){	var theObj = getObject(obj);
	if (theObj){		theObj.display = "none";	}}

// определение горизонтальной координаты элемента
function getObjectLeft(obj){	var elem = getRawObject(obj);
	var result=0;
	if(document.defaultView){		var style = document.defaultView;
		var cssDecl = style.getComputedStyle(elem,"");
		result = cssDecl.getPropertyValue("left");	} else if (elem.currentStyle) {		result = elem.currentStyle.left	} else if(elem.style){		result = elem.style.left	} else if (isNN4){		result = elem.left	}
	return parseInt(result);}

// определение вертикальной координаты элемента
function getObjectTop(obj){
	var elem = getRawObject(obj);
	var result=0;
	if(document.defaultView){
		var style = document.defaultView;
		var cssDecl = style.getComputedStyle(elem,"");
		result = cssDecl.getPropertyValue("top");
	} else if (elem.currentStyle) {
		result = elem.currentStyle.top
	} else if(elem.style){
		result = elem.style.top
	} else if (isNN4){
		result = elem.top
	}
	return parseInt(result);
}

// определение ширины отображаемого на экране объекта
function getObjectWidth(obj){	var elem = getRawObject(obj);
	var result=0;
	if (elem.offsetWidth){		result = elem.offsetWidth;	} else if (elem.clip && elem.clip.width){		result = elem.clip.width;	} else if (elem.style && elem.style.pixelWidth){		result = elem.style.pixelWidth;	}
	return parseInt(result);}

// определение высоты отображаемого на экране объекта
function getObjectHeight(obj){
	var elem = getRawObject(obj);
	var result=0;
	if (elem.offsetHeight){
		result = elem.offsetHeight;
	} else if (elem.clip && elem.clip.height){
		result = elem.clip.height;
	} else if (elem.style && elem.style.pixelHeight){
		result = elem.style.pixelHeight;
	}
	return parseInt(result);
}

// Возвращает ширину доступного в окне браузера пространства
function getInsideWindowWidth(){	if (window.innerWidth){		return window.innerWidth;	} else if (isIE6CSS){		//измеряем clientWidth элемента html
		return document.body.parentElement.clientWidth;	} else if (document.body && document.body.clientWidth){		return document.body.clientWidth;	}
	return 0;}

// Возвращает высотоу доступного в окне браузера пространства
function getInsideWindowHeight(){
	if (window.innerHeight){
		return window.innerHeight;
	} else if (isIE6CSS){
		//измеряем clientWidth элемента html
		return document.body.parentElement.clientHeight;
	} else if (document.body && document.body.clientHeight){
		return document.body.clientHeight;
	}
	return 0;
}

// определение абсолютных координат элемента
function getElementPosition(elemID){	var offsetTrail = getRawObject(elemID);
	var offsetLeft = 0;
	var offsetTop = 0;

	while (offsetTrail){		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail=offsetTrail.offsetParent;	}
	if (navigator.userAgent.indexOf("Mac") !=-1 &&
	typeof document.body.leftMargin !='undefined'){		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;	}
	return {left:offsetLeft, top:offsetTop}}
