function namosw_page_left(element) 
{
	if (navigator.appName.indexOf('Netscape', 0) != -1)
		x = element.pageX;
	else
	{
		x = element.offsetLeft;
	    for (el = element.offsetParent; el; el = el.offsetParent)
			x += el.offsetLeft;
	}
	
	return x;
}

function namosw_page_top(element) 
{
	if (navigator.appName.indexOf('Netscape', 0) != -1)
		y = element.pageY;
	else
	{
		y = element.offsetTop;
		for (el = element.offsetParent; el; el = el.offsetParent)
			y += el.offsetTop;
	}
	
	return y;
}

function namosw_page_right(el)
{
	wid = (navigator.appName.indexOf('Netscape', 0) != -1) ? window.innerWidth : document.body.offsetWidth;
	return wid - namosw_page_left(el);
}

function namosw_page_bottom(el)
{
	hei = (navigator.appName.indexOf('Netscape', 0) != -1) ? window.innerHeight : document.body.offsetHeight;
	return hei - namosw_page_top(el);
}

function namosw_set_visible(el, flag)
{
	// if (navigator.appName.indexOf('Netscape', 0) != -1)
		// el.visibility = flag ? 'show' : 'hide';
	// else
		el.style.visibility = flag ? 'visible' : 'hidden';
}

function namosw_set_pos(el, x, y)
{
	if (navigator.appName.indexOf('Netscape', 0) != -1)
	{
	    el.left = x;
	    el.top  = y;
	}
	else
	{
		el.style.pixelLeft = x;
	    el.style.pixelTop  = y;
	}
}

function namosw_left(el)
{
	return (navigator.appName.indexOf('Netscape', 0) != -1) ? el.left : el.style.pixelLeft;
}

function namosw_top(el)
{
	return (navigator.appName.indexOf('Netscape', 0) != -1) ? el.top : el.style.pixelTop;
}

function namosw_is_relative(el)
{
	return (navigator.appName.indexOf('Netscape', 0) != -1) ? el.position == 'relative' : el.style.position == 'relative';
}

function namosw_is_space(c)
{
	return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
}

function namosw_process_byword(list, index)
{
	var el = list[index];
	  
	if (navigator.appName.indexOf('Netscape', 0) != -1)
		return;
	
	if (!el)
		return;
	
	if (el.byword == false)
		return;
	
	var dest = "";
	var src = el.innerHTML;
	var objNum = document.NamoAnimationObjects.length;
	var wordi = 0, i = 0, mark;
	
	while (i < src.length)
	{
		mark = i;
		while (i < src.length)
		{
			while (i < src.length && namosw_is_space(src.charAt(i)))
				i++;
			if (i < src.length && src.charAt(i) != '<')
				break;
			while (i < src.length && src.charAt(i) != '>')
				i++;
			if (i < src.length && src.charAt(i) == '>')
				i++;
		}
		
		dest += src.substring(mark, i);
		if (i >= src.length)
			break;
		dest += '<span id=\"' + el.name + 'word' + (wordi+1) + '\" style=\"position: relative\">';
		mark = i;
		
		while (i < src.length && !namosw_is_space(src.charAt(i)) && src.charAt(i) != '<')
			i++;
			
		while (i < src.length && namosw_is_space(src.charAt(i)) == ' ')
			i++;
	
		if (el.byword == false)
		{
			while (i < src.length && src.charAt(i) != '<')
				i++;
		}
		
		dest += src.substring(mark, i);
		dest += '</span>';
		wordi++;
	}
	el.innerHTML = dest;
	el.posLeft   = 0;
	el.style.visibility = 'visible';

	list[index] = namosw_new_animation_object(el.name+'word1', el.startCondObj, el.startCondTime, el.startXPos, el.startYPos, el.pathType, false, el.zoom, el.stepNum);
	for (i = 1; i < wordi; i++)
	{
		list[objNum+i-1] = namosw_new_animation_object(el.name+'word'+(i+1), (el.byword ? (el.name+'word'+i) : el.startCondObj), (el.byword ? 0 : el.startCondTime), el.startXPos, el.startYPos, el.pathType, false, el.zoom, el.stepNum);
		list[objNum+i-1].style.posLeft = 0;
		list[objNum+i-1].style.visibility = 'visible';
	}
	el.startCondTime = -1;
}

function namosw_new_animation_object(name, obj, time, xpos, ypos, path, byword, zoom, stepNum) 
{
	var str = (navigator.appName.indexOf('Netscape', 0) != -1) ? 'document.getElementById[\''+name+'\']' : 'document.all[\''+name+'\']';
	var object;

	if (name == '')
		return 0;
	
	object = eval(str);
	if (!object)
		return 0;
	
	object.name     = name;
	object.startCondObj  = obj;
	object.startCondTime = time;
	object.startXPos     = xpos;     // left, center, right
	object.startYPos     = ypos;     // top,  center, bottom
	object.pathType      = path;     // line, arc, spiral
	object.byword        = byword;   // true, false
	object.zoom          = zoom;
	object.stepNum       = stepNum;
	
	return object;
}

