var initf = 0;
var innerW,innerH,scLeft,scTop,evinnerW,evinnerH;

function init(x,y)
{
	if(!initf++){
		dynamicLayerInit();
		setInnerSize();

		if(typeof(cinit) == 'function'){
			cinit();
		}
		if(typeof(winResize) == 'function'){
			window.onresize = winResize;
		}
	}
}

function setInnerSize()
{
	if(is.ns){
		innerW = window.innerWidth;
		innerH = window.innerHeight;
		scLeft = window.pageXOffset;
		scTop  = window.pageYOffset;
	}else{
		innerW = document.body.clientWidth;
		innerH = document.body.clientHeight;
		scLeft = document.body.scrollLeft;
		scTop  = document.body.scrollTop;
	}
}

function dynamicLayer(id,nest,frm)
{
	if(!is.ns6 && !dynamicLayer.set && !frm)
		dynamicLayerInit();
	this.frame = frm || self;

	if(is.ie){
		this.elm = this.event = this.frame.document.all[id];
		this.css = this.frame.document.all[id].style;
		this.doc = document;
		this.x = this.elm.offsetLeft;
		this.y = this.elm.offsetTop;
		this.w = this.sw = (is.ie4)? this.css.pixelWidth : this.elm.offsetWidth;
		this.h = this.sh = (is.ie4)? this.css.pixelHeight : this.elm.offsetHeight;
	}else if(is.ns4){
		if(!frm){
			if(!nest)
				nest = dynamicLayer.nestArray[id];
			if(!dynamicLayerTest(id,nest))
				return;
			this.css = (nest) ? eval("document."+nest+".document."+id) : document.layers[id];
		}
		else this.css = (nest) ? eval("frm.document."+nest+".document."+id) : frm.document.layers[id];
		this.elm = this.event = this.css;
		this.doc = this.css.document;
		this.x = this.css.left;
		this.y = this.css.top;
		this.sw = this.doc.width;
		this.sh = this.doc.height;
		this.w = this.css.clip.right - this.css.clip.left;
		this.h = this.css.clip.bottom - this.css.clip.top;
	}else if(is.ns6){
		this.elm = document.getElementById(id);
		this.css = this.elm.style;
		this.doc = document;
		this.x = this.elm.offsetLeft;
		this.y = this.elm.offsetTop;
		this.w = this.sw = this.elm.offsetWidth;
		this.h = this.sh = this.elm.offsetHeight;
	}
	this.id = id;
	this.nest = nest;
	this.obj = id + "dynamicLayer";
	eval(this.obj + "=this");
}

function dynamicLayerInit(nest)
{
	if(!dynamicLayer.set)
		dynamicLayer.set = true;

	if(is.ie){
		for(var i=0; i<document.all.tags("DIV").length; i++){
			var divname = document.all.tags("DIV")[i].id;
			var index = divname.indexOf("Div");
			if(index > 0){
				eval(divname.substr(0,index)+' = new dynamicLayer("'+divname+'")');
			}
		}
	}else if(is.ns4){
		if(nest)
			var ref = eval('document.'+nest+'.document');
		else{
			var ref = document;
			nest = '';
		}
		for(var i=0; i<ref.layers.length; i++){
			var divname = ref.layers[i].name;
			dynamicLayer.nestArray[divname] = nest;
			var index = divname.indexOf("Div");
			if(index > 0){
				eval(divname.substr(0,index)+' = new dynamicLayer("'+divname+'","'+nest+'")');
			}
			if(ref.layers[i].document.layers.length > 0){
				dynamicLayer.refArray[dynamicLayer.refArray.length] = (nest=='')? ref.layers[i].name : nest+'.document.'+ref.layers[i].name;
			}
		}
		if(dynamicLayer.refArray.n < dynamicLayer.refArray.length){
			dynamicLayerInit(dynamicLayer.refArray[dynamicLayer.refArray.n++]);
		}
	}else if(is.ns6){
		var p=0;
		while(document.getElementsByTagName("DIV").item(p) != null){
			var divname = document.getElementsByTagName("DIV").item(p).id;
			var index = divname.indexOf("Div");
			if(index > 0){
				eval(divname.substr(0,index)+' = new dynamicLayer("'+divname+'")');
			}
			p++;
		}
	}
	return true;
}

