<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.componentart.com/BLOGS/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Bojan Jovanovic</title><subtitle type="html">... and the program ran happily ever after.</subtitle><id>http://www.componentart.com/BLOGS/bojan/atom.aspx</id><link rel="alternate" type="text/html" href="http://www.componentart.com/BLOGS/bojan/default.aspx" /><link rel="self" type="application/atom+xml" href="http://www.componentart.com/BLOGS/bojan/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61019.2">Community Server</generator><updated>2008-07-14T12:17:00Z</updated><entry><title>WebChart View Angle Chooser Control: Client-Side 3D Rendering</title><link rel="alternate" type="text/html" href="http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx" /><id>http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx</id><published>2008-07-23T02:57:00Z</published><updated>2008-07-23T02:57:00Z</updated><content type="html">View Angle Chooser is a UI control that comes included with the Charting 2008.1 product. It displays three sides of a rectangular box which can be rotated using a mouse to select the best chart viewing angle. Check out the &lt;a href="http://www.componentart.com/charting/gallery/samples/ajax/toolbar/" target="_blank"&gt;&lt;font color="#ff0000"&gt;Charting toolbar demo&lt;/font&gt;&lt;/a&gt; to see it in action. &lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align:center;"&gt;
&lt;img align="middle" height="175" src="http://www.componentart.com/blogs/bojan/images/ViewAngleChooser.PNG" width="154" /&gt;
&lt;/div&gt;
&lt;br /&gt;
In this post I will explain how it was implemented. The challenge was to efficiently draw 2D shapes (which represent projected 3D surfaces) using only standard DHTML technologies: HTML, JavaScript, CSS and DOM. There is no standard JavaScript library for drawing shapes, and the ones that do exist are highly inefficient, potentially requiring 100s of div elements.&lt;br /&gt;
&lt;br /&gt;
We followed a trick outlined on &lt;a href="http://www.uselesspickles.com/triangles/demo.html" target="_blank"&gt;&lt;font color="#ff0000"&gt;www.uselesspickles.com&lt;/font&gt;&lt;/a&gt; which allowed us to draw horizontal or vertical right angle triangles using div elements. &lt;br /&gt;
&lt;br /&gt;
The idea is to color one of the border edges of a div element and make an adjacent border edge transparent. The width of the other two border edges should be set to zero as well as the width and the height of the div itself.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;&amp;nbsp; &amp;lt;div style='width: 0px; height: 0px; border-left: 0px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-bottom: 0px; border-top: #ff0000 50px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-right: transparent 100px solid;&amp;#39;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
A triangle produced by the above code looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align:center;"&gt;
&lt;img height="122" src="http://www.componentart.com/blogs/bojan/images/RightAngleTriangle.PNG" width="218" /&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
The other three right angle triangles can be drawn similarly. To draw a triangle of any size and orientation we need to subdivide it into constituent vertical or horizontal right angle triangles. A possible subdivision for the following triangle looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align:center;"&gt;
&lt;img height="180" src="http://www.componentart.com/blogs/bojan/images/Triangle.PNG" width="216" /&gt;
&lt;/div&gt;
&lt;br /&gt;
Not all triangles can be divided into a finite number of constituent right angle triangles as seen in the above figure. In that case, the subdivision can be stopped after the desired level of detail has been reached.&lt;br /&gt;
&lt;br /&gt;
Our first attempt at subdividing the sides of a rectangular box involved dividing each quadrilateral side of the box along the diagonal into two triangles and subsequently dividing each of the resultant triangles in turn. This is what such a subdivision might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align:center;"&gt;
&lt;img align="middle" height="284" src="http://www.componentart.com/blogs/bojan/images/FirstSubdivision.PNG" width="307" /&gt;
&lt;/div&gt;
&lt;br /&gt;
White dots started appearing from imperfect alignment where two triangles are joined along the hypotenuse. To eliminate that effect and to decrease the number of triangles we changed our subdivision method to first select the largest horizontal or vertical rectangle that can be inscribed inside of the quadrilateral side. One rectangle and four triangles are produced. The rectangle can then be drawn with a simple div while the triangles are subdivided the normal way. This is what such a subdivision might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align:center;"&gt;
&lt;img height="284" src="http://www.componentart.com/blogs/bojan/images/SecondSubdivision.PNG" width="307" /&gt;
&lt;/div&gt;
&lt;br /&gt;
Notice that no two triangles are joined along the hypotenuse.&lt;br /&gt;
&lt;br /&gt;
The following drawing shows the View Angle Chooser rectangular box with each of the constituent rectangles and triangles drawn with a different shade:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align:center;"&gt;
&lt;img height="249" src="http://www.componentart.com/blogs/bojan/images/Subdivision1.PNG" width="224" /&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
When drawing 2D triangles using this technique keep the following browser incompatibilities in mind:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Internet Explorer 6&lt;/strong&gt; &amp;ndash; Transparency is not supported, but you can use the chroma filter and choose one color to be transparent. Your triangle divs will be of the following form:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;&amp;nbsp; &amp;lt;div style='filter:chroma(color=#abcdef);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 0px; height: 0px; border-left: 0px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-bottom: 0px; border-top: #ff0000 50px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-right: #abcdef 100px solid;&amp;#39;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;strong&gt;Opera (any version)&lt;/strong&gt; &amp;ndash; Divs are at least as high as the current font, so there might be a problem drawing small triangles. To get around this problem do the following:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;&amp;nbsp; &amp;lt;div style='line-height: 0px; font-size: 0px;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; width: 0px; height: 0px; border-left: 0px;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-bottom: 0px; border-top: #ff0000 50px solid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; border-right: transparent 100px solid;&amp;#39;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Interestingly, this control looks best in Firefox 3.0 because it is automatically anti-aliased while it renders the fastest in Safari 3.1.&lt;br /&gt;
&lt;br /&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx&amp;amp;;subject=WebChart+View+Angle+Chooser+Control%3a+Client-Side+3D+Rendering" target="_blank" title = "Post http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx&amp;amp;;title=WebChart+View+Angle+Chooser+Control%3a+Client-Side+3D+Rendering" target="_blank" title = "Post http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx&amp;amp;title=WebChart+View+Angle+Chooser+Control%3a+Client-Side+3D+Rendering" target="_blank" title = "Post http://www.componentart.com/BLOGS/bojan/archive/2008/07/22/view-angle-chooser-control-client-side-3d-rendering.aspx"&gt;reddit!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/BLOGS/aggbug.aspx?PostID=20829" width="1" height="1"&gt;</content><author><name>Bojan</name><uri>http://www.componentart.com/BLOGS/members/Bojan.aspx</uri></author><category term="Client-side API" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/Client-side+API/default.aspx" /><category term="JavaScript" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/JavaScript/default.aspx" /><category term="Charting" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/Charting/default.aspx" /><category term="WebChart" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/WebChart/default.aspx" /><category term="3D" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/3D/default.aspx" /></entry><entry><title>Drilling deeper into the Charting client-side API</title><link rel="alternate" type="text/html" href="http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx" /><id>http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx</id><published>2008-07-14T19:17:00Z</published><updated>2008-07-14T19:17:00Z</updated><content type="html">&lt;p&gt;ComponentArt Charting 2008.1 introduces an easy way for end users to customize the look and feel of charts. This is accomplished through a JavaScript client-side API. &lt;a href="http://www.componentart.com/charting/gallery/samples/ajax/toolbar/" target="_blank"&gt;&lt;font color="#ff0000"&gt;Charting toolbar demo&lt;/font&gt;&lt;/a&gt; in ComponentArt&amp;rsquo;s new &lt;a href="http://www.componentart.com/charting/gallery/" target="_blank"&gt;&lt;font color="#ff0000"&gt;Charting gallery&lt;/font&gt;&lt;/a&gt; shows how this can be done.&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;img align="middle" height="338" src="http://www.componentart.com/blogs/bojan/images/ToolbarDemo.PNG" width="510" /&gt;
&lt;/div&gt;
&lt;br /&gt;

