// start info
if(typeof jsReport != 'undefined'){
	jsVersion = new Array(
	/*Name			=*/ 'Easy Layers',
	/*Version 		=*/ '1.3',
	/*Date 			=*/ 20021111,
	/*Author		=*/ 'Maurice van Creij',
	/*ProjectCode	=*/ 'l1_easylayers',
	/*Summary		=*/ 'Easily define and manipulate layers and iframes without the hassle of browser specific code',
	/*Dependencies	=*/ new Array('easylayers.js','easystyles.js','browsercheck.js'),
	/*Browsers		=*/ new Array('NS','MO','IE','OP'),
	/*Changes		=*/ new Array(
						'1.2: split off the style-specific code to form "easystyles.js".',
						'1.1: changed all functions to check for W3C-compliant (dom-compatible) browsers first.',
						'1.0: cleaned up enough bugs to make it usuable as a first release',
						'0.95: finalized the "suggest...()" functions',
						'0.94: fixed broken scroll-lock in IE',
						'0.93: added \'suggest...()\'-functions to complement \'set...()\'-functions for filtering out repeated redundant changes',
						'0.92: fixed a graphic redundancy in the setBackground() function',
						'0.91: Scrolllock-function of layers added',
					  	'0.9: A modular version was compiled from code-scraps, layer creation functions added'
					  	),
	/*Usage			=*/ new Array(
						'<script language="javascript" src="collection.js"></script>',
						'<script language="javascript">',
						'<!--',
						'	//			objName,booAbsolutePos,intXpos,intYpos,intZpos,intWidth,intHeight,intDepth,strContent,strUrl,booScrollable,booVisible,booScrollLock,booOffScreenGuard',
						'	defineLayer(\'layer0\',true,64,48,10,320,240,1,\'Hello dude...\',\'\',false,true,true,true)',
						'	defineLayer(\'layer1\',true,128,96,15,320,240,1,\'...way\',\'\',false,true,false,false)',
						'',
						'	makeLayers()',
						'	setVisibility(\'layer0\',false)',
						'//-->',
						'</script>'
					  	)
	)
}else{
// end info


	// configuration/constants
		if(typeof intRefreshrate == 'undefined') 					var intRefreshrate = 15; // Hz
		if(typeof booEnableScrollLock == 'undefined') 				var booEnableScrollLock = false; // CPU hungry
		if(typeof booAutoAdjustAllObjectPositions == 'undefined') 	var booAutoAdjustAllObjectPositions = false; // more CPU hungry


	// primary functions - functionality
		function setContent(strId,objContent,fltFade){
			if(dom){
				if(document.getElementById(strId).innerHTML!=objContent){
					document.getElementById(strId).innerHTML = objContent;
				}
			}else if(ie && !dom){
				objId = eval(strId);
				objId.innerHTML=objContent;
			}else if(ns){
				objId = eval('document.'+strId);
				objId.document.open();
				objId.document.write(objContent);
				objId.document.close();
			}	
		}
		
		function getContent(strId){
			var strContent = '';
			if(dom){
				strContent = document.getElementById(strId).innerHTML;
			}else if(ie && !dom){
				objId = eval(strId);
				strContent = objId.innerHTML;
			}
			return strContent;	
		}
	
		function setDimensions(strId,objWidth,objHeight,objDepth){
			if(dom){
				if(document.getElementById(strId).style.width!=objWidth || document.getElementById(strId).style.height!=objHeight){
					document.getElementById(strId).style.width = objWidth;
					document.getElementById(strId).style.height = objHeight;
				}
			}else if(ie && !dom){
				objId = eval(strId);
				objId.style.width = objWidth;
				objId.style.height = objHeight;
			}else if(ns){
				objId = eval('document.'+strId);
				objId.width = objHeight;
				objId.height = objWidth;
			}
		}

		function setDepth(objId,objZpos){
			if(dom){
				if(document.getElementById(objId).style.zIndex!=objZpos){
					document.getElementById(objId).style.zIndex = objZpos;
				}
			}else if(ie && !dom){
				objId = eval(strId);
				objId.style.zIndex = objZpos;
			}else if(ns){
				objId = eval('document.'+strId);
				objId.zIndex = objZpos;
			}	
		}

		function setPosition(strId,objXpos,objYpos,objZpos,objWidth,objHeight,booScrollLock,booOffScreenGuard){
			// incomplete arguments guard
				if(typeof objWidth == 'undefined'){
					objWidth = 0;
					objHeight = 0;
					booScrollLock = false;
					booOffScreenGuard = false;
				}
			// find page postition
			intXadjust = 0; intYadjust = 0;
			/*if(booScrollLock){
				if (ie){
					intXadjust = document.body.scrollLeft;
					intYadjust = document.body.scrollTop;
				}
				if (mo || ns){
					intXadjust = window.pageXOffset;
					intYadjust = window.pageYOffset;
				}
			}*/
			
			// adjust positions for screen-fitting
			intScreenXAdjust=0; intScreenYAdjust=0;
			if(booOffScreenGuard){
				// find page size
				if(ie){
					intPageWidth = document.body.offsetWidth;
					intPageHeight = document.body.offsetHeight;
				}
				if(ns||mo){
					intPageWidth = window.innerWidth;
					intPageHeight = window.innerHeight;
				}
				// find object size
				intObjWidth = objWidth;
				intObjHeight = objHeight;
				// adjust object position
				if(intObjWidth+objXpos>intPageWidth)	intScreenXAdjust=intPageWidth-intObjWidth-objXpos;
				if(intObjHeight+objYpos>intPageHeight)	intScreenYAdjust=intPageHeight-intObjHeight-objYpos;
			}
			// set new positions
			if(dom){
				if(document.getElementById(strId).style.left!=objXpos+intXadjust+intScreenXAdjust || document.getElementById(strId).style.top!=objYpos+intYadjust+intScreenYAdjust || document.getElementById(strId).style.zIndex!=objZpos){
					document.getElementById(strId).style.left = (objXpos+intXadjust+intScreenXAdjust);
					document.getElementById(strId).style.top = (objYpos+intYadjust+intScreenYAdjust);
					document.getElementById(strId).style.zIndex = objZpos;
				}
			}else if(ie && !dom){
				objId = eval(strId);
				objId.style.left = (objXpos+intXadjust+intScreenXAdjust);
				objId.style.top = (objYpos+intYadjust+intScreenYAdjust);
				objId.style.zIndex = objZpos;
			}else if(ns){
				objId = eval('document.'+strId);
				objId.left = (objXpos+intXadjust+intScreenXAdjust);
				objId.top = (objYpos+intYadjust+intScreenYAdjust);
				objId.zIndex = objZpos;
			}	
		}

		
	// secondary functions - construction
		// store layer attributes centraly
		arrLayers =	new Array();
		function defineLayer(objName,booAbsolutePos,intXpos,intYpos,intZpos,intWidth,intHeight,intDepth,strContent,strUrl,booScrollable,booVisible,booScollLock,booOffscreenGuard){
			// get a new address for the new layer
			intAddress = arrLayers.length;
			
			// find any doublicate entry and treat it as an update
			for(var intA=0; intA<arrLayers.length; intA++){
				if(arrLayers[intA][1]==objName){
					intAddress = intA;
				}
			}
			
			// store layer attributes in an array for reference
			//											0				1			2			3		4		5		6		7			8		9		10			11			12			13				14
			arrLayers[intAddress] = new Array(arrLayers.length,objName,booAbsolutePos,intXpos,intYpos,intZpos,intWidth,intHeight,intDepth,strContent,strUrl,booScrollable,booVisible,booScollLock,booOffscreenGuard);
		}

		// look up a layer's name and return it's position in the list.
		function objName2objID(objName){
			objID = -1;
			intA = 0;
				// go through the entire list until you find the object's name
				while(intA<arrLayers.length && objID==-1){
					// if the name matches the list's element note it's ID
					if(arrLayers[intA][1]==objName){objID=arrLayers[intA][0]}
					intA = intA + 1;
				}
			// give the ID back to the function's caller
			return objID;
		}

		// write a layer-tag that works in all browsers
		function writeLayerTag(objName,OpenTag){
			var objID = objName2objID(objName);
			var strWrite = '';
			// is it an open-tag?
			if(OpenTag){
				// url?
				if(arrLayers[objID][10]!=""){
					// netscape
					if(ns){
						// layer
							// absolute positioned
						if(arrLayers[objID][2]){strPosition='pagex="'+arrLayers[objID][3]+'" pagey="'+arrLayers[objID][4]+'" clip="0,0,'+arrLayers[objID][6]+','+arrLayers[objID][7]+'" zindex="'+arrLayers[objID][5]+'"';strLayPrefix=''}else{strPosition='';strLayPrefix='i'}
							// visibility
						if(!arrLayers[objID][12]){strVisible='visibility="hide"'}else{strVisible=''}
							// tag construction
						strWrite = '<'+strLayPrefix+'layer name="'+arrLayers[objID][1]+'" src="'+arrLayers[objID][10]+'" '+strPosition+' width="'+arrLayers[objID][6]+'" height="'+arrLayers[objID][7]+'" '+strVisible+'></'+strLayPrefix+'layer>';
					// other
					}else{
						// iframe
							// absolute positioned
						if(arrLayers[objID][2]){strPosition='position:absolute; left: '+arrLayers[objID][3]+'px; top: '+arrLayers[objID][4]+'px; z-index: '+arrLayers[objID][5]+'; width: '+arrLayers[objID][6]+'px; height: '+arrLayers[objID][7]+'px;'}else{strPosition=''}
							// visibility
						if(!arrLayers[objID][12]){strVisible='visibility:hidden;'}else{strVisible=''}
							// tag construction
						if(arrLayers[objID][11]){strScroll='scrolling="auto"'}else{strScroll='scrolling="no"'}
						strWrite = '<iframe id="'+arrLayers[objID][1]+'" src="'+arrLayers[objID][10]+'" name="frm'+arrLayers[objID][1]+'" frameborder="0" width="'+arrLayers[objID][6]+'" height="'+arrLayers[objID][7]+'" '+strScroll+' style="'+strPosition+strVisible+'">';
					}
				// else
				}else{
					// netscape
					if(ns){
						// layer
							// absolute positioned
						if(arrLayers[objID][2]){strPosition='pagex="'+arrLayers[objID][3]+'" pagey="'+arrLayers[objID][4]+'"';strLayPrefix=''}else{strPosition='';strLayPrefix='i'}
							// visibility
						if(!arrLayers[objID][12]){strVisible='visibility="hide"'}else{strVisible=''}
							// tag construction
						strWrite = '<'+strLayPrefix+'layer name="'+arrLayers[objID][1]+'" '+strPosition+' width="'+arrLayers[objID][6]+'" height="'+arrLayers[objID][7]+'" '+strVisible+'>';
					// other
					}else{
						// div
							// absolute positioned
						if(arrLayers[objID][2]){strPosition='position:absolute;left:'+arrLayers[objID][3]+'px;top:'+arrLayers[objID][4]+'px;z-index:'+arrLayers[objID][5]+';'}else{strPosition=''}
							// visibility
						if(!arrLayers[objID][12]){strVisible='visibility:hidden;'}else{strVisible=''}
							// tag construction
						strWrite = '<div id="'+arrLayers[objID][1]+'" style="width:'+arrLayers[objID][6]+'px;height:'+arrLayers[objID][7]+'px;'+strPosition+strVisible+'">';
					}
				}
			// is it a close-tag
			}else{
				// url?
				if(arrLayers[objID][10]!=""){
					// netscape
					if(!ns){
						// iframe
						strWrite = '</iframe>';
					}
				// else
				}else{
					// netscape
					if(ns){
						// layer
						if(arrLayers[objID][2]){strLayPrefix=''}else{strLayPrefix='i'}
						strWrite = '</'+strLayPrefix+'layer>';
					// other
					}else{
						// div
						strWrite = '</div>';
					}
				}		
			}
			return strWrite;
		}
		
		// write a predefined amount of layers with attributes
		function makeLayers(){
			makeLayer('all')
		}
		
		function makeLayer(strName){
			var strMakeLayer = ''
			// for all  layers in the central list
			for(var intA=0; intA<arrLayers.length; intA++){
				if(arrLayers[intA][1]==strName || strName=='all'){
					strMakeLayer += writeLayerTag(arrLayers[intA][1],true);
					strMakeLayer += arrLayers[intA][9];
					strMakeLayer += writeLayerTag(arrLayers[intA][1],false);
				}
			}
			document.writeln(strMakeLayer);
		}
		
		function getLayer(strName){
			var strMakeLayer = ''
			// for all  layers in the central list
			for(var intA=0; intA<arrLayers.length; intA++){
				if(arrLayers[intA][1]==strName || strName=='all'){
					strMakeLayer += writeLayerTag(arrLayers[intA][1],true);
					strMakeLayer += arrLayers[intA][9];
					strMakeLayer += writeLayerTag(arrLayers[intA][1],false);
				}
			}
			return strMakeLayer;
		}
		
		// lock specified layers to a scroll position
		var intScrollLock
		function setScrollLock(strObj,booObj){
			// add a new item to the scrollable list
			if(typeof strObj != 'undefined'){
				intObj = objName2objID(strObj);
				arrLayers[intObj][13] = booObj;
			}
			// universal pause
			booPauseScrollLock = false;
			// delay before updating, every "intRefreshrate" above 5Hz is considered "as fast as possible"
			if(ie && intRefreshrate>5){
				onscroll = doScrollLock;
			}else{
				intScrollLock = setInterval('doScrollLock()',Math.round(1000/intRefreshrate));
			}
		}
		
		// pause all scrolling
		booPauseScrollLock = false;
		function pauseScrollLock(){
			booPauseScrollLock = true;
		}
		
		// adjust positions of all objects against a scrolled distance
		function doScrollLock(){
			if(!booPauseScrollLock){
				for(var intA=0; intA<arrLayers.length; intA++){
					// only adjust the position of repositionable (booScrollLock) items
					if(arrLayers[intA][13] || booAutoAdjustAllObjectPositions){
						setPosition(arrLayers[intA][1],arrLayers[intA][3],arrLayers[intA][4],arrLayers[intA][5],arrLayers[intA][6],arrLayers[intA][7],arrLayers[intA][13],arrLayers[intA][14]);
					}
				}
			}
		return true;
		}


	//ternary function - operation

		
		
	// executed inline
		// optionaly define scrolling (event) capture
		if(booEnableScrollLock || booAutoAdjustAllObjectPositions) setScrollLock();



}
