/******************************************************************* * * File    : doLayer.js * * Created : 2000/06/08 * * Author  : Roy Whittle  (Roy@Whittle.com) www.Roy.Whittle.com * * Purpose : To create a cross browser dynamic layers. This *		library is based on the library defined in the *		excellent book. "JavasScript - The Definitive guide" *		by David Flanagan. Published by O'Reilly. *		ISBN 1-56592-392-8 * * History * Date         Version        Description * * 2000-06-08	1.0		Initial version * 2000-06-17	1.1		Changed function name to setzIndex()* 2000-06-17	1.2		Changed function name to getzIndex()* 2000-08-07	1.3		Added the event handling functionality*					from the book.* 2000-08-15	1.4		Finally! The NS functions are now prototypes.* 2000-10-14	1.5		Attempting to add NS6 (W3C Standard) functionality* 2000-11-04	1.6		Added NS6 Event handling* 2000-11-06	1.7		Added doLayerFromObj - Allows pre existing *					layers/divs to gain the functionality of doLayer.* 2000-11-19	1.8		Changed the event handling to use an event object*					and make the core properties the same.*					e.type, e.button*					e.layerX, e.layerY,  e.clientX, e.clientY, e.pageX, e.pageY*					e.keyCode, e.altKey, e.ctrlKey, e.shiftKey***********************************************************************/ var doLayerNo=0; function doLayer(newLayer, x, y) {	if(x==null)x=0; 	if(y==null)y=0;  	if(document.layers) 	{		if(typeof newLayer == "string")		{			this.layer=new Layer(100); 			this.layer.document.open(); 			this.layer.document.write(newLayer); 			this.layer.document.close(); 		}		else			this.layer=newLayer;		this.layer.moveTo(x,y); 		this.images=this.layer.document.images;  	} 	else 	if(document.all) 	{		var Xname;		if(typeof newLayer == "string")		{			xName="doLayer" + doLayerNo++;  			var txt =   "<DIV ID='" + xName 				+ "' STYLE=\"position:absolute;" 				+ "left:"  + x + ";" 				+ "top:"   + y + ";" 				+ "visibility:hidden\">" 				+ newLayer  				+ "</DIV>"; 			document.body.insertAdjacentHTML("BeforeEnd",txt); 		}		else			xName=newLayer.id;		this.content = document.all[xName]; 		this.layer   = document.all[xName].style; 		this.images  = document.images; 	} 	else 	if (document.getElementById)	{		/*** Add Netscape 6.0 support (NOTE: This may work in I.E. 5+. Will have to test***/		var newDiv;		if(typeof newLayer == "string")		{			var xName="doLayer" + doLayerNo++;			var txt = ""				+ "position:absolute;"				+ "left:"  + x + "px;"				+ "top:"   + y + "px;"				+ "visibility:hidden";			var newRange   = document.createRange();			newDiv = document.createElement("DIV");			newDiv.setAttribute("style",txt);			newDiv.setAttribute("id", xName);			document.body.appendChild(newDiv);			newRange.setStartBefore(newDiv);			strFrag = newRange.createContextualFragment(newLayer);				newDiv.appendChild(strFrag);		}		else			newDiv = newLayer;		this.content = newDiv;			this.layer   = newDiv.style;		this.images  = document.images;	}	return(this); } function doLayerFromObj(theObj){	if(document.layers)		return(new doLayer(document.layers[theObj]));	else 	if(document.all)		return(new doLayer(document.all[theObj]));	else 	if(document.getElementById)		return(new doLayer(document.getElementById(theObj)));}if(navigator.appName.indexOf("Netscape") != -1 && !document.getElementById){var eventmasks = {      onabort:Event.ABORT, onblur:Event.BLUR, onchange:Event.CHANGE,      onclick:Event.CLICK, ondblclick:Event.DBLCLICK,       ondragdrop:Event.DRAGDROP, onerror:Event.ERROR,       onfocus:Event.FOCUS, onkeydown:Event.KEYDOWN,      onkeypress:Event.KEYPRESS, onkeyup:Event.KEYUP, onload:Event.LOAD,      onmousedown:Event.MOUSEDOWN, onmousemove:Event.MOUSEMOVE,       onmouseout:Event.MOUSEOUT, onmouseover:Event.MOUSEOVER,       onmouseup:Event.MOUSEUP, onmove:Event.MOVE, onreset:Event.RESET,      onresize:Event.RESIZE, onselect:Event.SELECT, onsubmit:Event.SUBMIT,      onunload:Event.UNLOAD};/**** START prototypes for NS ***/ doLayer.prototype.moveTo 	= function(x,y) 	{ this.layer.moveTo(x,y); }doLayer.prototype.moveBy 	= function(x,y) 	{ this.layer.moveBy(x,y); }doLayer.prototype.show		= function() 	{ this.layer.visibility = "show"; }doLayer.prototype.hide 		= function() 	{ this.layer.visibility = "hide"; }doLayer.prototype.setzIndex	= function(z)	{ this.layer.zIndex = z; }doLayer.prototype.setBgColor 	= function(color) { this.layer.bgColor = color; if(color==null)this.layer.background.src=null;}doLayer.prototype.setBgImage 	= function(image) { this.layer.background.src = image; }doLayer.prototype.getX 		= function() 	{ return this.layer.left; }doLayer.prototype.getY 		= function() 	{ return this.layer.top; }doLayer.prototype.getWidth 	= function() 	{ return this.layer.width; }doLayer.prototype.getHeight 	= function() 	{ return this.layer.height; }doLayer.prototype.getzIndex	= function()	{ return this.layer.zIndex; }doLayer.prototype.isVisible 	= function() 	{ return this.layer.visibility == "show"; }doLayer.prototype.setContent   = function(xHtml){	this.layer.document.open();	this.layer.document.write(xHtml);	this.layer.document.close();}doLayer.prototype.clip = function(x1,y1, x2,y2){	this.layer.clip.top	=y1;	this.layer.clip.left	=x1;	this.layer.clip.bottom	=y2;	this.layer.clip.right	=x2;}doLayer.prototype.addEventHandler = function(eventname, handler) {        this.layer.captureEvents(eventmasks[eventname]);        var xl = this;        this.layer[eventname] = function(event) { 		event.clientX	= event.pageX;		event.clientY	= event.pageY;		event.button	= event.which;		event.keyCode	= event.which;		event.altKey	=((event.modifiers & Event.ALT_MASK) != 0);		event.ctrlKey	=((event.modifiers & Event.CONTROL_MASK) != 0);		event.shiftKey	=((event.modifiers & Event.SHIFT_MASK) != 0);            return handler(xl, event);        }}doLayer.prototype.removeEventHandler = function(eventName) {	this.layer.releaseEvents(eventmasks[eventName]);	delete this.layer[eventName];}/*** END NS ***/ } else if(document.all) { /*** START prototypes for IE ***/ doLayer.prototype.moveTo = function(x,y) { 	this.layer.pixelLeft = x; 	this.layer.pixelTop = y; } doLayer.prototype.moveBy = function(x,y) { 	this.layer.pixelLeft += x; 	this.layer.pixelTop += y; } doLayer.prototype.show		= function() 	{ this.layer.visibility = "visible"; } doLayer.prototype.hide		= function() 	{ this.layer.visibility = "hidden"; } doLayer.prototype.setzIndex	= function(z)	{ this.layer.zIndex = z; } doLayer.prototype.setBgColor	= function(color) { this.layer.backgroundColor = color==null?'transparent':color; } doLayer.prototype.setBgImage	= function(image) { this.layer.backgroundImage = "url("+image+")"; } doLayer.prototype.setContent   = function(xHtml)	{ this.content.innerHTML=xHtml; } doLayer.prototype.getX		= function() 	{ return this.layer.pixelLeft; } doLayer.prototype.getY		= function() 	{ return this.layer.pixelTop; } doLayer.prototype.getWidth	= function() 	{ return this.layer.pixelWidth; } doLayer.prototype.getHeight	= function() 	{ return this.layer.pixelHeight; } doLayer.prototype.getzIndex	= function()	{ return this.layer.zIndex; } doLayer.prototype.isVisible	= function()	{ return this.layer.visibility == "visible"; } doLayer.prototype.clip		= function(x1,y1, x2,y2) { 	this.layer.clip="rect("+y1+" "+x2+" "+y2+" "+x1+")"; 	this.layer.pixelWidth=x2; 	this.layer.pixelHeight=y2; 	this.layer.overflow="hidden"; }doLayer.prototype.addEventHandler = function(eventName, handler) {	var xl = this;	this.content[eventName] = function() 	{             var e = window.event;		e.layerX = e.offsetX;		e.layerY = e.offsetY;            e.cancelBubble = true;            return handler(xl, e); 	}}doLayer.prototype.removeEventHandler = function(eventName) {	this.content[eventName] = null;} /*** END IE ***/ } else if (document.getElementById) {/*** W3C (NS 6) ***/ doLayer.prototype.moveTo = function(x,y){	this.layer.left = x+"px";	this.layer.top = y+"px";}doLayer.prototype.moveBy 	= function(x,y) 	{ this.moveTo(this.getX()+x, this.getY()+y); } doLayer.prototype.show		= function() 	{ this.layer.visibility = "visible"; }doLayer.prototype.hide		= function() 	{ this.layer.visibility = "hidden"; }doLayer.prototype.setzIndex	= function(z)	{ this.layer.zIndex = z; }doLayer.prototype.setBgColor	= function(color) { this.layer.backgroundColor = color==null?'transparent':color; }doLayer.prototype.setBgImage	= function(image) { this.layer.backgroundImage = "url("+image+")"; }doLayer.prototype.getX		= function() 	{ return parseInt(this.layer.left); }doLayer.prototype.getY		= function() 	{ return parseInt(this.layer.top); }doLayer.prototype.getWidth	= function() 	{ return parseInt(this.layer.width); }doLayer.prototype.getHeight	= function() 	{ return parseInt(this.layer.height); }doLayer.prototype.getzIndex	= function()	{ return this.layer.zIndex; }doLayer.prototype.isVisible	= function()	{ return this.layer.visibility == "visible"; }doLayer.prototype.clip		= function(x1,y1, x2,y2){	this.layer.clip="rect("+y1+" "+x2+" "+y2+" "+x1+")";	this.layer.width=x2 + "px";	this.layer.height=y2+ "px";	this.layer.overflow="hidden";}doLayer.prototype.addEventHandler = function(eventName, handler) {	var xl = this;	this.content[eventName] = function(e) 	{             e.cancelBubble = true;            return handler(xl, e);	}}doLayer.prototype.removeEventHandler = function(eventName) {	delete this.content[eventName];}doLayer.prototype.setContent   = function(xHtml){	var newRange   = document.createRange();	newRange.setStartBefore(this.content);	while (this.content.hasChildNodes())		this.content.removeChild(this.content.lastChild);	var strFrag    = newRange.createContextualFragment(xHtml);		this.content.appendChild(strFrag);}} else{doLayer.prototype.moveTo 	= function(x,y) 	{  }doLayer.prototype.moveBy 	= function(x,y) 	{  }doLayer.prototype.show 		= function() 	{  }doLayer.prototype.hide 		= function() 	{  }doLayer.prototype.setzIndex	= function(z) {  }doLayer.prototype.setBgColor 	= function(color) {  }doLayer.prototype.setBgImage 	= function(image) {  }doLayer.prototype.getX 		= function() 	{ return 0; }doLayer.prototype.getY 		= function() 	{ return 0; }doLayer.prototype.getWidth 	= function() 	{ return 0; }doLayer.prototype.getHeight 	= function() 	{ return 0; }doLayer.prototype.getzIndex	= function()	{ return 0; }doLayer.prototype.isVisible 	= function() 	{ return false; }doLayer.prototype.setContent   = function(xHtml) { }}/*** End  - doLayer - a cross browser layer object by www.Roy.Whittle.com ***/ 