&lt;p&gt;The toolbar demo allows the end user change the following properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chart type&lt;/li&gt;

&lt;li&gt;Color scheme&lt;/li&gt;

&lt;li&gt;Orientation&lt;/li&gt;

&lt;li&gt;View angle&lt;/li&gt;

&lt;li&gt;Projection&lt;/li&gt;

&lt;li&gt;Perspective&lt;/li&gt;

&lt;li&gt;XY, YZ and ZX plane visibility&lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;Legend visibility&lt;/li&gt;

&lt;li&gt;Series order&lt;/li&gt;

&lt;li&gt;Series highlighting&lt;/li&gt;

&lt;li&gt;Choice of rendering engines, high-quality or high-speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These properties are accessed via a ComponentArt Web.UI ToolBar control.&lt;/p&gt;

&lt;p&gt;Properties with an on/off state, such as the visibility of the XY, YZ and ZX planes and the visibility of the legend, are implemented using toolbar buttons directly.&lt;/p&gt;

&lt;p&gt;Properties that have several options, such as chart type, color scheme, orientation, projection, series order, series highlighting and the engine selection, use Web.UI Menu controls connected to their corresponding toolbar buttons.&lt;/p&gt;

&lt;p&gt;The perspective property uses a Web.UI ComboBox control embedded in the ToolBar.&lt;/p&gt;

&lt;div style="text-align:center;"&gt;
&lt;img height="175" src="http://www.componentart.com/blogs/bojan/images/ViewAngleChooser.PNG" width="154" /&gt;
&lt;/div&gt;

