	// Javascript function library by Richard Newbold
	// Copyright 2002 Iogen Limited


	var motion = 1;
	var current_page = '';
	
	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)
	{
		
		// alert (name + " to " + x + " - " + y );
		if (name) var find = find_layer(name);
		if (find)
		{
			eval ("find.layer." + find.setleft + " = x;");
			eval ("find.layer." + find.settop + " = y;");
		}
	}


	function resize_layer(name,x,y)
	{
		if (name) var find = find_layer(name);
		if (find)
		{
			eval ("find.layer." + find.width + " = x;");
			eval ("find.layer." + find.height + " = 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)
	{
		// alert ("center layer");
		
		if (name) var find = find_layer(name);
		if (find)
		{
			
			// alert (find.width);
			var size = find_viewable_area();
			if (size)
			{
				// alert (size.x + " " + size.y);
				
				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;
				// alert ("move to " + x + " - " + y);
				move_layer_to(name,x,y);
			}
		}
	}


	function write_layer_content(name,content)
	{
		var find = find_layer(name);
		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 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 preload_images()
	{
		for (z=0;z<arguments.length;z++)
		{
			eval ("image" + z + " = new Image();");
			eval ("image" + z + ".src = arguments[z];");
		}
	}

	
	function page_setup()
	{
		var area = find_viewable_area();
		var positionX = 210;
		var positionY = ((area.y / 2) - 128);

		move_layer_to('home', positionX, positionY);
		move_layer_to('solutions', positionX, positionY);
		move_layer_to('portfolio', positionX, positionY);
		move_layer_to('portfoliolinks', positionX, positionY);
		move_layer_to('references', positionX, positionY);
		move_layer_to('contact', positionX, positionY);
		move_layer_to('swipe', positionX, positionY);
	}

	
	function change_page(page)
	{
		
		focus();

		if (motion > 0) return;
		motion = 1;

		if (page == current_page)
		{
			show_hide_layer(page,'hide');
			show_hide_layer(page,'show');
			motion = 0;
			return;
		}
		current_page = page;
		
		if (page != 'portfoliolinks')
		{
			swap_image('abstract','/images/abstract-'+ page +'.jpg');
			swap_image('section','/images/section-'+ page +'.gif');
		}

		show_hide_layer('swipe','show');
		swipe_on(1,page);
		
	}


	function swipe_on(x,page)
	{
		if (x < 450)
		{
			x = Math.round(x * 1.6);
			if (x > 450) x = 450;
			resize_layer('swipe',x,185);
			eval("setTimeout (\"swipe_on("+ x +",'"+ page +"')\", 25);");
		}
		else if (x == 999)
		{
			show_hide_layer('home','hide');
			show_hide_layer('solutions','hide');
			show_hide_layer('portfolio','hide');
			show_hide_layer('portfoliolinks','hide');
			show_hide_layer('references','hide');
			show_hide_layer('contact','hide');
			show_hide_layer(page,'show');
			swipe_off(450);
		}
		else
		{ 
			eval("setTimeout (\"swipe_on(999,'"+ page +"')\", 500);");
		}
	}


	function swipe_off(x)
	{
		if (x > 10)
		{
			x = Math.round(x - (x * 0.1));
			resize_layer('swipe',x,185);
			eval("setTimeout (\"swipe_off("+ x +")\", 25);");
			
		}
		else
		{ 
			show_hide_layer('swipe','hide'); 
			motion = 0;
		}
	}

	function pause()
	{
		var DoNothing = "nothing";
	//	alert (DoNothing);
	}


	var viewable_width = 0;
	var viewable_height = 0;

	function resize_fix() 
	{  
		var area = find_viewable_area();
		if ((viewable_width != area.x) || (viewable_height != area.y))
		{	
			viewable_width = area.x;
			viewable_height = area.y;			
			page_setup();
			change_page('home');
		}
		setTimeout ("resize_fix()", 500);	
	}

	function MM_preloadImages() 
	{ 
		//v3.0
		  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
		var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
		if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
	}
	
	function startPreloader() {
		MM_preloadImages('/images/abstract-home.jpg','/images/abstract-contact.jpg','/images/abstract-portfolio.jpg','/images/abstract-references.jpg','/images/abstract-solutions.jpg','/images/section-contact.gif','/images/section-home.gif','/images/section-portfolio.gif','/images/section-references.gif','/images/section-solutions.gif');
	}

	function emout() {
		var email = "contact";
		var emailHost = "iogen"+".co.uk";
		document.write("<a href=" + "mail" + "to:" + email + "@" + emailHost+ ">" + email + "@" + emailHost + "</a>");
	}

	function begin()
	{
		if (typeof loaded != 'undefined')
		{ 
			if (document.layers) 
			{
				var layer_count = 0;
				var layer_DOM = new Array();
				build_layer_DOM();
			}			
			center_layer('container');
			motion = 0;
			resize_fix();
		}
		else setTimeout("begin()",500);
	}

	var loaded = 1;
