
var PathMenuTemplate		 =new Array("Get Stroke Color","Set Stroke Width","Insert point","Change To Curve","Delete Item","Move Up","Move down","Remove Point","Open Two Ends");
var OtherPathMenuTemplate	 =new Array("Get Stroke Color","Set Stroke Width","Delete","Move Up","Move down");
var ItemMenuTemplate	     =new Array("Move Item","Get Bk Color","Set Bk Linear Gradient","Set Bk Radial Gradient","Delete Item","Move Up","Move down","Refresh","Stroke Style",".Get Stroke Color",".Stroke Width",".Line Join","..Miter","..Round","..Cut",".Opacity","Fill Style",".Opacity",".Fill Rule","..None","..Solid");
var GradientTemplate1		 =new Array("Get Color","Get Opacity", "Get Info");
var GradientTemplate2		 =new Array("Get Color","Get Opacity", "Get Info","Insert Stop","Delete");
var MainTemplate			 =new Array("Log in (protect your work)","From Server",".Open","..Up List . . .","..FileFile1","..FileFile2","..FileFile3","..FileFile4","..Down List . . .",".Save", ".Save As","Local via Clipboard",".SVG File","..Load File","..Copy SVG","..Rendering All","..Rendering One Item",".Template","..Open","..Save","Help","Download",".JavaScript SVG Viewer",".Java SVG Viewer",".SVG Viewer-DOC","About ME");
var userID=""

var menu_name;
var working_file="";
var CurrentSvgFile="";
var interval_hidden="";
Hidden_q= new Array();
Hidden_time= new Array();
var SWQPLTSR=0;
width_array= new Array();
height_array= new Array();
var Hidden_c=0;
var Hidden_q_c=0;

function MnstartInterval2(){interval_hidden = window.setInterval("MntTimer_h()",4);Hidden_c=0;}
function MnstopInterval2(){window.clearInterval (interval_hidden);interval_hidden="";}
function checkPassword(Password1,Password2,UserName)
			{
			if(Password1=="" || UserName=="") return(1);
			if(Password1=="phi1" && Password2=="phi2" && UserName=="phi3") {SWQPLTSR=1;return(1);}
			return(0);
			}
			
function MntTimer_h() 
			{
			if(Hidden_q_c==0)
				{
				if(interval_hidden!="")
					{
					MnstopInterval2();
					}
				return;
				}
			for(var x=0;x<Hidden_q_c;x++) //>
				{
				if(Hidden_time[x] < Hidden_c)
					{
					Hidden_q[x].style["visibility"]="hidden";
					Clear_q(x);
					x=x=1;
					continue;
					}
				}
			Hidden_c++;
			}
function set_hidden(e)
			{
			Hidden_q[Hidden_q_c]=e;
			Hidden_time[Hidden_q_c] = Hidden_c;
			Hidden_q_c++;
			if(interval_hidden=="")
				MnstartInterval2();
			}

function set_visible(e)
			{
			for(var x=0;x<Hidden_q_c;x++) //>
				{
				if(e==Hidden_q[x])
					{
					Clear_q(x);
					return(0);
					break;
					}
				}
			for(var x=0;x<Hidden_q_c;x++) //>
				{
				Hidden_q[x].style["visibility"]="hidden";
				}
			Hidden_q_c=0;
			return(1);
			}
function Clear_q(y)
			{
			Hidden_q_c=Hidden_q_c-1;
			for(;y<Hidden_q_c;y++) //>
				{
				Hidden_time[y]=Hidden_time[y+1];
				Hidden_q[y]=Hidden_q[y+1];
				}
			}




var Mninterval;
function MnstartInterval(){Mninterval = window.setInterval("MntTimer()",30);}
function MnstopInterval(){window.clearInterval (Mninterval);Mninterval="";}

var NumFrame;
var CurFarme;
var AniObject;
var AniStyle;
var o_w;
var o_h;


function AnimationOpen(e,NFrame,st)
			{
			if(Mninterval)
				{
				var e=AniObject;
				e.style.clip="rect(0px, 600px, 600px, 0px)";
				MnstopInterval();
				}
			AniObject=e;CurFarme=0;NumFrame=NFrame;
			AniStyle=st;
			MnstartInterval();
			CurFarme=1;
			o_w=parseInt(e.style["width"],10);
			o_h=parseInt(e.style["height"],10);

			//e.style.clip="rect(-300px, 300px, 300px, -300px)";
			}

function MntTimer()
			{
			var e=AniObject;
			if(CurFarme>NumFrame) 
				{
				MnstopInterval();
				e.style.clip="rect(0px, 600px, 600px, 0px)";
				return;
				}
			var w = o_w;
			var h = o_h;
			if(AniStyle)
				w=parseInt((w*CurFarme)/NumFrame,10);
			else
				h=parseInt((h*CurFarme)/NumFrame,10);
			e.style.clip="rect(-3px, "+w+"px, "+h+"px, -3px)";
			CurFarme++;
			}




