layerObj.prototype = new superLayer;

function superLayer() {
	// Class
	this.getClassName = layerObjGetClassName;
	this.setClassName = layerObjSetClassName;
	this.setStyle = layerObjSetStyle;
	
	// Movement
	this.slideTo = layerObjSlideTo;
	this.slideBy = layerObjSlideBy;
	this.moveLinear = layerObjMoveLinear;
	
	// Position
	this.getPageLeft = layerObjGetPageLeft;
	this.getPageTop = layerObjGetPageTop;
	
	// Background, Borders
	this.getBgColor = layerObjGetBgColor;
	this.setBgColor = layerObjSetBgColor;
	this.setBorder = layerObjSetBorder;
	
	// Text
	this.getTextColor = layerObjGetTextColor;
	this.setTextColor = layerObjSetTextColor;
	this.getTextAlign = layerObjGetTextAlign;
	this.setTextAlign = layerObjSetTextAlign;
	
	// Image in Layer
	this.getImgLeft = layerObjGetImgLeft;
	this.getImgTop = layerObjGetImgTop;
	this.getImgPageLeft = layerObjGetImgPageLeft;
	this.getImgPageTop = layerObjGetImgPageTop;
	this.getImgWidth = layerObjGetImgWidth;
	this.getImgHeight = layerObjGetImgHeight;
	
	// Content
	this.read = layerObjRead;
	
	// Source (only in <iframe>)
	this.getSrc = layerObjGetSrc;
	this.loadSrc = layerObjLoadSrc;
}

function layerObjGetClassName() {
	return this.layer.className;
}

function layerObjSetClassName(className) {
	this.layer.className = className;
}

function layerObjSetStyle(entry, value)
{
	this.layer.style[entry] = value;
}

function layerObjSlideTo(targetX,targetY,steps,interval) {
	if (this.isMoving) return;
	
	var currentX = parseInt(this.style.left);
	var currentY = parseInt(this.style.top);
	var deltaX = (targetX - currentX) / steps;
	var deltaY = (targetY - currentY) / steps;
	
	this.isMoving = true;
	this.moveLinear(currentX,currentY,deltaX,deltaY,targetX,targetY,steps,interval);
}

function layerObjSlideBy(deltaX,deltaY,steps,interval) {
	if (this.isMoving) return;
	
	var currentX = parseInt(this.style.left);
	var currentY = parseInt(this.style.top);
	var targetX = currentX + deltaX * steps;
	var targetY = currentY + deltaY * steps;
	
	this.isMoving = true;
	this.moveLinear(currentX,currentY,deltaX,deltaY,targetX,targetY,steps,interval);
}

function layerObjMoveLinear(currentX,currentY,deltaX,deltaY,targetX,targetY,steps,interval) {
	currentX += deltaX;
	currentY += deltaY;
	if (steps > 0) {
		this.style.left = Math.round(currentX) + 'px';
		this.style.top = Math.round(currentY) + 'px';
		this.timer = setTimeout(this.id + '.moveLinear(' + currentX + ',' + currentY + ',' + deltaX + ',' + deltaY + ',' + targetX + ',' + targetY + ',' + (steps - 1) + ',' + interval + ')',interval);
	} else {
		this.isMoving = false;
	}
}

function layerObjGetPageLeft() {
	return (this.parent) ? this.parent.offsetLeft + parseInt(this.style.left) : this.layer.offsetLeft;
}

function layerObjGetPageTop() {
	return (this.parent) ? this.parent.offsetTop + parseInt(this.style.top) : this.layer.offsetTop;
}

function layerObjGetBgColor() {
	return this.style.backgroundColor;
}

function layerObjSetBgColor(bgColor) {
	this.style.backgroundColor = bgColor;
}

function layerObjSetBorder(borderColor,borderStyle,borderWidth) {
	this.style.borderColor = borderColor;
	this.style.borderStyle = borderStyle;
	this.style.borderWidth = borderWidth + 'px';
}

function layerObjGetTextColor() {
	return this.style.color;
}	

function layerObjSetTextColor(textColor) {
	this.style.color = textColor;
}	

function layerObjGetTextAlign() {
	return this.style.textAlign;
}

function layerObjSetTextAlign(textAlign) {
	this.style.textAlign = textAlign;
}

function layerObjGetImgLeft(imgName) {
	if (document.images[imgName]) {
		return document.images[imgName].offsetLeft;
	} else {
		if (document.all) {
			return this.layer.document.images[imgName].offsetLeft;
		} else {
			return this.layer.getElementsByTagName('IMG')[imgName].offsetLeft;
		}
	}
}

function layerObjGetImgTop(imgName) {
	if (document.images[imgName]) {
		return document.images[imgName].offsetTop;
	} else {
		if (document.all) {
			return this.layer.document.images[imgName].offsetTop;
		} else {
			return this.layer.getElementsByTagName('IMG')[imgName].offsetTop;
		}
	}
}

function layerObjGetImgPageLeft(imgName) {
	var imgLeft;
	if (document.images[imgName]) {
		imgLeft = document.images[imgName].offsetLeft;
	} else {
		if (document.all) {
			imgLeft = this.layer.document.images[imgName].offsetLeft;
		} else {
			imgLeft = this.layer.getElementsByTagName('IMG')[imgName].offsetLeft;
		}
	}
	return this.getPageLeft() + imgLeft;
}

function layerObjGetImgPageTop(imgName) {
	var imgTop;
	if (document.images[imgName]) {
		imgTop = document.images[imgName].offsetTop;
	} else {
		if (document.all) {
			imgTop = this.layer.document.images[imgName].offsetTop;
		} else {
			imgTop = this.layer.getElementsByTagName('IMG')[imgName].offsetTop;
		}
	}
	return this.getPageTop() + imgTop;
}

function layerObjGetImgWidth(imgName) {
	if (document.images[imgName]) {
		return document.images[imgName].offsetWidth;
	} else {
		if (document.all) {
			return this.layer.document.images[imgName].offsetWidth;
		} else {
			return this.layer.getElementsByTagName('IMG')[imgName].offsetWidth;
		}
	}
}

function layerObjGetImgHeight(imgName) {
	if (document.images[imgName]) {
		return document.images[imgName].offsetHeight;
	} else {
		if (document.all) {
			return this.layer.document.images[imgName].offsetHeight;
		} else {
			return this.layer.getElementsByTagName('IMG')[imgName].offsetHeight;
		}
	}
}

function layerObjRead() {
	return this.layer.innerHTML;
}

function layerObjGetSrc() {
	if (this.layer.src) {
		return this.layer.src;
	}
}

function layerObjLoadSrc(url) {
	this.layer.src = url;
}