function namosw_animate(str) 
{
	var live_object_num = 0;
	
	for (var i = 0; i < document.NamoAnimationObjects.length; i++)
	{
		var el = document.NamoAnimationObjects[i];
		if (!el)
			continue;
		
		if (el.countDown > 0)
		{
			el.countDown = (0 < el.countDown-10) ? el.countDown-10 : 0;
			live_object_num++;
			continue;
		}
		
		if (el.countDown < 0)
			continue;
		
		if (el.pathType == 'line')
		{
			newx = el.sx + el.step * (el.ex - el.sx) / el.stepNum;
			newy = el.sy + el.step * (el.ey - el.sy) / el.stepNum;
		}
		else if (el.pathType == 'arc')
		{
			linex = el.sx + el.step * (el.ex - el.sx) / el.stepNum;
			liney = el.sy + el.step * (el.ey - el.sy) / el.stepNum;
			
			x = (el.ex + el.sx) / 2;
			y = (el.ey + el.sy) / 2;
			
			sinv = Math.sin(Math.PI*el.step/el.stepNum*(el.ex-el.sx > 0 ? -1:1));
			cosv = Math.cos(Math.PI*el.step/el.stepNum);
			newx = ((cosv*(el.sx-x) - sinv*(el.sy-y) + x) + linex) / 2;
			newy = ((sinv*(el.sx-x) + cosv*(el.sy-y) + y) + liney) / 2;
		}
		else if (el.pathType == 'spiral')
		{
			sinv = Math.sin(2*Math.PI*el.step/el.stepNum);
			cosv = Math.cos(2*Math.PI*el.step/el.stepNum);
			r = (el.stepNum-el.step)/el.stepNum;
			newx = el.ex + (cosv*(el.sx-el.ex) - sinv*(el.sy-el.ey))*r;
			newy = el.ey + (sinv*(el.sx-el.ex) + cosv*(el.sy-el.ey))*r;
		}
		
		if (el.style)
		{
			if (el.zoom == 'zoomin')
				el.style.fontSize = 50+50*el.step/el.stepNum + '%';
			else if (el.zoom == 'zoomout')
				el.style.fontSize = 200-100*el.step/el.stepNum + '%';
		}
		
		namosw_set_pos(el, newx, newy);
		namosw_set_visible(el, true);
		
		if (el.step++ == el.stepNum)
		{
			namosw_set_pos(el, el.ex, el.ey);
			el.step = 0;
			el.countDown = -1;
			// trigger other object(self can be trigger)
			
			for (var j = 0; j < document.NamoAnimationObjects.length; j++)
			{
				var obj = document.NamoAnimationObjects[j];
				
				if (obj.countDown < 0 && obj.startCondObj == el.name)
				{
					obj.countDown = obj.startCondTime;
					live_object_num++;
					
					if (i < j)
					{
						obj.countDown += 10;
						live_object_num--;
					}
				}
			}
		}
		else
			live_object_num++;
	}
	
	if (live_object_num > 0)
		window.setTimeout("namosw_animate();", 10);
}

function namosw_init_float_layers()
{
	var name;
	var layer;
	var i;
	var j;

	j = 0;
	document._float_layers = new Array(Math.max(1, 0.5 * namosw_init_float_layers.arguments.length));
	for (i = 0; i < namosw_init_float_layers.arguments.length; i += 2)
	{
		name = namosw_init_float_layers.arguments[i];
		
		if (name == '')
			return;
		
		if (navigator.appName.indexOf('Netscape', 0) != -1)
		{
			//layer = document.layers[name];
			layer = document.getElementById(name);
			layer._fl_pos_left = layer.left;
			layer._fl_pos_top  = layer.top;
		}
		else
		{
			layer = document.all[name];
			//layer = document.getElementById(name);
			layer._fl_pos_left = layer.style.pixelLeft;
			layer._fl_pos_top  = layer.style.pixelTop;
		}
		
		layer._fl_pos = namosw_init_float_layers.arguments[i+1];
		
		if (layer)
			document._float_layers[j++] = layer;
	}
	
	document._fl_interval = setInterval('namosw_process_float_layers()', 200);
}

function namosw_page_width()
{
	return (navigator.appName.indexOf('Netscape', 0) != -1) ? innerWidth : document.body.clientWidth;
}

function namosw_page_height()
{
	return (navigator.appName.indexOf('Netscape', 0) != -1) ? innerHeight : document.body.clientHeight;
}