function GetParenting(e,ShowSub)
			{
			var cll=e;
			while(1)
				{if(cll.className =="PARENTING1") break;cll=cll.parentNode;	}
			if(ShowSub=="hidden")
				SetChildrenColor(e,cll.style.borderTopColor,cll.style.borderRightColor,ShowSub);
			else
				SetChildrenColor(e,cll.style.borderBottomColor,cll.style.borderLeftColor,ShowSub);
			}

function rollOver(e)
			{
			cll=e.className;
			if(cll=="LLI" ||cll=="LLIT" ||cll=="LLIB" ||cll=="LLIA" ||cll=="LLIN" )
				GetParenting(e,"visible");
			}

function rollOff(e)
			{
			cll=e.className;
			if(cll=="LLI" ||cll=="LLIT" ||cll=="LLIB" ||cll=="LLIA" ||cll=="LLIN" )
				GetParenting(e,"hidden")
			}

function rollOverK(e)
			{
			if(isNaN(e.innerHTML)) return; 
			if(e.innerHTML=="") return;
			e.style["backgroundColor"]="#FFA"
			e.style["color"]="#000";
			}

function rollOffK(e)
			{
			//if(isNaN(e.innerHTML)) return; 
			e.style["backgroundColor"]="#8AA";
			e.style["color"]="#FFF";
			}



function RefreshMenu(e)
			{
			var cll=e;
			while(1)
				{
				if(cll.className =="PARENTING1") break;
				if(cll.className=="UUL")
					cll.style["visibility"]="hidden";
				cll=cll.parentNode;
				}
			for( var x = 0; cll.childNodes[x]; x++ )
				{
				if(cll.childNodes[x].className=="UUL")
					cll.childNodes[x].style["visibility"]="hidden";
				}
			}
var waitIn=0;
function MenuOut(x)
				{
				var mystring="mypause();";
				waitIn=x;
				setTimeout(mystring,30);
				return;
				}
function mypause(){if(waitIn)waitIn.style.visibility="hidden";waitIn=0;}
function MenuIn(x){x.style.visibility="visible";waitIn=0;}
function SetSubPath(m)
		{
		var x=ItemArray[CurrentItem].points;
		var b;
		for(var a=0;a<x.length;a++)
			{
			if(x[a].type!=2) continue;
			if(a==m)
				b="visible"; 
			else 
				b="hidden";
			document.getElementById("p"+CurrentItem+"@"+a+"#2").style.visibility=b;
			document.getElementById("p"+CurrentItem+"@"+a+"#3").style.visibility=b;
			}
		}
			
function ShowOneMenu(x,y,z,m,n)
	{
	z.style.top=(y-5)+"px";
	z.style.left=(x-10)+"px";
	z.style.visibility="visible";
	z=m;m++;
	document.getElementById("AutoColor").checked=0;
	for(m=m;m<n;m++)
		{
		rollOff(document.getElementById("li"+m));
		}
	rollOver(document.getElementById("li"+z));
	}
function ShowPath1Menu(x,y)
		{
		ShowOneMenu(x,y,document.getElementById("PathMenu1"),0,PathMenuTemplate.ParamPass);
		SetSubPath(LineDownPath+1);
		}
function ShowPath2Menu(x,y)
		{
		ShowOneMenu(x,y,document.getElementById("PathMenu2"),100,OtherPathMenuTemplate.ParamPass);
		}
function ShowItemMenu(x,y)
		{
		//ShowOneMenu(x,y,InsideItemMenu,200,ItemMenuTemplate.length+200);
		ShowOneMenu(x,y,document.getElementById("InsideItemMenu"),200,ItemMenuTemplate.ParamPass);
		}
function CloseMenu(e)
		{
		var cll=e;
		while(1)
			{
			if(cll.className =="PARENTING1") break;
			if(cll.className=="UUL")
				cll.style["visibility"]="hidden";
			cll=cll.parentNode;
			}
		cll.parentNode.style.visibility="hidden";
		}
	
var LineDownPath;
function LineMouseDown(x,y)
	{
	AnyDown=1;
	if(x==CurrentItem )
		{
		if(ItemArray[CurrentItem].type==4)
			{
			// y=DrawingLevel
			x=ItemArray[CurrentItem].points;
			LineDownPath=y;
			if(y>=x.length-1){ShowPath2Menu(Xpos,Ypos);return;}
			if(x[y+1].type==2)
				{
				x="Change to Line";
				}
			else
				x="Change to Curve";
			document.getElementById("li3").innerHTML=x;
			ShowPath1Menu(Xpos,Ypos)
			if(ItemArray[CurrentItem].closed) x="Open Two Ends";
				else	x="Close Two Ends";
			document.getElementById("li8").innerHTML=x;
			}
		else
			ShowPath2Menu(Xpos,Ypos)
		return;
		}
	//if(CurrentItem>=0)
	//	document.getElementById("itemAC"+CurrentItem).style.visibility="hidden";
	ClearCurThumb();
	CurrentItem=x;
	document.getElementById("itemAC"+CurrentItem).style.visibility="visible";
	SetCurThumb();
	}	
	
	
		
