				/*******************************************************
					(c) Copyright 2005 PhiTran  OnePlusPlus.COM
				********************************************************/
				
function SaveFile(flag)
	{
	if(ItemCount<=0)
		{
		alert("Nothing to save");
		return;
		}
	var x,k,ll;	
	var IndexList = new Array();
	for(x=0;x<ItemCount;x++)
		IndexList[x]=x;
	for(x=0;x<ItemCount;x++)
	for(k=x+1;k<ItemCount;k++)
		{
		if(ItemArray[IndexList[k]].zIndex<ItemArray[IndexList[x]].zIndex) 
			{
			ll=IndexList[k];IndexList[k]=IndexList[x];IndexList[x]=ll;
			}
		}
	
		
	var save_text="ItemArray=[";
	ll=0;
	for(var bu=0;bu<ItemCount;bu++)
	//for(x=0;x<ItemCount;x++)
		{
		x=IndexList[bu];
		if(ll) save_text+=",";ll++;
		ItemArray[x].translateX=parseInt(document.getElementById("item"+x).style.left,10);
		ItemArray[x].translateY=parseInt(document.getElementById("item"+x).style.top,10);
		save_text+="{";
		k=0;
		for(var i in ItemArray[x])
			{
			if(i=="maxX" || i==	"minX" || i=="maxY" || i=="minY") continue;
			if(i.length==0) continue;
			if(k) save_text+=","; k++;
			
			save_text+='"'+i+'":';
			switch(i)
				{
				case "fill":
				case "stroke":
					//[255,255,255]
					save_text+="["+ItemArray[x][i][0]+","+ ItemArray[x][i][1]+","+ItemArray[x][i][2]+"]";
					break;
				case "style":
					var c=0;
					for(var a in ItemArray[x][i])
						{
						if(c) save_text+=",";
						else save_text+="{"; c++;
						save_text+='"'+a+'":"'+ItemArray[x][i][a]+'"';
						}
					if(c) save_text+="}";
					else save_text+="[]";
					break;
				case "points":
					if(ItemArray[x].points.length==0) continue;
					save_text+="[";
					for(var a=0;a<ItemArray[x].points.length;a++)
						{
						if(a) save_text+=",";
						save_text+="{";
						var c=0;
						for(b in ItemArray[x].points[a])
							{
							if(c)save_text+=",";c++;
							save_text+='"' + b + '":"'+ ItemArray[x].points[a][b]+'"';
							}
						save_text+="}";	
						}
					save_text+="]";
					break;
				case "fillGradient":
				case "strokeGradient":
					save_text+="{";
					var c=0;
					var c=0;
					for(b in ItemArray[x][i])
						{
						if(c)save_text+=",";c++;
						if(b!="stop")
							{
							save_text+='"' + b + '":"'+ ItemArray[x][i][b]+'"';
							continue;
							}
						save_text+='"stop":[';
						for(d=0;d<ItemArray[x][i][b].length;d++)
							{
							if(d)save_text+=",";
							save_text+=
							"{"+
							'"offset":' +	ItemArray[x][i][b][d].offset +  "," +
							'"opacity":'+	ItemArray[x][i][b][d].opacity + "," +
							'"colorR":'	+	ItemArray[x][i][b][d].colorR +  "," +
							'"colorB":'	+	ItemArray[x][i][b][d].colorB +  "," +
							'"colorG":'	+	ItemArray[x][i][b][d].colorG +
							"}";
							}
						save_text+="]";
						}
					
					save_text+="}";
					break;
				case "BRect":
					save_text+="{";
					if(ItemArray[x].type==3)
						save_text+=
						'"x1":' +	ItemArray[x][i].x1 +  "," +
						'"y1":' +	ItemArray[x][i].y1 +  "," +
						'"x2":' +	ItemArray[x][i].x2 +  "," +
						'"y2":' +	ItemArray[x][i].y2 +  "," +
						'"rx":' +	ItemArray[x][i].rx +  "," +
						'"ry":' +	ItemArray[x][i].ry ;
					else
						save_text+=
						'"x1":' +	ItemArray[x][i].x1 +  "," +
						'"y1":' +	ItemArray[x][i].y1 +  "," +
						'"x2":' +	ItemArray[x][i].x2 +  "," +
						'"y2":' +	ItemArray[x][i].y2;
						
					save_text+="}";
					break;
				default:
					//if(isNaN(ItemArray[x][i]))
						save_text+='"'+ItemArray[x][i]+'"';
					//else
					//	save_text+=ItemArray[x][i]
				}// end switch
			}// for(var i in ItemArray[x])
		save_text+="}";	
		}// end x<ItemArrayCount
	save_text+="];";
	//LoadFile(save_text);
	if(flag==0)
		{

		AjaxCall("SaveSVG",USERID,CurrentSvgFile,save_text);
		}
	else
		{
		// copy to clipboard
		CopyToClipboard(save_text);
		}
	}