function namosw_process_float_layers()
{
	if (document._float_layers)
	{
		var i;
		var layer;
		
		for (i = 0; i < document._float_layers.length; i++)
		{
			layer = document._float_layers[i];
			
			if (navigator.appName.indexOf('Netscape', 0) != -1)
			{
			    if (layer._fl_pos == 1)
					layer.left = layer._fl_pos_left + window.pageXOffset;
			    else if (layer._fl_pos == 2 || layer._fl_pos == 5) 
					layer.left = window.pageXOffset;
			    else if (layer._fl_pos == 3 || layer._fl_pos == 6) 
					layer.left = window.pageXOffset + (namosw_page_width() - layer.style.pixelWidth)/2;
			    else
					layer.left = window.pageXOffset + namosw_page_width() - layer.style.pixelWidth - 16;
				
			    if (layer._fl_pos == 1)
					layer.top = layer._fl_pos_top + window.pageYOffset;
			    else if (layer._fl_pos == 2 || layer._fl_pos == 3 || layer._fl_pos == 4)
					layer.top = window.pageYOffset;
			    else
					layer.top  = window.pageYOffset + namosw_page_height() - layer.style.pixelHeight;
			}
			else
			{
			    if (layer._fl_pos == 1)
					layer.style.pixelLeft = layer._fl_pos_left + document.body.scrollLeft;
			    else if (layer._fl_pos == 2 || layer._fl_pos == 5)
					layer.style.pixelLeft = document.body.scrollLeft;
			    else if (layer._fl_pos == 3 || layer._fl_pos == 6)
					layer.style.pixelLeft = document.body.scrollLeft + (namosw_page_width() - layer.style.pixelWidth)/2;
			    else
					layer.style.pixelLeft = document.body.scrollLeft + namosw_page_width()  - layer.style.pixelWidth;
				
			    if (layer._fl_pos == 1)
					layer.style.pixelTop = layer._fl_pos_top + document.body.scrollTop;
			    else if (layer._fl_pos == 2 || layer._fl_pos == 3 || layer._fl_pos == 4)
					layer.style.pixelTop = document.body.scrollTop;
				else
					layer.style.pixelTop  = document.body.scrollTop  + namosw_page_height() - layer.style.pixelHeight;
			}
		}
	}
}

function namosw_init_animation()
{
	var i    = 0;
	var list = new Array;
	
	list[i++] = namosw_new_animation_object('alayer5', 'alayer3', 0, 'left', 'top', 'arc', false, null, 60);
	list[i++] = namosw_new_animation_object('alayer4', 'alayer2', 0, 'left', 'top', 'arc', false, null, 60);
	list[i++] = namosw_new_animation_object('alayer1', null, 10, 'left', 'top', 'arc', false, null, 60);
	list[i++] = namosw_new_animation_object('alayer2', null, 10, 'right', 'top', 'arc', false, null, 60);
	list[i++] = namosw_new_animation_object('alayer3', 'alayer2', 0, 'right', 'top', 'arc', false, null, 60);
	list[i++] = namosw_new_animation_object('alayer6', 'alayer3', 0, 'right', 'top', 'arc', false, null, 60);
	
	document.NamoAnimationObjects = list;
	
	var length = list.length;
	for (i = 0; i < length; i++)
		namosw_process_byword(list, i);
	
	for (i = 0; i < list.length; i++)
	{
		if (!list[i])
			continue;
			
		list[i].countDown = (list[i].startCondObj == null) ? list[i].startCondTime : -1;
		list[i].step      = 0;
		list[i].sx        = (list[i].startXPos == 'left')  ? -namosw_page_left(list[i]) : (list[i].startXPos == 'right') ?  namosw_page_right(list[i]) : 0;
		list[i].sy        = (list[i].startYPos == 'top')   ? -namosw_page_top(list[i]) : (list[i].startYPos == 'bottom') ?  namosw_page_bottom(list[i]): 0;
		list[i].ex        = 0;
		list[i].ey        = 0;
		
		if (!namosw_is_relative(list[i]))
		{
			list[i].sx += namosw_left(list[i]);
			list[i].sy += namosw_top(list[i]);
			list[i].ex += namosw_left(list[i]);
			list[i].ey += namosw_top(list[i]);
		}
		
		if (list[i].pathType == 'spiral')
		{
			list[i].sx = Math.max(-200+list[i].ex, Math.min(200+list[i].ex, list[i].sx));
			list[i].sy = Math.max(-200+list[i].ey, Math.min(200+list[i].ey, list[i].sy));
		}
		
		namosw_set_pos(list[i], list[i].sx, list[i].sy);
		namosw_set_visible(list[i], false);
	}
	
	window.setTimeout("namosw_animate();", 10);
}