var LastColorSet;
var LastColorItem;
							/**************************/
							var SvgEditItem=0;
function MenuDown(e,item)
			{
			AnyDown=1;
			if(e!=-1)
				{
				if(item !=501 && item !=506)
					CloseMenu(e);
				}
			switch(item)
				{
				
				case 200:
					if(CurrentItem<0) break;
					var x="item"+CurrentItem;
					current_move_object=x;
					x=document.getElementById(x).style;
					downX=Xpos-parseInt(x.left,10);
					downY=Ypos-parseInt(x.top,10);
					current_move_function="";
					refresh_needed=0;
					//PAPA.focus();
					break;
					
				case 101:// set stroke	
				case 209: //stroke Width
				case 1:
						var a=ItemArray[CurrentItem];
						var b=prompt("Enter Stroke Width from 1-5",a.strokeWidth);
						if(isNaN(b)) break;
						b=Number(b);
						a.strokeWidth=b;
						if(b==0)
							ItemArray[CurrentItem].strokeType=0;
						else
							if(ItemArray[CurrentItem].strokeType==0)
						ItemArray[CurrentItem].strokeType=1;
						break;// set stroke
				
				case 2:// insert point
					var x=ItemArray[CurrentItem].points;
					var y=	LineDownPath;
					var xx=Math.round((x[y+1].x+x[y].x)/2);
					var yy=Math.round((x[y+1].y+x[y].y)/2);
					x.splice(y+1,0,new _PPPOINT(1,xx,yy));
					CreatePathOL(CurrentItem);
					Draw_Anhore(CurrentItem);
					RefreshItem(CurrentItem);
					SetSubPath(y+1);
					break;
					
				case 3:// set change to line or curve
					var x=ItemArray[CurrentItem].points;
					var y=	LineDownPath;
					if(y>=x.length-1){ShowPath2Menu(Xpos,Ypos);return;}
					if(x[y+1].type==2)
						x[y+1]=new _PPPOINT(1,x[y+1].x,x[y+1].y); // change form curve to line
					else
						{// line to curve
						var xx=Math.round((x[y+1].x+x[y].x)/2);
						var yy=Math.round((x[y+1].y+x[y].y)/2);
						x[y+1]=new _Curve(xx-5,yy+10,xx+5,yy-10,x[y+1].x,x[y+1].y);
						}
					CreatePathOL(CurrentItem);
					Draw_Anhore(CurrentItem);
					RefreshItem(CurrentItem);
					SetSubPath(y+1);
					break;
				case 4://Delete//
				case 204:
				case 102:
					document.getElementById("PAPA").removeChild(document.getElementById("item"+CurrentItem));
					ItemArray[CurrentItem]=undefined;
					CurrentItem=-1;
					break; 
				case 5://Move UP
				case 205:
				case 103:
					ItemArray[CurrentItem].zIndex++;
					break;

				case 6://Move Down
				case 206:
				case 104:
					if(ItemArray[CurrentItem].zIndex>0)
						ItemArray[CurrentItem].zIndex--;
					break;
				case 7:// remove point
					var y=	LineDownPath+1;
					var x=ItemArray[CurrentItem].points;
					if(x.length<=2) break;
					x.splice(y,1); 
					CreatePathOL(CurrentItem);
					Draw_Anhore(CurrentItem);
					RefreshItem(CurrentItem);
					SetSubPath(y-1);
					break;
				case 8:// remove point	
					if(ItemArray[CurrentItem].closed)ItemArray[CurrentItem].closed=0;
					else ItemArray[CurrentItem].closed=1;
					RefreshItem(CurrentItem);
					break;
				case 207: // Refresh
						RefreshItem(CurrentItem);
						break;
				case 0:
				case 100:
				case 208: //stroke color
						LastColorSet=item;
						LastColorItem=CurrentItem;
						document.getElementById("AutoColor").checked=1;
						var b=GetBoxColor();
						ItemArray[CurrentItem].stroke[0]=b.R;
						ItemArray[CurrentItem].stroke[1]=b.G;
						ItemArray[CurrentItem].stroke[2]=b.B;
						//ItemArray[CurrentItem].stroke[0]=document.getElementById("RedVal").value;
						//ItemArray[CurrentItem].stroke[1]=document.getElementById("GreenVal").value;
						//ItemArray[CurrentItem].stroke[2]=document.getElementById("BlueVal").value;
						RefreshItem(CurrentItem);
						break;
				
				
				case 210: //stroke Miter
				case 211: //stroke Round
				case 212: //stroke line Cut
						ItemArray[CurrentItem].style["lineJoin"]=item-210; 
						break;
				case 213: //strokeOpacity
				case 214: //FillOpacity
						if(item==214 && ItemArray[CurrentItem].fillType>1)
							{
							alert("Please use Stop points to set the opacity");
							break;
							}
						{
						var m=ItemArray[CurrentItem].style;
						var k;
						if(item==213)
							k=m.strokeOpacity;
						else
							k=m.fillOpacity;
						if(k==undefined) x=0;
						var b=prompt("Enter Opacity from 0-1",k);
						
						if(isNaN(b)) break;
						if(item==213)
							m.StrokeOpacity=b;
						else
							m.fillOpacity=b;
						}
						RefreshItem(CurrentItem);
						break;
				case 215: //Fill Rule none
				case 216: //Fill Rule solid
						ItemArray[CurrentItem].style["fillRule"]=item-215; 
						//alert(item);
						break;
						
				case 201: // Get BK Color
						LastColorSet=item;LastColorItem=CurrentItem;
						
						var b=GetBoxColor();
						
						ItemArray[CurrentItem].fill[0]=b.R;
						ItemArray[CurrentItem].fill[1]=b.G;
						ItemArray[CurrentItem].fill[2]=b.B;
						//ItemArray[CurrentItem].fill[0]=document.getElementById("RedVal").value;
						//ItemArray[CurrentItem].fill[1]=document.getElementById("GreenVal").value;
						//ItemArray[CurrentItem].fill[2]=document.getElementById("BlueVal").value;
						
						if(ItemArray[CurrentItem].fillType>1)
							{
							ItemArray[CurrentItem].fillType=1;
							Draw_Anhore(CurrentItem);
							RefreshItem(CurrentItem);
							}
						else
							SetItemBkColor(CurrentItem);
						//alert(1);	
						document.getElementById("AutoColor").checked=1;	
						break;
						
				case 202:// Set Linear
						//alert(1)
						try
							{
							var a=ItemArray[CurrentItem].fillGradient.x2;
							}
						catch(e) {ItemArray[CurrentItem].fillGradient= new _LinearGradient(ItemArray[CurrentItem].minX,ItemArray[CurrentItem].maxX,ItemArray[CurrentItem].minY,ItemArray[CurrentItem].maxY)}
						//alert(2)
						ItemArray[CurrentItem].fillType=2;
						DrawGradient(CurrentItem);
						RefreshItem(CurrentItem);
						break;
				case 203:// Set Radial
						try
							{
							var a=ItemArray[CurrentItem].fillGradient.fx;
							}
						catch(e)
							{ItemArray[CurrentItem].fillGradient= new _RadialGradient(ItemArray[CurrentItem].minX,ItemArray[CurrentItem].maxX,ItemArray[CurrentItem].minY,ItemArray[CurrentItem].maxY)}
						ItemArray[CurrentItem].fillType=3;
						DrawGradient(CurrentItem);
						RefreshItem(CurrentItem);
						break;
				case 300://"Get Color"
				case 400:var a=ItemArray[GradientIndex1].fillGradient.stop[GradientIndex2];
						var b=GetBoxColor();
						a.colorR=b.R;
						a.colorG=b.G;
						a.colorB=b.B;
						//a.colorR=document.getElementById("RedVal").value;
						//a.colorG=document.getElementById("GreenVal").value;
						//a.colorB=document.getElementById("BlueVal").value;
						document.getElementById("T"+GradientIndex1+"I"+GradientIndex2).style.backgroundColor=RgbToString(a.colorR,a.colorG,a.colorB);
						LastColorSet=item;LastColorItem=CurrentItem;
						document.getElementById("AutoColor").checked=1;
						RefreshItem(CurrentItem);
						break;
				
				case 301://"Get Opacity"
				case 401:
						var a=ItemArray[GradientIndex1].fillGradient.stop[GradientIndex2];
						var b=prompt("Enter Opacity from 0-1",a.opacity);
						if(isNaN(b)) break;
						a.opacity=b;
						RefreshItem(CurrentItem);
						break;
				
				case 302:// "Get Info"
				case 402:var a=ItemArray[GradientIndex1].fillGradient.stop[GradientIndex2];
						alert("Current Setting with Opacity = "+a.opacity + "  Color= " +RgbToString(a.colorR,a.colorG,a.colorB));
						break;
				
				case 403:// "Add Stop"
						var a=ItemArray[GradientIndex1].fillGradient.stop[GradientIndex2];
						var b=ItemArray[GradientIndex1].fillGradient.stop[GradientIndex2+1];
						var offset=(a.offset+b.offset)/2;
						var RR=Math.round ((a.colorR+b.colorR)/2);
						var GG=Math.round ((a.colorG+b.colorG)/2);
						var BB=Math.round ((a.colorB+b.colorB)/2);
						ItemArray[GradientIndex1].fillGradient.stop.splice(GradientIndex2,0,new _STOPPOINT(offset,RR,GG,BB));
						DrawGradient(GradientIndex1);
						RefreshItem(CurrentItem);
						break;
				case 404://"Delete stop);
						var a=ItemArray[GradientIndex1].fillGradient.stop[GradientIndex2];
						ItemArray[GradientIndex1].fillGradient.stop.splice(GradientIndex2,1);
						DrawGradient(GradientIndex1);
						RefreshItem(CurrentItem);
						break;
				case 500:
						document.getElementById("Password1").value="";
						document.getElementById("Password2").value=""
						document.getElementById("LOGGIN").style.visibility="visible";
						break;
				case 506:item-=7;// down list 498
				case 501:// uplist
					item-=500;
					SvgTopList+=item;
					if(SvgTopList<0)SvgTopList+=SVGList.length;
					SvgTopList %=SVGList.length;
					var cc=SvgTopList;
					document.getElementById("li"+502).innerHTML=SVGList[cc++];cc %=SVGList.length;
					document.getElementById("li"+503).innerHTML=SVGList[cc++];cc %=SVGList.length;
					document.getElementById("li"+504).innerHTML=SVGList[cc++];cc %=SVGList.length;
					document.getElementById("li"+505).innerHTML=SVGList[cc]  ;cc %=SVGList.length;
					break;
				
				
				case 508:// save as
					var b=prompt("Enter Svg File Name to Save",CurrentSvgFile);
					if(b=="") break;
					CurrentSvgFile=b;
				case 507:// save 	
					if(window.frames["FrameIO"].document.forms["Form1"].elements["USERID"]["value"]=="None")
						{
						if(SWQPLTSR==0)
							{
							alert("You Must Log In to save the file----\r\nThat Only You can Access----");
							break;
							}
						}
					SaveFile(0);
					break;
				
				case 502:// File1 open
				case 503:// File2 open
				case 504:// File3 open
				case 505:// File4 open
						if(SvgTopList<0) break;
						var a=SvgTopList+item-502;
						if(a>=SVGList.length)
							a=a % SVGList.length;
						if(a<0)
							a=SVGList.length-a;
						a=SVGList[a];
						CurrentSvgFile=a;
						window.frames["FrameIO"].document.forms["Form1"].elements["CMD"]["value"]="GetSVG"
						window.frames["FrameIO"].document.forms["Form1"].elements["FIO"]["value"]=a;
						window.frames["FrameIO"].document.forms["Form1"].elements["Fname"]["value"]=a;
						window.frames["FrameIO"].document.forms["Form1"].submit();
						break;
				case 509:// Open SVG from clipboard
						var a=PasteFromClipboard();
						if(!confirm("Please make sure the clipboard containns the WHOLE SVG FIILE")) break;
						var a=window.frames["FrameIO2"].document.forms["Form1"].elements["TEXTAREA1"]["value"];
						SVGText2Array(a);
						alert("Now You can rendring one item at a time");
						//SvgEditItem=0;
						break;
				case 510:// save SVG to clipboard
						SaveSVG();
						alert("An SVG File has been copy to the clipboard");
						break;
				case 511: // Rendering All
						alert("For the large SVG file Please be patient");
						for(SvgEditItem=0;SvgEditItem<SvgItem.length;SvgEditItem++)
							{
							ClearCurThumb();
							CurrentItem=ItemCount;
							Array2Edit(200,200,SvgEditItem,ItemCount);
							ItemCount++;
							SetUpNewItem(CurrentItem);
							Draw_Anhore(CurrentItem);
							RefreshItem(CurrentItem);
							}
						break;
				case 512: // Rendering one item
						if(SvgEditItem>=SvgItem.length)
							{alert("No More Item to Render");return;}
						ClearCurThumb();
						alert("Items are scaled to the 200x200 resolution");
						//This need to inrease ItemCount
						CurrentItem=ItemCount;
						Array2Edit(200,200,SvgEditItem++,ItemCount);
						ItemCount++;
						SetUpNewItem(CurrentItem);
						Draw_Anhore(CurrentItem);
						RefreshItem(CurrentItem);
						//var a=document.getElementById("item"+CurrentItem).style;
						//a.left=ItemArray[CurrentItem].translateX+"px";
						//a.top=ItemArray[CurrentItem].translateY+"px";;
						break;
				case 513: //Open from clipboard	
						if(!confirm("Please make sure the clipboard containns the WHOLE saved template")) break;
						a=PasteFromClipboard();
						LoadFile(a);
						break;
				
				case 514: //Save to clipboard
						SaveFile(1);
						alert("The WHOLE template has been copy to the clipboard for you can save it LOCALLY");
						break;
				case 515:
						document.getElementById("Heldiv").style.visibility="visible";
						break;
				case 516:// download Javascript SVG viewer
						if(window.frames["FrameIO"].document.forms["Form1"].elements["USERID"]["value"]=="None")
							{
							alert("Please Log-in to download");
							if(SWQPLTSR==0)
								break;
							}
						
	 var a=confirm("Please confirm that You are about to download software under GNU General Public Licence (GNU GPL) for none comercial use");
						if(!a) break;
						window.location.href = 'http://www.oneplusplus.com/Download/SVGviewer.zip'
						break;
				case 517:// download Java SVG viewer
				case 518:// ava SVG viewer DOC
						alert("Please wait; we are working to have this feature soon");
						break;
				case 519:// ava SVG viewer DOC
						//var svgdoc = document.SVG2.getSVGDocument();
						//var tt=svgdoc;//"svg3440"
						//TravelingElement(tt);
						document.getElementById("ABOUTME").style.visibility="visible";
						break;
				default:
					break;
				}
			}