function LoadFile(save_text)
	{
	var ll;
	for(ll=0;ll<ItemCount;ll++)
		{
		document.getElementById("PAPA").removeChild(document.getElementById("item"+ll));
		ItemArray[ll]=undefined;
		}
	//alert(save_text);
	eval(save_text);
	ConvertToNum(ItemArray);
	
	ItemCount=ItemArray.length;
	for(ll=0;ll<ItemCount;ll++)
		{
		if(ll) ClearCurThumb();
//		if(a.draw==undefined) a.draw=0; // this for backward compatible
//		if(a.outline==undefined) a.outline=0;
		CurrentItem=ll;
		SetUpNewItem(CurrentItem);
		Draw_Anhore(CurrentItem);
		if(ItemArray[ll].draw=0 ||	ItemArray[ll].outline==0 || ItemArray[ll].draw==undefined ||ItemArray[ll].outline==undefined)
			{
			ItemArray[ll].draw=0;
			ItemArray[ll].outline=0;
			}
		else
			{
			var mouseevent="onmousedown='FloodMouseDown("+ll+")'";
			var thiscolor="#FF0;opacity:1;filter:alpha(100))";
			var fl="<div style='overflow:hidden;visibility:visible;position:absolute;left:1px;top:1px;width:1px;height:1px;background-color:"+thiscolor+";border-style:none;' "+mouseevent+"></div>";
			var kk="";
			var a=1;
			for(var b=0;b<16;b++)
				{
				if(ItemArray[ll].draw & a)
					kk+=fl;
				fl+=fl;
				a<<=1;
				}
			document.getElementById("itemDR"+ll).innerHTML=kk;
			ItemArray[ll].outline=0;
			}
		RefreshItem(CurrentItem);
		}
	return;
	function ConvertToNum(TheArray)
		{
		var k;
		for(k in TheArray)
			{
			if (typeof TheArray[k] == 'object') 
					ConvertToNum(TheArray[k]);
			if(isNaN(TheArray[k])) continue;
			TheArray[k]=Number(TheArray[k]);
			}
		}
	}