&lt;p&gt;View Angle Chooser is a custom control implemented entirely in JavaScript. It is packaged with the WebChart assembly and can be used in your application separately from the toolbar demo.&amp;nbsp; &lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;The control must be enabled on the server before it is used:
&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ C# ]&lt;br /&gt;targetChart.Clientside.ViewAngleChooserEnabled = true;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;
&lt;br /&gt;
The HTML code that this control generates is obtained by calling the &lt;a href="http://www.componentart.com/docs/default.aspx?content=WebChart/ComponentArt.Charting~WebChart_GetViewAngleChooserHTML_method.htm" target="_blank"&gt;&lt;font color="#ff0000"&gt;GetViewAngleChooserHTML()&lt;/font&gt;&lt;/a&gt; method of the WebChart JavaScript object: &lt;br /&gt;&lt;/p&gt;&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ JavaScript ]&lt;br /&gt;WebChart1.GetViewAngleChooserHTML();&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
Position, sizes and colors can be customized. The View Angle Chooser control will be discussed in more depth in a future blog post.
&lt;/p&gt;
&lt;p&gt;WebChart&amp;rsquo;s client-side API must also be enabled on the server before it is used. This was accomplished by setting the Clientside.ClientsideApiEnabled property to true. After the API is enabled it can be accessed through a JavaScript object whose name is the UniqueID property of the WebChart.&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ C# ]&lt;br /&gt;targetChart.Clientside.ClientsideApiEnabled = true;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;The chart properties are accessed through the getter and setter methods:&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ JavaScript ]&lt;br /&gt;WebChart1.set_mainChartType(&amp;quot;AreaSmooth&amp;quot;);&lt;br /&gt;WebChart1.set_colorPalette(&amp;quot;Organic&amp;quot;);&lt;br /&gt;WebChart1.set_legendVisibility(true);&lt;br /&gt;WebChart1.set_planeXYVisible(false);&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;
&lt;br /&gt;
To refresh the chart, after the properties have been set, the refresh method needs to be called. 
&lt;/p&gt;&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ JavaScript ]&lt;br /&gt;WebChart1.refresh();&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;There are two ways in which the refresh method can function: an AJAX callback, or a traditional postback. This can be selected in the server-side code.&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ C# ]&lt;br /&gt;WebChart1.Clientside.RefreshMethod = ClientsideRefreshMethod.Callback;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;In our demo, the refresh method is not called explicitly because the AutoRenderOnChange property is set to true in the server-side code. This will cause a refresh to happen automatically after any client-side property has been changed.&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ C# ]&lt;br /&gt;WebChart1.Clientside.AutoRenderOnChange = true;&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;Client-side customization is not limited to just these properties. In fact any property in your web application, chart related or not, can be customized through the client-side API. This can be accomplished using custom properties:&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ JavaScript ]&lt;br /&gt;ComponentArt.Charting.WebChart.set_customProperty(name, value);&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;To retrieve the value of the custom property in the server-side code call:&lt;/p&gt;
&lt;div style="border:1px solid #808080;padding:10px;font-family:courier new;background-color:#e5e5e5;text-align:left;"&gt;
&lt;pre&gt;[ C# ]&lt;br /&gt;public string GetCustomProperty(string key);&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;Once the custom property value is retrieved you can do anything with it, such as modify any aspect of the chart or effect a change in another part of the application. See the &lt;a href="http://www.componentart.com/charting/gallery/samples/ajax/drilldown/" target="_blank"&gt;&lt;font color="#ff0000"&gt;Drill-down demo&lt;/font&gt;&lt;/a&gt; for an example of how custom properties are used.
&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx&amp;amp;;subject=Drilling+deeper+into+the+Charting+client-side+API" target="_blank" title = "Post http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx&amp;amp;;title=Drilling+deeper+into+the+Charting+client-side+API" target="_blank" title = "Post http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx&amp;amp;title=Drilling+deeper+into+the+Charting+client-side+API" target="_blank" title = "Post http://www.componentart.com/BLOGS/bojan/archive/2008/07/14/drilling-deeper-into-the-charting-client-side-api.aspx"&gt;reddit!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.componentart.com/BLOGS/aggbug.aspx?PostID=20600" width="1" height="1"&gt;</content><author><name>Bojan</name><uri>http://www.componentart.com/BLOGS/members/Bojan.aspx</uri></author><category term="Client-side API" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/Client-side+API/default.aspx" /><category term="JavaScript" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/JavaScript/default.aspx" /><category term="Charting" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/Charting/default.aspx" /><category term="AJAX" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/AJAX/default.aspx" /><category term="ToolBar" scheme="http://www.componentart.com/BLOGS/bojan/archive/tags/ToolBar/default.aspx" /></entry></feed>