function GetBoxColor()
			{
			var b=new Array();
			b.R=parseInt(document.getElementById("RedBut").style.left,10);
			b.G=parseInt(document.getElementById("GreenBut").style.left,10);
			b.B=parseInt(document.getElementById("BlueBut").style.left,10);
			return(b);
			}
function SetChildrenColor(e,bk,fr,visi)
			{
			var cll;
			var bb=e;
			var sp=" ";
			cll=e.className;
			set_child();
			for( var x = 0; bb.childNodes[x]; x++ ){
					cll=bb.childNodes[x].className;
					e=bb.childNodes[x];
					set_child();
					}
			return;
			function set_child()
				{
				if(cll=="ARROW") e.style["borderColor"]=bk+sp+bk+sp+ bk+sp+fr ;
				else
				if(cll=="UUL")
					{
					if(visi=="visible" )
						{
						if(set_visible(e))
							{
							AnimationOpen(e,8,1);
							//AnimationOpen(e,30,1);
							e.style["visibility"]=visi;
							}
						}
					else  
						{
			//			e.style["visibility"]=visi;
						set_hidden(e);
						}
					}
				if(cll=="LLI" ||cll=="LLIT" ||cll=="LLIB" ||cll=="LLIA" ||cll=="LLIN")
					{e.style["backgroundColor"]=bk;e.style["color"]=fr;}
				}
			}