function SaveSVG()
	{
	var GradientCount=0;
	var TheItemCount=0;
	var SVGTheItem="";
		var x1,y1,x2,y2;
		x2=y2=0;
	for(x1=0;x1<ItemCount;x1++)
		{
		if(x2<ItemArray[x1].maxX) x2=ItemArray[x1].maxX;
		if(y2<ItemArray[x1].maxY) y2=ItemArray[x1].maxY;
		}
	var SVGSVG='<?xml version="1.0" encoding="UTF-8" standalone="no"?>';
	SVGSVG+="<svg height='"+y2+"px' width='"+x2 +"px'	generateby='OnePlusPlus.com'>";
	var SVGdef="<defs>";
	for(var x=0;x<ItemCount;x++)
		{
		var m=-1;
		var n=-1;
		ItemArray[x].translateX=parseInt(document.getElementById("item"+x).style.left,10);
		ItemArray[x].translateY=parseInt(document.getElementById("item"+x).style.top,10);
		y2=0;
		if(ItemArray[x].skewX ||ItemArray[x].skewY)	
			{
			var a,b,c,d;
			a=d=1;
			if(ItemArray[x].skewX)
				{
				b=0;
				c=Math.tan(ItemArray[x].skewX);
				}
			else
				{
				c=0;
				b=Math.tan(ItemArray[x].skewY);
				}
			SVGTheItem+='<g transform="matrix('+a+','+b+','+c+','+d+',0,0)">';
			y2++;
			}
		if(ItemArray[x].rotate)
			{
			var b=Math.sin(ItemArray[x].rotate);
			var a=Math.cos (ItemArray[x].rotate);
			var d=a;
			var c=-b;
			SVGTheItem+=' <g transform="matrix('+a+','+b+','+c+','+d+',0,0)">';
			y2++;
			}	
		if(ItemArray[x].translateX ||ItemArray[x].translateY)
			{
			SVGTheItem+=' <g transform="translate('+ItemArray[x].translateX+','+ItemArray[x].translateY+')">';
			y2++;
			}
		if(ItemArray[x].strokeType >1)
				{
				
				if(ItemArray[x].strokeType==2)
					addLinear(ItemArray[x].strokeGradient);
				else
					addRadial(ItemArray[x].strokeGradient);
				m=GradientCount++;	
				
				}
		if(ItemArray[x].fillType>1)
				{
				if(ItemArray[x].fillType==2)
					addLinear(ItemArray[x].fillGradient);
				else
					addRadial(ItemArray[x].fillGradient);
				n=GradientCount++;
				}
		switch(ItemArray[x].type)
			{
			case 1:
				var cx,cy,rx,ry;
				cx=(ItemArray[x].BRect.x1+ItemArray[x].BRect.x2)/2;
				rx=cx-ItemArray[x].BRect.x1;
				cy=(ItemArray[x].BRect.y1+ItemArray[x].BRect.y2)/2;
				ry=cx-ItemArray[x].BRect.y1;
				SVGTheItem+='<circle cy=" '+cy+ '" cx="' +cx+ '" rx="'+rx+ '" ry="' +ry+ '"';
				
				break;
			case 2:// rect
			case 3:// RoundRect
					{
					var x1,w,y1,h;
					x1=ItemArray[x].BRect.x1;
					y1=ItemArray[x].BRect.y1;
					w=ItemArray[x].BRect.x2-x1;
					h=ItemArray[x].BRect.y2-y1;
					SVGTheItem+='<rect y="'+y1+'" x="'+x1+'" height="'+h+'"	width="'+w+'"';
					if(ItemArray[x].type==3)
						{
						w=ItemArray[x].BRect.rx;
						h=ItemArray[x].BRect.ry;
						SVGTheItem+=' rx="'+w+'" ry="'+h+'"';
						}
					//SVGTheItem+="style=.."	
					//SVGTheItem+="/>"
					}
				break;
			case 4:SVGTheItem+='<path';
				SVGTheItem+="> d="+'"';
				for(y=0;y<ItemArray[x].points.length;y++)
					{
					var h=ItemArray[x].points[y];
					switch(h.type)
						{
						case 0:SVGTheItem+=" M "+h.x+ " " + h.y;break;
						case 1:SVGTheItem+=" L "+h.x+ " " + h.y;break;
						case 2:SVGTheItem+=" C "+h.x1+ " " + h.y1 +" "+ h.x2+ " " + h.y2 + " " +h.x+ " " + h.y ;break;
						}
					}
				if(ItemArray[x].closed)
				SVGTheItem+=' z';
				SVGTheItem+='"';
				break;
			default: continue;
			}
			
		//style then 
		 var style_text="";
		switch(ItemArray[x].fillType)
				{
				case 0:style_text+=" fill:none;";break;
				case 1:style_text+=" fill:"+ RgbToString(ItemArray[x].fill[0],ItemArray[x].fill[1],ItemArray[x].fill[2])+";";break;
				case 2:
				case 3:style_text+=" fill:url(#gradient"+n+");";break;
				}
		switch(ItemArray[x].strokeType)
				{
				case 0:style_text+=" stroke:none;"; break;
				case 1:style_text+=" stroke:"+ RgbToString(ItemArray[x].stroke[0],ItemArray[x].stroke[1],ItemArray[x].stroke[2])+";";
				       
						break;
				case 2:
				case 3:style_text+=" stroke:url(#gradient"+m+");";break;
				}
		if(ItemArray[x].strokeType)
			style_text+=" stroke-width:"+ItemArray[x].strokeWidth+";";
		SVGTheItem+="  style='" +style_text+"'";
		SVGTheItem+="/>";
		while(y2)
			{
			SVGTheItem+="</g>";
			y2--;
			}
			
		}
	SVGSVG+=SVGdef+"</defs>"+SVGTheItem+"</svg>";	

	SVGSVG=SVGSVG.replace(/</g,"\r\n<");
	CopyToClipboard(SVGSVG);
	y2=1;
	return;
	function addLinear(cc)
			{
			//var SVGdef="<defs>"
			SVGdef+="<linearGradient id='gradient"+GradientCount+"'";
			SVGdef+=" x1='"+cc.x1+"'";
			SVGdef+=" x2='"+cc.x2+"'";
			SVGdef+=" y1='"+cc.y1+"'";
			SVGdef+=" y2='"+cc.y2+"'>";
			Add_stop(cc.stop);
			SVGdef+="</linearGradient>";
			}
	function addRadial(cc)
			{
			SVGdef+="<radialGradient id='gradient"+GradientCount+"'";
			SVGdef+=" fx='"+cc.fx+"'";
			SVGdef+=" fy='"+cc.fy+"'";
			SVGdef+=" cx='"+cc.fx+"'";
			SVGdef+=" cy='"+cc.fy+"'";
			SVGdef+=" r='"+cc.r+"'>";
			Add_stop(cc.stop);
			SVGdef+="</radialGradient>";
			}
	function Add_stop(cc)
			{
			for(var j=0;j<cc.length;j++)
			SVGdef+="<stop offset="+cc[j].offset+" style='stop-color:"+RgbToString(cc[j].colorR,cc[j].colorG,cc[j].colorB)+";stop-opacity:"+cc[j].opacity+ ";'/> ";
			}
	
	}