		var htmlNBSP = "&nbsp;";
		var LinkList = new Array;
		var ImageNameMap = new Array;
		var Timer = new Array;
		function NSMouseCallback(name,callback)
		{	this.name = name;
			this.callback = callback;
		}
		function AddNSMouseCapture(srclayer,name,down_callback,up_callback)
		{	
			if (null == srclayer.captureEvents) return;
		//Local	
			var callbacklist;
			var i;
		//Capture
			if (null != srclayer.down_callback)	srclayer.releaseEvents(Event.MOUSEDOWN);	
			if (null != srclayer.up_callback)	srclayer.releaseEvents(Event.MOUSEUP);	
			srclayer.captureEvents(Event.MOUSEDOWN);
			srclayer.captureEvents(Event.MOUSEUP);
		//Init
			if (null == srclayer.down_callback)	srclayer.down_callback = new Array;
			if (null == srclayer.up_callback)	srclayer.up_callback = new Array;
		//Add Callback	
			for (i = 0; i < srclayer.down_callback.length; i++)
			{	if (srclayer.down_callback[i].name == name)
				{	srclayer.down_callback[i].callback = down_callback;
					break;
				}
			}
			if (i == srclayer.down_callback.length)
				srclayer.down_callback[srclayer.down_callback.length] = new NSMouseCallback(name,down_callback);
		
			for (i = 0; i < srclayer.up_callback.length; i++)
			{	if (srclayer.up_callback[i].name == name)
				{	srclayer.up_callback[i].callback = up_callback;
					break;
				}
			}
			if (i == srclayer.up_callback.length)
				srclayer.up_callback[srclayer.up_callback.length] = new NSMouseCallback(name,up_callback);
		//Set Handle
			callbacklist = "";
			for (i = 0 ; i < srclayer.down_callback.length; i++)
				callbacklist = callbacklist + srclayer.down_callback[i].callback;
			srclayer.onmousedown = new Function("event",callbacklist);
		
			callbacklist = "";
			for (i = 0 ; i < srclayer.up_callback.length; i++)
				callbacklist = callbacklist + srclayer.up_callback[i].callback;
			srclayer.onmouseup = new Function("event",callbacklist);
		}
		function RemoveNSMouseCapture(srclayer,name)
		{	if (null == srclayer.releaseEvents) return;
			srclayer.releaseEvents(Event.MOUSEDOWN);
			srclayer.releaseEvents(Event.MOUSEUP);
			srclayer.down_callback = null;
			srclayer.up_callback = null;
		}
		function IsPrefixWith(szSrc,start,szPrefix)
		{	if ("" == szSrc || "" == szPrefix) return false;
			if (0 == szSrc.length || 0 == szPrefix.length) return false;
			
			var		i;
		
			for(i = 0; 0 != szSrc.charAt(start + i) && 0 != szPrefix.charAt(i); i++) {
				if (szSrc.charAt(start + i) != szPrefix.charAt(i))	break; }
			return 0 == szPrefix.charAt(i);
		}
		function IsPrefixSpecialChar(szSrc,start)
		{	if ("" == szSrc || 0 == szSrc.length) return false;		
			return '&' == szSrc.charAt(start);
		}
		function GetPrefixSpecialCharLen(szSrc,start)
		{
		//	Gaurd
			if (0 == szSrc.length || '&' != szSrc.charAt(start)) return 0;
		//	Init
			var	Len	= 0 , i;
			
			for(i = 0; 0 != szSrc.charAt(i); i++)
			{	if (';' == szSrc.charAt(start + i))
				{	Len = i + 1;
					break;
				}
			}
		//	Return
			return Len;
		}
		function GoLink(url,target)
		{
		//	gaurd
			if (url == null) return;
			if (url.length == 0) return;
		//	local
			var target_doc = document;
		//	find link target
			if (null != window.parent) {
				if (null != window.parent.frameset) {
					if (null != window.parent.frameset[target])
						target_doc = window.parent.frameset[target]; } }
		//	link
			if (null == target)				document.location.href	= url;
			else if ('_self' == target)		document.location.href = url;
			else if ('_blank' == target)	window.open(url);
			else if (null != target_doc)	target_doc.location.href = url;
			else							window.open(url,target);
		}
		function HitTest()
		{	if (null == document.all) return true;
		
			return (   window.event.x > 0 && window.event.x < document.all[Me.target].offsetWidth 
					&& window.event.y > 0 && window.event.y < document.all[Me.target].offsetHeight);
		}
		
		function UpdateSrcText(var_name,update_text)
		{
			var	i = 0;
			var	parse_text	= "";	
		
			for (i = 0; i < update_text.length; i ++)

			{
				if ('\'' == update_text.charAt(i))
					parse_text = parse_text + "\\";	
				parse_text = parse_text + update_text.charAt(i);
			}
		
			eval(var_name + "='" + parse_text + "'; ");
		}
		
		function AddLink(src_text,text_link)
		{
			var text_res = "";
		
			if (text_link.length)
				text_res = "<A href='" + text_link + "'>" + src_text + "</A>";
			else
				text_res = src_text;
		
			return text_res;
		}
		
		function GetLayer(target)
		{	var target_layer;
			if (document.all)
			{	target_layer = document.all[target];
			}
			else if (document.layers)
			{	if (document.layers[target + "_layer"])
					target_layer = document.layers[target + "_layer"];
				else
					target_layer = document.layers[target].document.layers[target + "_layer"];
			}
			return target_layer;
		}
		function UpdateLayer(target,restext)
		{	var target_layer;
			target_layer = GetLayer(target);
			if (document.all)
			{	target_layer.innerHTML = restext;
			}
			else if (document.layers)
			{	target_layer.document.open("text/html");
				target_layer.document.write(restext);
				target_layer.document.close();	
			}	
		}
		function AddTextLink(strLink)
		{	LinkList[LinkList.length] = strLink;  }
		function GoTextLink(LinkIndex)
		{	GoLink(LinkList[LinkIndex],'');	}
		function ReloadPage()
		{	for (i = 0 ; i < Timer.length ; i++)
				clearTimout(Timer[i]);
			document.location.reload(false);
		}
		function setJSTimeout(name,callback,delay)
		{	setTimeout("if ('undefined' != typeof(" + name + ")) " + callback + " else document.location.reload(true);",delay);
		}
		function ReplaceImageNS(layername,name, state)
		{	var CurDoc;
			if (document.layers)
				CurDoc = document.layers[layername].document.layers[layername + "_layer"].document;
			else
				CurDoc = document;	
			if (bIsSupportOK) {
				for (i = 0; i < imgCounter; i++) {
					if (CurDoc.images[ImageList[i][NameIndex]] != null) {
						if ((name == ImageList[i][NameIndex]) && (ImageList[i][state] != null))
							CurDoc.images[name].src = ImageList[i][state].src;
					}
				}
			}
		}
		function TextBlock_Clone()
		{	
			var newObject = new TextBlock(), i;
		
			newObject.UseFont = this.UseFont;
			newObject.UseSize = this.UseSize;	
			newObject.UseBold = this.UseBold;
			newObject.UseItalic = this.UseItalic;
			newObject.UseUnderLine = this.UseUnderLine;	
			newObject.UseTextColor = this.UseTextColor;
			newObject.UseBackColor = this.UseBackColor;	
			newObject.BackColor = this.BackColor;
			newObject.TextColor = this.TextColor; 
			newObject.Font = this.Font; 
			newObject.Size = this.Size; 
		
			return newObject;
		}
		function TextBlock()
		{
			this.Clone		= TextBlock_Clone;
			this.UseFont	= false;
			this.UseFontSize= false;	
			this.UseBold	= false;
			this.UseItalic	= false;
			this.UseUnderLine	= false;	
			this.UseTextColor	= false;
			this.UseBaclColor	= false;	
			this.RenderLink = false;
		}
		function MakeTextBlock(srctext,block)
		{
			var restext = "";
		
			if (block.UseBackColor)	restext = restext + "<span style='background-color:" + block.BackColor + "'>" 
			if (block.UseTextColor)	restext = restext + "<font color=" + '"' + block.TextColor + '"' + ">"; 
			if (block.UseFont)		restext = restext + "<font face='" + block.Font + "'>"; 
			if (block.UseSize)		restext = restext + "<font size='" + block.Size + "'>"; 
			if (block.UseBold)		restext = restext + "<STRONG>"; 
			if (block.UseItalic)	restext = restext + "<EM>"; 
			if (block.UseUnderLine)	restext = restext + "<U>"; 
		
			restext = restext + srctext;
		
			if (block.UseUnderLine)	restext = restext + "</U>"; 
			if (block.UseItalic)	restext = restext + "</EM>"; 
			if (block.UseBold)		restext = restext + "</STRONG>"; 
			if (block.UseFont)		restext = restext + "</font>";
			if (block.UseSize)		restext = restext + "</font>";
			if (block.UseTextColor)	restext = restext + "</font>";
			if (block.UseBackColor)	restext = restext + "</span>";
		
			return restext;
		}
		function BlinkTextBlock(srctext,block)
		{ 
		//	Init   
			var restext = "";
			var cattext = "";
			var curPos  = -1;
			var prechar = 0;
			var IsInQuote= false;
		   
		//	Compose new text
			for (i = 0; i < srctext.length; i++)
			{
				if ('<' == srctext.charAt(i))	
				{
					if ("" != cattext)
						restext = restext +  MakeTextBlock(cattext,block);
					cattext = "";
					IsInQuote = true;
				}
		
				if (false == IsInQuote)
					curPos ++;
		
				if ('>' == srctext.charAt(i))
					IsInQuote = false;
		
				if (IsInQuote || '>' == srctext.charAt(i))
				{
					restext	= restext + srctext.charAt(i);
				}
				else
				{
					cattext = cattext + srctext.charAt(i);
				//	restext = restext + MakeTextBlock(srctext.charAt(i),block);
				}
				
				prechar = srctext.charAt(i);
			}
			if (cattext)
				restext = restext +  MakeTextBlock(cattext,block);		
		
			return restext;
		}
		function RotatorEffect_GetLayer(layer_name)
	{	if (document.all) return document.all[layer_name];
		else if (document.layers) document.layers[layer_name];
		else return null;
	}
	function RotatorEffect_SetTop(TopPos)
	{
		var Me = this;
	
		if (document.all)
			document.all[Me.target].style.posTop = TopPos;
		else if (document.layers)
			document.layers[Me.target].top = TopPos;
	}
	function RotatorEffect_GetTop()
	{
		var Me = this;
		
		if (document.all)
			return document.all[Me.target].style.posTop;
		else if (document.layers)
			return document.layers[Me.target].top;
	}
	function RotatorEffect_ScrollTimer(target,cy)
	{	var Me = this;
		var i;
		var IsReset	= false;
		if (this.num != 0) return;
		if (Me.counter.poser && 0 == (Me.counter.poser % Me.ClipHeight))
			IsReset = true;
		if (Me.counter.Stop)
		{	setTimeout("if ('undefined' == typeof(" + this.name + ")) document.location.reload(true); else " + Me.name + ".ScrollTimer('" + target + "'," + cy + ");",Me.DelayTime);     	
			return;
		}
		for (i = 0; i < this.counter.stack.length; i++)
		{	var item = this.counter.stack[i];
			item.ScrollText(item.target,cy);
		}
		if (0 == this.num)
			this.counter.poser ++;
		if (IsReset)
			setTimeout("if ('undefined' == typeof(" + this.name + ")) document.location.reload(true); else " + Me.name + ".ScrollTimer('" + target + "'," + cy + ");",Me.RepeatDelay);
		else
			setTimeout("if ('undefined' == typeof(" + this.name + ")) document.location.reload(true); else " + Me.name + ".ScrollTimer('" + target + "'," + cy + ");",Me.DelayTime);     				
	}
	function RotatorEffect_ScrollText(target,cy)
	{	var Me = this;
		var IsReset = false;
		var IsSizing= false;
		var text_attr = Me.text_attr.Clone();
		var new_text;
	
		if (document.all)
			CellHeight = document.all[target].offsetHeight;
		else if (document.layers)
			CellHeight = Me.ClipHeight;
	
		if (Me.GetTop() <= (Me.OrgTop - 2 * Me.ClipHeight))
		{	factor 		= (Me.counter.count > 1)? Me.counter.count - 2 : 0 ;
			Me.YClip	= 0;
			Me.ClipTop	= 0;
			Me.ClipBottom	= 0;
			Me.YOff		= 0;
			Me.SetTop(Me.OrgTop + factor * Me.ClipHeight);
		}
		else 
		{	if (Me.GetTop() <= (Me.OrgTop - Me.ClipHeight + 1))
				Me.ClipTop = Me.ClipTop + cy;	
			if (Me.GetTop() < (Me.OrgTop))
				Me.ClipBottom= Me.ClipBottom + cy;
		}
		
		if (Me.GetTop() < (Me.OrgTop) && Me.GetTop() >= (Me.OrgTop - Me.ClipHeight + 1))
			IsSizing = true;
		
		NewClip = 'rect(' + Me.ClipTop + ' ' + Me.ClipRight + ' ' + Me.ClipBottom + ' ' + Me.ClipLeft + ')';
	//	Test
		if (IsSizing)
		{
			switch(Me.GetTop() % 9) 
			{
			case 6:	case 7:	case 8:	text_attr.Size = text_attr.Size + 1;	break;
			case 0:	case 1:	case 2:	text_attr.Size = text_attr.Size - 1;	break;
			}
		}
	//	Update New Text HTML
		if (Me.text)
			new_text = AddLink(BlinkTextBlock(Me.text,text_attr),Me.text_link);
	//	Update Layer
		if (document.all)
		{
			if (1 == Me.First)
			{
				Me.First = 0;
			//	document.all[target].style.posTop =document.all[target].offsetTop + Me.ClipHeight + Me.YOff; 
				document.all[target].style.posTop =document.all[this.counter.target].offsetTop + Me.ClipHeight + Me.YOff; 
				document.all[target].style.posLeft=document.all[this.counter.target].offsetLeft; 
				Me.OrgTop	= document.all[target].style.posTop - Me.YOff - 2;
			}	
	
			document.all[target].style.posTop = document.all[target].style.posTop - cy;
			document.all[target].style.clip	  = NewClip;
			if (Me.text)
				document.all[target].innerHTML	  = new_text;
		}
		else if (document.layers)
		{
			if (1 == Me.First)
			{
				Me.First 	= 0;	
				Me.OrgTop	= document.layers[target].top - Me.YOff;	
			}
			document.layers[target].top 	= document.layers[target].top - cy;
			document.layers[target].clip.top = Me.ClipTop;
			document.layers[target].clip.bottom = Me.ClipBottom;
	
			if (Me.text)
			{
				document.layers[target].document.open()
				document.layers[target].document.write(new_text);
				document.layers[target].document.close();
			}
		}
	}
	function RotatorEffect_Init(target,target_NS,delay,YOff,ClipWidth,ClipHeight,text,text_link,text_color,text_face,text_size,RepeatTime)
	{	var Me = this;
	
		if (document.layers)
		{
			if (document.layers[target] == null)
				Me.target	= target_NS;
			else
				Me.target	= target;	//target_NS ???;
			document.layers[Me.target].top = document.layers[this.counter.target].top + ClipHeight + YOff;
			document.layers[Me.target].left= document.layers[this.counter.target].left;
		}
		else if (document.all)
		{
			Me.target		= target;
		//	document.all[target].style.posTop =document.all[this.counter.target].offsetTop + ClipHeight + YOff; 
		//	document.all[target].style.posLeft=document.all[this.counter.target].offsetLeft; 
		}
			  
		Me.First		= 1;
		Me.YOff			= YOff;
		Me.YClip		= 1;
		Me.ClipWidth	= ClipWidth;
		Me.ClipHeight	= ClipHeight;
		Me.ClipLeft		= 0;
		Me.ClipRight	= ClipWidth;
		Me.ClipTop		= 0;
		Me.ClipBottom	= 0;
		Me.DelayTime	= delay;
		Me.RepeatDelay	= RepeatTime;
		Me.Repeat 		= true;
		Me.text			= text;
		Me.text_link	= text_link;
		Me.text_attr	= new TextBlock();
		Me.text_attr.UseTextColor = true;
		Me.text_attr.UseFont	= true;
		Me.text_attr.UseSize	= true;
		Me.text_attr.TextColor	= text_color;
		Me.text_attr.Font = text_face;
		Me.text_attr.Size = text_size;
			
		setTimeout(Me.name + ".ScrollTimer('" + Me.target + "',1);",50);
	}
	function RotatorEffect_OnMouseOver(event)
	{	if (this.PauseOnOver) this.counter.Stop = true;
		var target_layer = GetLayer(this.counter.target);
		if (target_layer)
			if (target_layer.onmouseover)
				target_layer.onmouseover(event);
	}
	function RotatorEffect_OnMouseOut(event)
	{	if (this.PauseOnOver) this.counter.Stop = false;
		var target_layer = GetLayer(this.counter.target);
		if (target_layer)
			if (target_layer.onmouseout)
				target_layer.onmouseout(event);
	}
	function RotatorStack(target)
	{	this.count		= 0;
		this.Stop		= false;
		this.target		= target;
		this.stack		= new Array;
		this.poser		= 0;
	}
	function RotatorEffect(name,counter,IsPause)
	{  this.Init 		= RotatorEffect_Init;
	   this.ScrollTimer	= RotatorEffect_ScrollTimer;
	   this.ScrollText 	= RotatorEffect_ScrollText;
	   this.SetTop	   	= RotatorEffect_SetTop;
	   this.GetTop	   	= RotatorEffect_GetTop;
	   this.GetLayer	= RotatorEffect_GetLayer;
	   this.OnMouseOver	= RotatorEffect_OnMouseOver;
	   this.OnMouseOut	= RotatorEffect_OnMouseOut;
	   this.name		= name;
	   this.counter		= counter;
	   this.num			= this.counter.count;
	   this.PauseOnOver	= IsPause;
	   this.counter.count ++;
	   this.counter.stack[this.counter.stack.length] = this;
	}
	//-->