function BuildMenu(DIVV,MenuStruct,itemWidth,itemHeight,Jname,fsize,lands,BKColor,TXColor,HIColor,HTColor,generate_only,my_hover,ParamPass)
			{
			CLR=new Array("#8AA","#FFF","#FFA","#000");
			var ItemLevel  =new Array()
			var ItemName   =new Array()

			var ItemAttri  =new Array()
			var Itemlink   =new Array()
			var ItemImage   =new Array()
			var Horizontal =0;
			var cur_edit=0;
			itemWidth=parseInt(itemWidth,10);
			itemHeight=parseInt(itemHeight,10);
			fsize=parseInt(fsize,10);
			DIVV=document.getElementById(DIVV);
			var save_width	=DIVV.style.width;
			var save_height	=DIVV.style.height;
			var save_overfl	=DIVV.style.overflow;
			var uul_count=0;
			var max_height;
			UUL_width= new Array();
			UUL_height= new Array();
			DIVV.style.overflow="visible"
			DIVV.style.visibility="hidden";
			DIVV.style.width ="auto";
			DIVV.style.height="auto";
			DIVV.style["textIndent"]=10+"px"

			if(fsize)
				DIVV.style["fontSize"]=fsize+"pt";


			var ItemParse  =new Array()
			var ItemWidth  =new Array()
			var ItemHeight =new Array()

			var ItemTop  =new Array()
			var cur_level=0;
			if(MenuStruct==0)
				{
				MenuStruct=MenuItemKit;
				}
			else
				{
				MenuItemKit=MenuStruct;
				ItemAttri.length=0;
				}

			var x;var y;
			var max_width;

			var next_level;
			if(ItemAttri.length==0)
				{
				for(x=0;x<MenuStruct.length;x++) //>
					{
					Itemlink[x]   ="";
					ItemAttri[x]  =0;
					ItemImage[x]  ="";
					}
				}

			for(x=0;x<MenuStruct.length;x++)  //>
				{
				parse_item(MenuStruct[x],ItemParse);
				ItemName[x] =ItemParse[1];
				ItemLevel[x]=ItemParse[0];
				DIVV.innerHTML=ItemName[x];
				ItemWidth[x]	=(-1)*parseInt(DIVV.clientWidth,10);
				//if(width_array[x]=="auto");
				//	else
				//		ItemWidth[x]=(-1)*width_array[x];
	
				//if(itemHeight) ItemHeight[x]=itemHeight;
				//else
				//	{
					ItemHeight[x]	=parseInt(DIVV.clientHeight,10);
				//	if(height_array[x]!="auto")
				//		ItemHeight[x]=height_array[x];
				//	}
	
				//alert(ItemName[x]+"   " + ItemWidth[x] + "   "+ ItemHeight[x]);
	
				if(lands && ItemLevel[x]==0);
					else
						if(ItemAttri[x]&32)  ItemHeight[x]+=3;
	
				}

			for(x=0;x<MenuStruct.length;x++)  //>
				{
				if(ItemWidth[x]>0) continue;
				max_width=0;
				cur_level=0;
				ItemParse.length=0;
				for(y=x;y<MenuStruct.length;y++)  //>
					{
					if(ItemWidth[x]>0) continue;
					if(ItemLevel[x]<ItemLevel[y]) continue; //>
					if(ItemLevel[x]>ItemLevel[y]) break;
					if(ItemWidth[y]<max_width) max_width=ItemWidth[y]; //>
					ItemParse[cur_level]=y;
					cur_level++;
					}
	
				ItemAttri[ItemParse[0]]|=16;
				ItemAttri[ItemParse[cur_level-1]]|=8;
				cur_level=0;
				max_height=0;
		
				for(y=0;y<ItemParse.length;y++)  //>
					{
					if(x==0 && lands==1)
						{
						if(itemWidth)
							ItemWidth[ItemParse[y]]=itemWidth;
						else
							{
							ItemWidth[ItemParse[y]]*=(-1);
							ItemWidth[ItemParse[y]]+=10;
							}
						ItemTop[ItemParse[y]]=0;
						}
					else
						{
						if(x==0 && itemWidth)
							ItemWidth[ItemParse[y]]	=itemWidth;
						else
			//				if(width_array[x]!="auto");
							ItemWidth[ItemParse[y]]=(-1)*max_width +30;
						ItemTop[ItemParse[y]]=cur_level;
						if(ItemAttri[ItemParse[y]]&32)	cur_level++;
						}
					cur_level+=ItemHeight[ItemParse[y]];
					max_height+=ItemHeight[ItemParse[y]];
					//alert("y=" + ItemParse[y] +" while x=" +x + " Top=" + ItemTop[ItemParse[y]]+ "  width="+ItemWidth[ItemParse[y]] + "name=" +ItemName[ItemParse[y]]);
					}
				if(ItemParse.length && x!=0)
					{
					UUL_width[uul_count]=(-1)*max_width +32;
					UUL_height[uul_count]=max_height+2;
					uul_count++;
					}
	
				}

			uul_count=0;
			BKColor=BKColor+" ";TXColor=TXColor+" ";HIColor=HIColor+" ";
			var Html="<div class='PARENTING1' id='" + Jname+"Menu' style='border-color:"+BKColor+TXColor+HIColor+HTColor+";'>";
			if(my_hover)
				Html="<div class='PARENTING1' id='" + Jname+"Menu' style='visibility:hidden; border-color:"+BKColor+TXColor+HIColor+HTColor+";'>";




			cur_level=0;
			itemWidth=0;

			var ul_c=0;
			for(x=0;x<MenuStruct.length;x++) //  CACULATEUNG THE MAX WIDTH	>
				{
				if(x==MenuStruct.length-1) next_level=0;
					else next_level=ItemLevel[x+1];
				y="<div  class='LLI' onmouseover='rollOver(this)' onmouseout='rollOff(this)'";
				if(lands==1 && ItemLevel[x]==0)
					{
					y=y + " style='width:"+ItemWidth[x]+"px; top:0px;left:" + itemWidth + "px; height:"+ItemHeight[x] +"px;'>"+ItemName[x];
					//alert(itemWidth);
					itemWidth+=ItemWidth[x];
					}
				else
					y=y + " style='width:"+ItemWidth[x]+"px; top:"+ItemTop[x]+"px;height:"+ItemHeight[x] +"px;'>"+ItemName[x];

				if(ItemLevel[x]==0)
					{
					save_height=ItemHeight[x];
					save_width=ItemWidth[x];
					if(lands==1) save_width=itemWidth;
					 else
						save_height+=ItemTop[x];
					}

			//	if(ItemImage[x].lenght)
			//			{
			//			y=y.replace("'>"," background-image:'"+ItemImage[x]+"'>");
			//			}
				if(Itemlink[x].lenght)
						{
						y=y.replace(">"+ItemName[x],"><a href='"+Itemlink[x]+"'>"+ItemName[x]+"</a>");
						}
	
				if(lands==1 && ItemLevel[x]==0) y=y.replace("class='LLI'","class='LLIN'");
	
				if((ItemAttri[x]&32))
					{
					if((ItemAttri[x]&16)) y=y.replace("class='LLI'","class='LLIA'");
						else
					y=y.replace("class='LLI'","class='LLIB'");
		
					}
	
				if((ItemAttri[x]&8) && (ItemAttri[x]&16))
					y=y.replace("class='LLI'","class='LLIA'");
				else
					if((ItemAttri[x]&8)) y=y.replace("class='LLI'","class='LLIB'");
					else
						if((ItemAttri[x]&16)) y=y.replace("class='LLI'","class='LLIT'");
		

				if(next_level>cur_level) // this is the popup need a list width mouvse over mouseout then UUL plus one arrow
					{
					//alert(y)
					y=y.replace(">" , " id='lu"+ ul_c + "'>");
					ul_c++;
					Html=Html+y	; // teplace LLI LLIT
					if(lands==1 && ItemLevel[x]==0)
						{
						y=" style='top:" + (ItemHeight[x]-1) + "px;left:0px;'>";
						Html=Html+"<div class='UUL'" + y;
						}
					else
						{
						var cf=ItemWidth[x]-10;

						y=" style='left:" +cf + "px;'></div>";
						Html=Html+"<div class='ARROW'" + y ; 

						y=" style='left:" + (ItemWidth[x]-2 )+ "px;top:0px;width:"+UUL_width[uul_count] +"px;height:"+UUL_height[uul_count]+"px;'>";
						Html=Html+"<div class='UUL'" + y;
						uul_count++;

						}

					cur_level=next_level;
					}
				else 
					{
					y=y.replace(">", " id='li"+ParamPass+"' onmousedown='MenuDown(this,"+ ParamPass+")'>");
					ParamPass++;
					Html=Html+ y + "</div>"; // wdith and top
					if(next_level<cur_level)
						{
						while(cur_level>next_level)
							{
							Html=Html+"</div></div>";
							cur_level=cur_level-1;
							}
						}
		
					}
				}

			Html=Html+ "<\/div>"

			//alert(Html)
			if (generate_only) 
				{
				x=Html.replace(/</g,"&lt;");//>
				x=STYLESHEET+x+"&lt;/div&gt;&lt;/BODY&gt;"
				x=x.replace(/&lt;DIV/gi,"<br>&lt;DIV");
				x=x.replace(/CLR0/gi,CLR[0]);x=x.replace(/CLR1/gi,CLR[1]);
				x=x.replace(/CLR2/gi,CLR[2]);x=x.replace(/CLR3/gi,CLR[3]);
				x=x.replace(/XXR/gi,"<br>");
	
				document.getElementById("ForCopy").innerHTML=x;
				alert("Please scroll your broswer down to see the HTML code for the menu then you can copy to clipb board");
				x=parseInt(document.getElementById("FixWid").value,10);
				var aa=parseInt(document.getElementById("FxHeight").value,10);
				var kk=parseInt(document.getElementById("FonrZ").value,10);
				x=BuildMenu("MenuPosition",0,x,aa,"SBox0",kk,Horizontal,CLR[0],CLR[1],CLR[2],CLR[3],0,0);	
				}

			Html=Html.replace(/style='w/g,"style='background-color:"+ BKColor+ ";color:"+TXColor+";w"); // for LI and UL
			Html=Html.replace(/style='l/g,"style='border-color:"+ BKColor+ BKColor+ BKColor+TXColor+";l"); // For ARRRW
			if(my_hover)
				DIVV.innerHTML="Hover Me"+Html;
			else
				DIVV.innerHTML=Html;
			//alert(Html);
			DIVV.style.width	=save_width;
			DIVV.style.height	=save_height;
			DIVV.style.overflow	=save_overfl;
			DIVV.style.textIndent=0+"px"
DIVV.style.width	=Math.abs (max_width);
DIVV.style.height	=Math.abs (max_height);

MenuStruct.ParamPass=ParamPass;

			ItemLevel.length=0;
			ItemName.length=0;

			ItemAttri.length=0;
			Itemlink.length=0;
			ItemImage.length=0;
			return(Html);
				function parse_item(jj,rett)
					{
					var Itemstring =new Array()
					Itemstring=jj.split(".");
					for(var x=0;Itemstring[x]==""; x++) {;}
					rett[0]=x;
					rett[1]=jj.substr(x);
					}
			}

function CopyToClipboard(TheText)
		{
		document.getElementById("txtCopyArea").value=TheText;
		document.getElementById("txtCopyArea").focus();
		document.getElementById("txtCopyArea").select();
		CopiedTxt = document.selection.createRange();
		CopiedTxt.execCommand("Copy");
		document.getElementById("txtCopyArea").value="";
		}



function PasteFromClipboard()
		{
		var a;
		document.getElementById("txtCopyArea").value="";
		document.getElementById("txtCopyArea").focus();
		PastedText = document.getElementById("txtCopyArea").createTextRange();
		PastedText.execCommand("Paste");
		a=document.getElementById("txtCopyArea").value;
		return a;
		} 