
//	Richard Newbolds general cross browser stuff!
//	richard@iogen.co.uk
//	LAYERS/DIVS	- find, move to, move by, show & hide, center
//	IMAGES - swap image
//	FORMS - verify email
//	SCREEN - screen size, viewable area
//	COOKIES - read, write


	function build_layer_DOM()	// call this after the page has loaded to build an array of ALL ns layer including nested layers
	{
		for(z=0; z<document.layers.length; z++)
		{
			layer_search(document.layers[z]);
		}
	}


	function layer_search(preLayer,name)
	{
		layer_DOM[layer_count] = preLayer;
		layer_count++;
		for(x=0; x<preLayer.document.layers.length; x++)
		{
			layer_search(preLayer.document.layers[x]);
		}
	}


	function find_layer(name)
	{
		if (document.getElementById)
		{
			if (document.getElementById(name))
			{
				var layer = new Object();
				layer.layer = document.getElementById(name);
				layer.vis = "style.visibility";
				layer.top = "style.top";
				layer.left = "style.left";
				layer.settop = "style.top";
				layer.setleft = "style.left";
				layer.show = "visible";
				layer.hide = "hidden";
				layer.width = "style.width";
				layer.height = "style.height";
				return (layer);
			}
		}		
		if (document.layers)
		{
			for(z=0; z<layer_DOM.length; z++)
			{
				var x = layer_DOM[z];
				if(x.id == name)
				{
					var layer = new Object();
					layer.layer = x;
					layer.vis = "visibility";
					layer.top = "top";
					layer.left = "left";
					layer.settop = "top";
					layer.setleft = "left";
					layer.show = "show";
					layer.hide = "hide";
					layer.width = "clip.width";		// only correct if clip left,right etc are not set or altered
					layer.height = "clip.height";	// only correct if clip top,bottom etc are not set or altered
					return(layer);
				}
			}
		}
		if (document.all)
		{
			if(document.all[name])
			{
				var layer = new Object();
				layer.layer = document.all[name];
				layer.vis = "style.visibility";
				layer.top = "style.top";
				layer.left = "style.left";
				layer.settop = "style.pixelTop";
				layer.setleft = "style.pixelLeft";
				layer.show = "visible";
				layer.hide = "hidden";
				layer.width = "style.width";
				layer.height = "style.height";
				return (layer);
			}
		}
		alert("layer not found");
	}


	function property_value(object,property)
	{
		eval ("var v = object." + property + ";");
		return v;
	}

	
	function show_hide_layer(name,action)
	{
		if (name) var find = find_layer(name);
		if (find)
		{
			eval ("find.layer." + find.vis + " = find." + action + ";");
		}		
	}


	function move_layer_to(name,x,y)
	{
		if (name) var find = find_layer(name);
		if (find)
		{
			eval ("find.layer." + find.setleft + " = x;");
			eval ("find.layer." + find.settop + " = y;");
		}
	}


	function move_layer_by(name,x,y)
	{
		if (name) var find = find_layer(name);
		if (find)
		{
			eval("var newX = (parseInt(find.layer." + find.left + "))+x;");
			eval("var newY = (parseInt(find.layer." + find.top + "))+y;");
			move_layer_to(name,newX,newY);
		}
	}


	function center_layer(name)
	{
		if (name) var find = find_layer(name);
		if (find)
		{
			var size = find_viewable_area();
			if (size)
			{
				var x = ( ((size.x)*0.5) - ((parseInt(property_value(find.layer,find.width)))*0.5) );
				var y = ( ((size.y)*0.5) - ((parseInt(property_value(find.layer,find.height)))*0.5) );
				if (x < 1) x = 1;
				if (y < 1) y = 1;
				move_layer_to(name,x,y);
			}
		}
	}


	function write_layer_content(name,content)
	{
		var find = find_layer(name);
		content = 'this is a test';
		if (find) 
		{
			if (find.layer.innerHTML)
			{
				find.layer.innerHTML = (content);
			}
			else if (find.layer.document.write)
			{
				find.layer.document.open();
				find.layer.document.write(content);
				find.layer.document.close();
			}
		}
	}



	function swap_layer_content(layer1,layer2)
	{
		var L1 = find_layer(layer1);
		var L2 = find_layer(layer2);
		if (L1) 
		{
			L1Txt=L1.layer.innerHTML
			L2Txt=L2.layer.innerHTML
			
				L1.layer.innerHTML=L2Txt;
			
		}
	}

	function stay_visible(layer1)
	{
		var L1 = find_layer(layer1);
		if (L1) 
		{
			L1.visible=true;
		}
	}

	
	function find_image(name)
	{
		for(z=0; z<document.images.length; z++)
		{
			if(document.images[z].name == name) return (document.images[z]);
		}
		for(z=0;z<layer_DOM.length;z++)
		{
			var x = layer_DOM[z];
			if (x.document.images[name])
			{
				return (x.document.images[name]);
			}
		}
		alert("image not found");
	}


	function swap_image(name,altimage)
	{
		var image = find_image(name);
		if (image) image.src = altimage;
	}


	function find_screen_size()
	{
		if (screen)
		{
			var size = new Object();
			size.x = screen.width;
			size.y = screen.height;
			return size;
		}
	}


	function find_viewable_area()
	{
		var viewable = new Object();
		if (window.innerWidth)
		{
			viewable.x = window.innerWidth-16;
			viewable.y = window.innerHeight;
			alert ("viewable x = " + viewable.x + " , viewable y = " + viewable.y);
			return viewable;
		}
		if (document.body)
		{
			viewable.x = document.body.offsetWidth-20;
			viewable.y = document.body.offsetHeight;
			return viewable;
		}
	}


	function verify_email(e)
	{
		if (!e) return false;
		var regX1 = (/(\w{1,1}+([\w]|([-]\w))+@+\w{1,1}+([\w]|([-]\w))+[.])/);
		var regX2 = (/[.]+\w{2,}$/);
		var regX3 = (/(\.+\w{1}[\W])/);
		if ( (!regX1.test(e)) || (!regX2.test (e)) || (regX3.test(e)) ) return false;
		return true;
	}
	
	
	function preload_images()
	{
		for (z=0;z<arguments.length;z++)
		{
			eval ("image" + z + " = new Image();");
			eval ("image" + z + ".src = arguments[z];");
		}
	}