function dynamicLayerShow()
{
	this.css.visibility = (is.ns4) ? "show" : "visible";
}

function dynamicLayerHide()
{
	this.css.visibility = (is.ns4) ? "hide" : "hidden";
}

function dynamicLayerGetVisibility()
{
	return ((is.ns4) ? this.css.visibility == "show" : this.css.visibility=="visible");
}

function dynamicLayerMoveTo(x,y)
{
	if(x!=null){
		this.x = x;
		(is.ie) ? this.css.pixelLeft = this.x : this.css.left = this.x;
	}
	if(y!=null){
		this.y = y;
		(is.ie) ? this.css.pixelTop = this.y : this.css.top = this.y;
	}
}

function dynamicLayerMoveBy(x,y)
{
	this.moveTo(this.x+x,this.y+y);
}

function dynamicLayerClipInit(clipTop, clipRight, clipBottom, clipLeft)
{
	this.clipTo(clipTop, clipRight, clipBottom, clipLeft);
}

function dynamicLayerClipTo(tp, rt, bt, lt)
{
	if(tp==null) tp = this.clipValues('tp');
	if(rt==null) rt = this.clipValues('rt');
	if(bt==null) bt = this.clipValues('bt');
	if(lt==null) lt = this.clipValues('lt');
	if(is.ie || is.ns6){
		this.css.clip = "rect("+tp+"px "+rt+"px "+bt+"px "+lt+"px)";
	}else if(is.ns4){
		this.css.clip.top = tp;
		this.css.clip.right = rt;
		this.css.clip.bottom = bt;
		this.css.clip.left = lt;
	}
}

function dynamicLayerClipValues(which)
{
	var f,clipv;
	if(is.ns6 || is.ie){
		f = true;
		if(is.ie4 && is.p=="mac")
			clipv = this.css.clip.split("rect(")[1].split(")")[0].split(" ");
		else	clipv = this.css.clip.split("rect(")[1].split(")")[0].split("px");
	}else if(is.ns4){
		f = false;
		clipv = "";
	}
	if(which=="tp") return ((f) ? Number(clipv[0]) : this.css.clip.top);
	if(which=="rt") return ((f) ? Number(clipv[1]) : this.css.clip.right);
	if(which=="bt") return ((f) ? Number(clipv[2]) : this.css.clip.bottom);
	if(which=="lt") return ((f) ? Number(clipv[3]) : this.css.clip.left);
}

function dynamicLayerResizeTo(w,h)
{
	if(w != null){
		this.w = this.sw = w;
		(is.ns4) ? this.doc.width = w : this.css.width = w;
	}
	if(h != null){
		this.h = this.sh = h;
		(is.ns4) ? this.doc.height = h : this.css.height = h;
	}
}

// the prototype is declared.
dynamicLayer.prototype.moveTo = dynamicLayerMoveTo;
dynamicLayer.prototype.moveBy = dynamicLayerMoveBy;
dynamicLayer.prototype.show = dynamicLayerShow;
dynamicLayer.prototype.hide = dynamicLayerHide;
dynamicLayer.prototype.getVisibility = dynamicLayerGetVisibility;
dynamicLayer.prototype.clipInit = dynamicLayerClipInit;
dynamicLayer.prototype.clipTo = dynamicLayerClipTo;
dynamicLayer.prototype.clipValues = dynamicLayerClipValues;
dynamicLayer.prototype.resizeTo = dynamicLayerResizeTo;

dynamicLayer.set = false;
dynamicLayerTest = new Function('return true');
dynamicLayer.nestArray = new Array();
dynamicLayer.refArray = new Array();
dynamicLayer.refArray.n = 0;

function reloadNS(ev)
{
	if(is.ns4 && ev.type && ev.type=='resize'){
		if(ev.width && ev.height){
			if(ev.width != evinnerW || ev.height != evinnerH){
				evinnerW = ev.width;
				evinnerH = ev.height;
				window.location.reload();
			}
		}
	}
}
