I am trying to overlay/add flags to some of the origianal charting components. What I am aiming at is something like what can be found on google analytics (http://finance.google.com/finance?cid=4112)...
My hack attempt at doing so, was to redefine the plotrenderer....so that it changed each of it's dataitems to a sprite and named it. I would then be able to address each dataItem (by way of the getChildByName-method) and populate it with data (when you press the flag a datagrid pops out displaying relevant data). I would then overlay a lineseries with an invisible plotseries. The latter only containing datapoints where i wanted the tags. But it really cannot be the way to do it,...besides i am having trouble getting the graph to clean up the previous set flags when the data changes. Does any one know a way to do this. Addressing each datapoint specifically? I tried the datatoLocal but since I have to vertical axii and my horizontal contains months i cannot address it like (400,300). Enclosing the code: #### the class <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="vv()" layout="absolute" backgroundColor="#FFFFFF" backgroundAlpha="0.0"> <mx:Style> .shd { dropShadow: false; } </mx:Style> <mx:Script> <![CDATA[ import Renderers.FlagRenderer; import mx.charts.PlotChart; import mx.charts.HitData; import mx.graphics.IStroke; import mx.core.*; import flash.text.*; import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.*; import flash.text.TextField; import mx.charts.events.ChartItemEvent; import mx.charts.series.items.LineSeriesItem; import mx.charts.series.items.LineSeriesSegment; import mx.graphics.*; import Renderers.CycleColorRenderer; private var inhale:XML = new XML(); private var rq:URLRequest = new URLRequest(); private var ld:URLLoader = new URLLoader(); [Bindable] private var goalArr:Array= new Array(); [Bindable] private var annoArr:Array= new Array(); [Bindable] private var dataP:Array= new Array(); private var ff:Number=1; private var s:Stroke=new Stroke(0x000000, 11,1); public var gg:String="here"; private var flagLine:Sprite; private var started:Sprite; private var changed:Sprite; private var ended:Sprite; private var opener:String="not"; private var flagobj:Object; private var linWidth:Number=929; private var dgWidth:Number=300; private var base:String; private var vvf:Number=0; [Bindable] private var cards:Array = [{label:"Clicks vs. Total Conversions", where:"testgraph.xml"}, {label:"Clicks vs. Page Views", where:"testgraph2.xml"}, {label:"Clicks vs. Conversion Rate", where:"testgraph3.xml"},{label:"Clicks vs. Profit", where:"testgraph4.xml"}]; // private var base:String="flash"; //Application.application.url; private var cards2:Array = [{label:"Clicks vs. total conversions", where: base+"parameter1=clicks¶meter2=conversions"}, {label:"Media spend vs. revenue", where:base+"parameter1=cost¶meter2=revenue"}, {label:"Media spend vs. profit", where:base+"parameter1=cost¶meter2=profit"}, {label:"New visitors vs. returning visitors", where:base+"parameter1=newvisitors¶meter2=returningvisitors"}, {label:"Unique clicks vs. conversion rate", where:base+"parameter1=uniqueclicks¶meter2=conversionrate"}, {label:"Unique clicks vs. average page views", where:base+"parameter1=uniqueclicks¶meter2=averagepageviews"}, {label:"Cost per action vs. average order value", where:base+"parameter1=costperaction¶meter2=averageordervalue"}, {label:"Cost per click vs. average click order value", where:base+"parameter1=costperclick¶meter2=averageclickordervalue"}, ]; public function vv():void{ var spr:Sprite=new Sprite(); //spr.graphics.beginFill(0xFF0000,1); //spr.graphics.drawCircle(20,20,20); //spr.name="ff"; //this.addChild(spr); //delete parent.getChildByName("ff"); //trace(parent.getChildByName("ff")); postFlux(); } public function postFlux():void{ base=Application.application.url.toString(); if(Application.application.parameters.xml==null){ rq.url="testgraph.xml"; } else { rq.url=Application.application.parameters.xml; } ld.addEventListener(Event.COMPLETE, parX); ld.load(rq); } public function parX(whatever:Event):void { inhale = XML(ld.data); var howmany:int=inhale.goalspan.child("*").length(); var a:Array=new Array(); annoArr.length=0; for(var i:int=0;i<howmany;i++) { goalArr[i] = {achieved: [EMAIL PROTECTED]"achieved"], goal: [EMAIL PROTECTED]"goal"], time: [EMAIL PROTECTED]"time"]} var attr:XMLList=inhale.goalspan.plot[i].child("flagtivities"); if(attr.hasOwnProperty("flag")) { flagobj=sortAnnotations(attr); if(flagobj.length!=0){ annoArr.push({annotated: flagobj, goal: [EMAIL PROTECTED]"goal"], time: [EMAIL PROTECTED]"time"]}); //trace("Starts"); } } else { flagobj=null; } } dataG.visible=false; } public function sortAnnotations(attr:XMLList):Object{ //hvor mange flag er der var viff:Number=attr.child("flag").length(); var startarray:Array=new Array(); var changearray:Array=new Array(); var endarray:Array=new Array(); for (var q:Number=0; q<viff; q++){ var typeflag:[EMAIL PROTECTED]"type"]; if (typeflag=="changed"){ //hvor mange aktiviteter har det enkelte flag var antalaktiviteter:Number=attr.flag[q].child("*").length(); // trace("antal"+antalaktiviteter); for(var r:Number=0; r<antalaktiviteter; r++){ var activity:Object=new Object(); var nm:[EMAIL PROTECTED]"name"]; var tp:[EMAIL PROTECTED]"type"]; var ch:[EMAIL PROTECTED]"change"]; activity={name: nm, type: tp, change: ch}; changearray.push(activity); } } if (typeflag=="started"){ //hvor mange aktiviteter har det enkelte flag var antalaktiviteter:Number=attr.flag[q].child("*").length(); // trace("antal"+antalaktiviteter); for(var r:Number=0; r<antalaktiviteter; r++){ var activity:Object=new Object(); var nm:[EMAIL PROTECTED]"name"]; var tp:[EMAIL PROTECTED]"type"]; activity={name: nm, type: tp}; startarray.push(activity); } } if (typeflag=="ended"){ //hvor mange aktiviteter har det enkelte flag var antalaktiviteter:Number=attr.flag[q].child("*").length(); // trace("antal"+antalaktiviteter); for(var r:Number=0; r<antalaktiviteter; r++){ var activity:Object=new Object(); var nm:[EMAIL PROTECTED]"name"]; var tp:[EMAIL PROTECTED]"type"]; activity={name: nm, type: tp}; endarray.push(activity); } } } var annotObj:Object=new Object(); annotObj={starts: startarray, changes: changearray, ends: endarray}; return annotObj; } public function not(clr1:uint,clr2:uint,clr3:uint):void { vvf+=1; var hvormange:Number=annoArr.length; var dia:Number=8; for(var i:Number=0; i<hvormange; i++){ trace("ii2ii"+i); var v:Sprite=new Sprite(); v.graphics.clear(); v.name="starts"; var s:Sprite=new Sprite(); s.graphics.clear(); s.name="changes"; var t:Sprite=new Sprite(); t.graphics.clear(); t.name="ends"; var up:Number=0; var incr:Number=-10; var floatabv:Number=3; if(annoArr[i].annotated.starts.length!=0){ fyldOp(v,clr1,up,dia,floatabv); up+=incr; } if(annoArr[i].annotated.changes.length!=0){ fyldOp(s,clr2,up,dia,floatabv); up+=incr; } if(annoArr[i].annotated.ends.length!=0){ fyldOp(t,clr3,up,dia,floatabv); } var comb:Sprite=plots.parent.getChildByName(i.toString()) as Sprite; //i.toString())); // as Sprite; //trace("name::"+comb.name); //trace(comb.numChildren); //trace("code:"+plots.parent.getChildByName(i.toString()).name); trace(comb); comb.addChild(v); comb.addChild(s); comb.addChild(t); v.buttonMode=true; s.buttonMode=true; t.buttonMode=true; v.addEventListener("click",showActive); s.addEventListener("click",showActive); t.addEventListener("click",showActive); } //plots.parent.removeChildAt(4); //plots.removeChild(plots.getChildByName("2"i.toString())); //+"|"+memoryPlot+"|"+hvormange); /*if(memoryPlot>hvormange){ for(var i:Number=hvormange; i<memoryPlot; i++){ trace("I trim it "+i+"ce"); // plots.removeChild(plots.getChildByName(i.toString())); } } memoryPlot=hvormange;*/ dataG.height=linechart.height-7; } public function showActive(e:Event):void{ var n:Number=Number(e.currentTarget.parent.name); setDataProvider(dataP, annoArr,e.currentTarget.name.toString(),n); } public function setDataProvider(dataP:Array,sortSource:Array,a_type:String,index:Number):void{ var tst:String=a_type+index.toString(); if(tst==opener){ combo.x=linWidth-combo.width-10; opener="not"; linechart.width=linWidth; dataG.visible=false; } else{ combo.x=linWidth-dgWidth-combo.width-10; opener=tst; linechart.width=linWidth-dgWidth; dataG.visible=true; dataG.x=linechart.width; } if(a_type=="starts"){ dataP.length=0; for(var i:Number=0; i<sortSource[index].annotated.starts.length; i++){ datagridChange.visible=false; dataP.push({name: sortSource[index].annotated.starts[i].name, type: sortSource[index].annotated.starts[i].type}); } dataG.dataProvider=dataP; } if(a_type=="changes"){ dataP.length=0; for(var i:Number=0; i<sortSource[index].annotated.changes.length; i++){ datagridChange.visible=true; dataP.push({name: sortSource[index].annotated.changes[i].name, type: sortSource[index].annotated.changes[i].type, change: sortSource[index].annotated.changes[i].change}); } dataG.dataProvider=dataP; } if(a_type=="ends"){ dataP.length=0; for(var i:Number=0; i<sortSource[index].annotated.ends.length; i++){ datagridChange.visible=false; dataP.push({name: sortSource[index].annotated.ends[i].name, type: sortSource[index].annotated.ends[i].type}); } dataG.dataProvider=dataP; } } public function fyldOp(v:Sprite,clr:uint,incr:Number,dia:Number,floatabv:Number):void{ var x_r:Number=0; var y_r:Number=-floatabv+incr; v.graphics.clear(); v.graphics.beginFill(clr,1); v.graphics.lineStyle(0,0,0); v.graphics.moveTo(x_r,y_r); v.graphics.lineTo(x_r,y_r-dia); v.graphics.lineTo(x_r+dia,y_r-dia*.5*vvf); v.graphics.lineTo(x_r,y_r); v.graphics.endFill(); } public function comboCha(ev:flash.events.Event):void{ var toExt:Number=plots.parent.numChildren; for(var i:Number=0; i<toExt+1;i++){ var nn:Sprite=Sprite(plots.parent.getChildByName(i.toString())); trace("iiii"+i) if(nn!=null){ var vvvv:Sprite=Sprite(nn.getChildByName("starts")); if(vvvv!=null){ vvvv.name="voided"; delete nn.getChildByName("voided"); } var ssss:Sprite=Sprite(nn.getChildByName("changes")); if(ssss!=null){ ssss.name="voided"; delete nn.getChildByName("voided"); } var tttt:Sprite=Sprite(nn.getChildByName("ends")); if(tttt!=null){ tttt.name="voided"; delete nn.getChildByName("voided"); } nn.name="voided"; trace("voided"+plots.parent.getChildByName("voided")); trace("voided"+plots.parent.getChildByName(i.toString())); delete plots.parent.getChildByName("voided"); //plots.parent.getChildByName(i.toString())!=null){ // plots.parent.removeChild(nn); // plots.parent.removeChildAt(i); } } rq.url=ev.target.selectedItem.where; ld.load(rq); linechart.dataProvider=goalArr; axis.dataProvider=goalArr; plots.dataProvider=annoArr; dataG.dataProvider=dataP; var aa:Array=new Array(35,300); var pp:Point=linechart.dataToLocal("33",200); linechart.graphics.lineStyle(1,0xFF0000,0.2); linechart.graphics.moveTo(0,0); linechart.graphics.lineTo(100,pp.y); trace("point"+linechart.dataToLocal("33",200)); // instanceIndices); //not(0x87f326,0xf38726,0x000000); } public function daTip(even:ChartItemEvent):String{ var ret:String=even.hitData.item.achieved+"/"+even.hitData.item.goal; return ret; } // curve, horizontal, vertical, segment, step, reverseStep ]]> </mx:Script> <mx:Fade id="wipeOut" alphaFrom=".6" alphaTo="1.0" duration="350" /> <mx:Fade id="wipeDown" alphaFrom="1.0" alphaTo="0.0" duration="300"/> <mx:LineChart id="linechart" y="28" paddingLeft="5" height="190" width="{linWidth}" paddingRight="5" dataProvider="{goalArr}" secondDataProvider="{goalArr}" showDataTips="true" dataTipFunction="daTip" styleName="shd"> <mx:seriesFilters> <mx:Array/> </mx:seriesFilters> <mx:horizontalAxis> <mx:CategoryAxis id="axis" categoryField="time"/> </mx:horizontalAxis> <mx:series> <mx:Array> <!--itemRenderer="Renderers.CycleColorRenderer"--> <mx:LineSeries name="gh" showDataEffect="{wipeOut}" resizeEffect="{wipeOut}" creationCompleteEffect="{wipeOut}" styleName="shd" id="linie1" xField="time" yField="achieved" displayName="Achieved" lineSegmentRenderer="mx.charts.renderers.LineRenderer"><mx:lineStroke> <mx:Stroke color="#669933" weight="2"/> </mx:lineStroke> </mx:LineSeries> </mx:Array> </mx:series> <mx:secondSeries> <mx:Array> <mx:LineSeries showDataEffect="{wipeOut}" resizeEffect="{wipeOut}" creationCompleteEffect="{wipeOut}" id="linie2" xField="time" yField="goal" form="segment" lineSegmentRenderer="mx.charts.renderers.LineRenderer" displayName="Goal" styleName="shd"><mx:lineStroke> <mx:Stroke color="#63c007" weight="2"/> </mx:lineStroke> </mx:LineSeries> <mx:PlotSeries interactive="true" creationComplete="not(0x870026,0x008726,0x268700);" id="plots" name="changes" dataProvider="{annoArr}" itemRenderer="Renderers.FlagRenderer" xField="time" yField="goal"/> <!--creationComplete="not(0x87f326,0xf38726,0x2687f3);" --> </mx:Array> </mx:secondSeries> </mx:LineChart> <mx:ComboBox id="combo" dataProvider="{cards}" width="200" x="{linWidth-220}" change="comboCha(event);" /> <mx:DataGrid id="dataG" showEffect="{wipeOut}" hideEffect="{wipeDown}" dataProvider="{dataP}" width="{dgWidth}"> <mx:columns> <mx:Array> <mx:DataGridColumn dataField="name" headerText="Name"/> <mx:DataGridColumn dataField="type" headerText="Type"/> <mx:DataGridColumn id="datagridChange" dataField="change" headerText="Change"/> </mx:Array> </mx:columns> </mx:DataGrid> <!--mx:Button click="changeArr()" label="change"/--> </mx:Application> #### the redefined renderer package Renderers{ // Empty package. import mx.charts.series.items.PlotSeriesItem; import mx.charts.chartClasses.*; import mx.charts.PlotChart; import mx.skins.ProgrammaticSkin; import mx.core.IDataRenderer; import flash.display.Graphics; import flash.display.Sprite; public class FlagRenderer extends mx.skins.ProgrammaticSkin implements IDataRenderer { private var colors:Array = [0xFF0000,0x00FF00,0x0000FF]; private var _chartItem:PlotSeriesItem; public var flag:Sprite=new Sprite(); public var communicate_out:String; public function FlagRenderer() { // Empty constructor. } public function get data():Object { return _chartItem; } public function set data(value:Object):void { _chartItem = value as PlotSeriesItem; invalidateDisplayList(); } override protected function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); var g:Graphics = graphics; g.clear(); flag.x=_chartItem.x; flag.y=_chartItem.y; flag.name=_chartItem.index.toString(); // _chartItem.element.name+_chartItem.index.toString(); flag.graphics.clear(); flag.graphics.beginFill(colors[(_chartItem == null)? 0:_chartItem.index]); flag.graphics.drawCircle(0,0,3); trace(_chartItem.x+" :x|y: "+_chartItem.y +"||"+_chartItem.index); trace(flag.name); trace("name"+_chartItem.element.parent.name); _chartItem.element.parent.addChild(flag); trace("sti"+_chartItem.element.name); //itemRenderer.parent.parent.parent.parent.parent.alpha=0.2; // communicate_out=_chartItem.x.toString(); //g.drawRect(0, 0, 1, 1); //g.endFill(); } } // Close class. } // Close package. ### the xml: testgraph.xml <?xml version="1.0" encoding="utf-8" ?> <goal type="conversion" typeabbr="con"> <goalspan type="Week"> <plot achieved="17.5" goal="115" time="34"/> <plot achieved="17.5" goal="115" time="36"> <flagtivities> <flag type="started"> <activity name="Skinner Campaign 3" type="PPC"/> <activity name="MSN 3" type="Banner"/> <activity name="Newsletter 3" type="Email"/> <activity name="Helix Hotel Dublin 3" type="PPC"/> <activity name="Hotel London 3" type="PPC"/> <activity name="CNN 3" type="Banner"/> <activity name="Travel.com 3" type="Affiliate"/> <activity name="Hotel New York 3" type="PPC"/> <activity name="Cnet 3" type="Banner"/> </flag> <flag type="changed"> <activity name="Campaign Summer" type="PPC" change="Cost"/> <activity name="MSN" type="Banner" change="Creative"/> <activity name="Newsletter" type="Email" change="Duration"/> <activity name="Hannah Hotel Dublin" type="PPC" change="Keywords"/> <activity name="Hotel London" type="PPC" change="Cost"/> <activity name="CNN" type="Banner" change="Creative"/> <activity name="Travel.com" type="Affiliate" change="Duration"/> <activity name="Hotel New York" type="PPC" change="Keywords"/> <activity name="Cnet" type="Banner" change="Creative"/> </flag> <flag type="ended"> <activity name="Twister Campaign 2" type="PPC"/> <activity name="MSN 2" type="Banner"/> <activity name="Newsletter 2" type="Email"/> <activity name="Hotel Dublin 2" type="PPC"/> <activity name="Hostile Hotel London 2" type="PPC"/> <activity name="CNN 2" type="Banner"/> <activity name="Travel.com 2" type="Affiliate"/> <activity name="Hotel New York 2" type="PPC"/> <activity name="Cnet 2" type="Banner"/> </flag> <blag>djf</blag> </flagtivities> </plot> <plot achieved="12.5" goal="105" time="37"/> <plot achieved="10" goal="405" time="38"><flagtivities> <flag type="started"> <activity name="Skinner Campaign 3" type="PPC"/> <activity name="MSN 3" type="Banner"/> <activity name="Newsletter 3" type="Email"/> <activity name="Huntel Dublin 3" type="PPC"/> <activity name="Hotel London 3" type="PPC"/> <activity name="CNN 3" type="Banner"/> <activity name="Travel.com 3" type="Affiliate"/> <activity name="Hotel New York 3" type="PPC"/> <activity name="Cnet 3" type="Banner"/> </flag></flagtivities></plot> <plot achieved="12.5" goal="410" time="39"/> <plot achieved="17.5" goal="310" time="40"> <flagtivities> <flag type="started"> <activity name="Skinner Campaign 3" type="PPC"/> <activity name="MSN 3" type="Banner"/> <activity name="Newsletter 3" type="Email"/> <activity name="Robotel Dublin 3" type="PPC"/> <activity name="Hotel London 3" type="PPC"/> <activity name="CNN 3" type="Banner"/> <activity name="Travel.com 3" type="Affiliate"/> <activity name="Hotel New York 3" type="PPC"/> <activity name="Cnet 3" type="Banner"/> </flag> <flag type="changed"> <activity name="Political Campaign" type="PPC" change="Cost"/> <activity name="MSN" type="Banner" change="Creative"/> <activity name="Newsletter" type="Email" change="Duration"/> <activity name="Hottle Dublin" type="PPC" change="Keywords"/> <activity name="Hotel London" type="PPC" change="Cost"/> <activity name="CNN" type="Banner" change="Creative"/> <activity name="Travel.com" type="Affiliate" change="Duration"/> <activity name="Hotel New York" type="PPC" change="Keywords"/> <activity name="Cnet" type="Banner" change="Creative"/> </flag> <flag type="ended"> <activity name="Twister Campaign 2" type="PPC"/> <activity name="MSN 2" type="Banner"/> <activity name="Newsletter 2" type="Email"/> <activity name="Hotel Dublin 2" type="PPC"/> <activity name="Hostile Hotel London 2" type="PPC"/> <activity name="CNN 2" type="Banner"/> <activity name="Travel.com 2" type="Affiliate"/> <activity name="Hotel New York 2" type="PPC"/> <activity name="Cnet 2" type="Banner"/> </flag> </flagtivities> </plot> <plot achieved="15" goal="-210" time="41"/> <plot achieved="17.5" goal="-110" time="42"/> <plot achieved="-15" goal="-100" time="43"/> </goalspan> </goal> ### the xml: testgraph2.xml <?xml version="1.0" encoding="utf-8" ?> <goal type="conversion" typeabbr="con"> <goalspan type="Week"> <plot achieved="900317.5" goal="90115" time="34"/> <plot achieved="90217.5" goal="19015" time="36"> <flagtivities> <flag type="started"> <activity name="Skinner Campaign 3" type="PPC"/> <activity name="MSN 3" type="Banner"/> <activity name="Newsletter 3" type="Email"/> <activity name="Helix Hotel Dublin 3" type="PPC"/> <activity name="Hotel London 3" type="PPC"/> <activity name="CNN 3" type="Banner"/> <activity name="Travel.com 3" type="Affiliate"/> <activity name="Hotel New York 3" type="PPC"/> <activity name="Cnet 3" type="Banner"/> </flag> <flag type="changed"> <activity name="Campaign Summer" type="PPC" change="Cost"/> <activity name="MSN" type="Banner" change="Creative"/> <activity name="Newsletter" type="Email" change="Duration"/> <activity name="Hannah Hotel Dublin" type="PPC" change="Keywords"/> <activity name="Hotel London" type="PPC" change="Cost"/> <activity name="CNN" type="Banner" change="Creative"/> <activity name="Travel.com" type="Affiliate" change="Duration"/> <activity name="Hotel New York" type="PPC" change="Keywords"/> <activity name="Cnet" type="Banner" change="Creative"/> </flag> <flag type="ended"> <activity name="Twister Campaign 2" type="PPC"/> <activity name="MSN 2" type="Banner"/> <activity name="Newsletter 2" type="Email"/> <activity name="Hotel Dublin 2" type="PPC"/> <activity name="Hostile Hotel London 2" type="PPC"/> <activity name="CNN 2" type="Banner"/> <activity name="Travel.com 2" type="Affiliate"/> <activity name="Hotel New York 2" type="PPC"/> <activity name="Cnet 2" type="Banner"/> </flag> <blag>djf</blag> </flagtivities> </plot> <plot achieved="10012.5" goal="10905" time="37"/> <plot achieved="18830" goal="90405" time="38"><flagtivities> <flag type="started"> <activity name="Skinner Campaign 3" type="PPC"/> <activity name="MSN 3" type="Banner"/> <activity name="Newsletter 3" type="Email"/> <activity name="Huntel Dublin 3" type="PPC"/> <activity name="Hotel London 3" type="PPC"/> <activity name="CNN 3" type="Banner"/> <activity name="Travel.com 3" type="Affiliate"/> <activity name="Hotel New York 3" type="PPC"/> <activity name="Cnet 3" type="Banner"/> </flag> <flag type="changed"> <activity name="Political Campaign" type="PPC" change="Cost"/> <activity name="MSN" type="Banner" change="Creative"/> <activity name="Newsletter" type="Email" change="Duration"/> <activity name="Hottle Dublin" type="PPC" change="Keywords"/> <activity name="Hotel London" type="PPC" change="Cost"/> <activity name="CNN" type="Banner" change="Creative"/> <activity name="Travel.com" type="Affiliate" change="Duration"/> <activity name="Hotel New York" type="PPC" change="Keywords"/> <activity name="Cnet" type="Banner" change="Creative"/> </flag> </flagtivities></plot> <plot achieved="212555.5" goal="41090" time="39"/> <plot achieved="174441.5" goal="31900" time="40"> <flagtivities> <flag type="started"> <activity name="Skinner Campaign 3" type="PPC"/> <activity name="MSN 3" type="Banner"/> <activity name="Newsletter 3" type="Email"/> <activity name="Robotel Dublin 3" type="PPC"/> <activity name="Hotel London 3" type="PPC"/> <activity name="CNN 3" type="Banner"/> <activity name="Travel.com 3" type="Affiliate"/> <activity name="Hotel New York 3" type="PPC"/> <activity name="Cnet 3" type="Banner"/> </flag> </flagtivities> </plot> <plot achieved="155553" goal="-21900" time="41"/> <plot achieved="17333.25" goal="-19010" time="42"/> <plot achieved="-114445" goal="-90100" time="43"/> </goalspan> </goal> and so on....... ------------------------ Yahoo! Groups Sponsor --------------------~--> Home is just a click away. Make Yahoo! your home page now. http://us.click.yahoo.com/DHchtC/3FxNAA/yQLSAA/nhFolB/TM --------------------------------------------------------------------~-> -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/flexcoders/ <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/

