<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>With Great Power comes Great Response.write("Ability") : JavaScript</title><link>http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx</link><description>Tags: JavaScript</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Documentation for the AjaxControlToolkit</title><link>http://blogs.msdn.com/phaniraj/archive/2008/08/27/documentation-for-the-ajaxcontroltoolkit.aspx</link><pubDate>Wed, 27 Aug 2008 07:07:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8898885</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/8898885.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=8898885</wfw:commentRss><description>&lt;strike&gt;&lt;/strike&gt;  &lt;p&gt;Ready for some documentation for the ATK controls ?    &lt;br /&gt;To skip my journey to create this , download the Documentation ( in CHM form) here : &lt;a href="http://cid-925c2d2bb2d03c6b.skydrive.live.com/self.aspx/AjaxControlToolkit%20Documentation/AjaxControlToolkit.chm"&gt;AjaxControlToolkit Docs&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;Step 1 : Using AjaxDoc to generate the Reflection.org file required by Sandcastle&lt;/h5&gt;  &lt;p&gt;&amp;#160;&amp;#160; 1.0) Download AjaxDoc &lt;a href="http://www.codeplex.com/ajaxdoc"&gt;here &lt;/a&gt;.     &lt;br /&gt;&amp;#160;&amp;#160; 1.1) Download the Latest Source for the AjaxControlToolkit , &lt;a href="http://www.codeplex.com/AjaxControlToolkit/Release/ProjectReleases.aspx?ReleaseId=16488"&gt;here&lt;/a&gt; .&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160; 1.2) Get the Script Files from the AjaxControlToolkit project .     &lt;br /&gt;&amp;#160;&amp;#160; 1.3) Create the AjaxControlToolkit.project.xml for AjaxDoc which has script references to the ATK Scripts.     &lt;br /&gt;&amp;#160;&amp;#160; 1.4) Run the Default.aspx page&lt;/p&gt;  &lt;p&gt;Hurdle 1 : DynamicPopulateBehavior.js just refused to load.&amp;#160; &lt;br /&gt;Added this line to ln 150 of ScriptDoc.js file to skip types which throw errors.     &lt;br /&gt;&lt;/p&gt;  &lt;pre class="darkcsharpcode"&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt;(member ===&lt;span class="kwrd"&gt;null&lt;/span&gt; || &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(member)===&lt;span class="str"&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt;) &lt;span class="kwrd"&gt;continue&lt;/span&gt;; &lt;/pre&gt;

&lt;p&gt;&amp;#160; 1.5) Run the Default.aspx page again 
  &lt;br /&gt;

  &lt;br /&gt;Hurdle 2:&amp;#160; “PopupBehavior is undefined”. 

  &lt;br /&gt;1.6) Re-arranged the script references in the Project.xml file to order the script files according to their dependencies. 

  &lt;br /&gt;1.7) Run the Default.aspx page again . 

  &lt;br /&gt;&lt;/p&gt;

&lt;h5&gt;Step 2 : Use SandCastle to produce the CHM File&lt;/h5&gt;

&lt;p&gt;Follow the Steps 5-12 defined here : &lt;a href="http://blogs.msdn.com/sandcastle/archive/2006/07/29/Creating-a-Chm-build-using-Sandcastle.aspx"&gt;Creating a Chm build using Sandcastle&lt;/a&gt; 

  &lt;br /&gt;Whichever Transform you use (Vs2005/Prototype) , in step 8, remove these lines in the sandcastle.config file.&amp;#160; &lt;/p&gt;

&lt;pre class="darkcsharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;language&lt;/span&gt; &lt;span class="attr"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;VisualBasic&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;VisualBasic&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;vb&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;language&lt;/span&gt; &lt;span class="attr"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;CSharp&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;CSharp&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;cs&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;language&lt;/span&gt; &lt;span class="attr"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ManagedCPlusPlus&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ManagedCPlusPlus&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;cpp&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;&amp;lt;!--&amp;lt;language label=&amp;quot;JSharp&amp;quot; name=&amp;quot;JSharp&amp;quot; style=&amp;quot;cs&amp;quot; /&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;&amp;lt;language label=&amp;quot;JScript&amp;quot; name=&amp;quot;JScript&amp;quot; style=&amp;quot;cs&amp;quot; /&amp;gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;There you go ! &lt;/p&gt;
The CHM is not perfect ,&amp;#160; &lt;ol&gt;
  &lt;li&gt;The documentation is missing for the following components 
    &lt;ol&gt;
      &lt;li&gt;AnimationExtender &lt;/li&gt;

      &lt;li&gt;RichTextEditor &lt;/li&gt;

      &lt;li&gt;MultiHandleSlider &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;

  &lt;li&gt;The Code Comments are missing from the CHM file &lt;/li&gt;

  &lt;li&gt;Insert gripe here &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'll probably take a look at this again to see if I can generate a CHM which has the missing parts. 
  &lt;br /&gt;And finally , while Its not everything , its not nothing either :) &lt;/p&gt;
Resources: 

&lt;br /&gt;&lt;a href="http://weblogs.asp.net/bleroy/archive/2007/06/27/scriptdoc-1-0-available.aspx"&gt;Bertrand's blog &lt;/a&gt;

&lt;br /&gt;&lt;a href="http://blogs.msdn.com/sandcastle/archive/2006/07/29/Creating-a-Chm-build-using-Sandcastle.aspx"&gt;SandCastle Blog&lt;/a&gt; 

&lt;br /&gt;&lt;a href="http://www.codeplex.com/ajaxdoc"&gt;AjaxDoc on CodePlex&lt;/a&gt; 

&lt;br /&gt;&lt;a href="http://www.codeplex.com/Sandcastle/"&gt;SandCastle on CodePlex&lt;/a&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8898885" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Demo/default.aspx">Demo</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AjaxControlToolkit/default.aspx">AjaxControlToolkit</category></item><item><title>Astoria Silverlight Client Failing with FireFox 3.0</title><link>http://blogs.msdn.com/phaniraj/archive/2008/06/26/astoria-silverlight-client-failing-with-firefox-3-0.aspx</link><pubDate>Fri, 27 Jun 2008 01:27:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8658617</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/8658617.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=8658617</wfw:commentRss><description>&lt;p&gt;Hi all,&lt;/p&gt;  &lt;p&gt;By now , anyone running a SIlverlight application Astoria Silverlight Client library in Firefox 3.0 would have seen a weird error about charsets.    &lt;br /&gt;    &lt;br /&gt;This blog post will describe the error and how to work-around it .&lt;/p&gt;  &lt;p&gt;Consider the following query : &lt;/p&gt;  &lt;pre class="csharpcode"&gt;DataServiceQuery&amp;lt;Customers&amp;gt; customerQuery = from cus &lt;span class="kwrd"&gt;in&lt;/span&gt; context.Customers 
                                            &lt;span class="kwrd"&gt;where&lt;/span&gt; cus.ID ==&lt;span class="str"&gt;'ALFKI'&lt;/span&gt; 
                                            select cus; 

AsyncCallback ac = iasyncResult =&amp;gt;{ 
  DataServiceQuery&amp;lt;Customers&amp;gt; cusQuery = iasyncResult.AsyncState &lt;span class="kwrd"&gt;as&lt;/span&gt;  DataServiceQuery&amp;lt;Customers&amp;gt;; 
  QueryOperationResponse&amp;lt;Customer&amp;gt;  response = cusQuery.EndExecute(iasyncResult); &amp;lt;-- Exception Thrown here 
}

customerQuery.BeginExecute(ac,customerQuery); &lt;/pre&gt;
&lt;style type="text/css"&gt;












.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;
  &lt;br /&gt;When this code runs in Firefox 3.0 , the highlighted line throws the exception,&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Error Message : Character set 'iso-8859-1' is not supported. 
      &lt;br /&gt;&lt;/strong&gt;

    &lt;br /&gt;&lt;strong&gt;Stack Trace : &lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;&amp;#160;&amp;#160; at System.Data.Services.Client.HttpProcessUtility.EncodingFromName(String name) 
    &lt;br /&gt;&amp;#160;&amp;#160; at System.Data.Services.Client.HttpProcessUtility.MediaType.SelectEncoding() 

    &lt;br /&gt;&amp;#160;&amp;#160; at System.Data.Services.Client.HttpProcessUtility.ReadContentType(String contentType, String&amp;amp; mime, Encoding&amp;amp; encoding) 

    &lt;br /&gt;&amp;#160;&amp;#160; at System.Data.Services.Client.DataServiceContext.GetMaterializer(Type elementType, String contentType, Func`1 response, Func`4 create) 

    &lt;br /&gt;&amp;#160;&amp;#160; at System.Data.Services.Client.DataServiceRequest.Materialize[TElement](DataServiceContext context, String contentType, Func`1 response) 

    &lt;br /&gt;&amp;#160;&amp;#160; at System.Data.Services.Client.DataServiceRequest`1.Materialize(DataServiceContext context, String contentType, Func`1 response) 

    &lt;br /&gt;&amp;#160;&amp;#160; at System.Data.Services.Client.DataServiceContext.EndExecute[TElement](IAsyncResult asyncResult) 

    &lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;What is this error ?&lt;/h5&gt;

&lt;p&gt;When&amp;#160; we recieve the ATOM response from the server , we need to read the stream of content in the charset present in the Accept-charset header. The server does not set the Accept-Charset header and replays what the client sent. The normal Accept-Charset header sent to the server from the SL client looks like this ..&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Accept-Charset: UTF-8&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now , in FireFox 3.0 , the Accept-Charset header , even though we explicitly set it to be the above , whats sent to the server is ..&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Accept-Charset: &lt;em&gt;ISO-8859-1&lt;/em&gt;,utf-8;q=0.7,*;q=0.7 

      &lt;br /&gt;

      &lt;br /&gt;&lt;/strong&gt;And the Server responds back with the same charset and we try to read the content with this char-set.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Unfortunately , the charset &lt;em&gt;&lt;strong&gt;ISO-8859-1&lt;/strong&gt;&lt;/em&gt;, is not supported by the underlying Platform i.e SIlverlight. 

  &lt;br /&gt;and hence we error out 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h5&gt;How do I fix this for now ?&lt;/h5&gt;

&lt;p&gt;Follow these instructions on changing your browser settings to work around the issue&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Type &lt;b&gt;about:config&lt;/b&gt; in the Firefox browser's address bar. &lt;/li&gt;

  &lt;li&gt;Navigate through a dialog box and check “I’ll be careful”. &lt;/li&gt;

  &lt;li&gt;In the Page’s Search box , type : “&lt;b&gt;intl.charset.default&lt;/b&gt;” . &lt;/li&gt;

  &lt;li&gt;Double click on the entry&amp;#160; that turns up , and set the value to “&lt;b&gt;utf-8&lt;/b&gt;” . &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hope this helps.If you still face problems , open a thread on the &lt;a href="http://forums.microsoft.com/Forums/ShowForum.aspx?ForumID=1430&amp;amp;SiteID=1"&gt;Astoria Forums&lt;/a&gt; and we will try to help out.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8658617" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Astoria/default.aspx">Astoria</category></item><item><title>GridViewFilterExtender : Filter GridView Rows Client-Side</title><link>http://blogs.msdn.com/phaniraj/archive/2007/10/27/building-an-excel-like-gridview-filter-extender.aspx</link><pubDate>Sat, 27 Oct 2007 14:30:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5771108</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/5771108.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=5771108</wfw:commentRss><description>&lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Download Source Code and Sample application&lt;/strong&gt;&amp;nbsp; :&amp;nbsp; &lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 26px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-925c2d2bb2d03c6b.skydrive.live.com/embedrow.aspx/Public/GridViewFilterExtender.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="709" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="348"&gt;&lt;strong&gt;Excel's Filter Dialog&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="359"&gt;&lt;strong&gt;My GridView Filter Extender&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="351"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/Excel_Filter.jpg"&gt;&lt;br&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="396" alt="Excel_Filter" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/Excel_Filter_thumb.jpg" width="339" border="0"&gt;&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="359"&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/GridRowFilterExtender_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="416" alt="GridRowFilterExtender" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/GridRowFilterExtender_thumb.jpg" width="306" border="0"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="354"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="359"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;The above Screen Shots look promising , don't they ?&lt;br&gt;So, How would one go about building such a control ? Well, I have it laid out in front of you .&lt;br&gt;&lt;br&gt;1) Find all unique Strings in the same column &lt;br&gt;2) Build a lookup table that stores the Unique string and the row Indices for the rows that contain the Unique String&lt;br&gt;3) Once user builds a Filter Expression and clicks on "Ok" , Filter the Rows in the Table based on the Expression.&lt;br&gt;4) For Now , the Filter Expression can only be&amp;nbsp; a sequence of strings that the user wants to see in the grid.&lt;/p&gt; &lt;p&gt;Ex : If your grid looks like this :&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/GridViewSampleData_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="295" alt="GridViewSampleData" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/GridViewSampleData_thumb.jpg" width="194" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The filter expression would be a comma-separated string that contains the unique strings to match in the rows.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; _currentRowFilter = &lt;span class="str"&gt;"Ajax,Moo"&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
The lookup Table would look like this :&lt;/p&gt;&lt;pre class="csharpcode"&gt;_lookupTable
        Select All    &lt;span class="str"&gt;"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23"&lt;/span&gt;    
        Ajax    &lt;span class="str"&gt;"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"&lt;/span&gt;    
        Moo    &lt;span class="str"&gt;"17,18,19,20,21,22,23"&lt;/span&gt;    &lt;br&gt;
so , if we want to filter the rows , we would need to : &lt;/pre&gt;
&lt;p&gt;1) Hide all Rows to begin with . &lt;br&gt;&lt;b&gt;HideRows : this.lookupTable["Select All"]&lt;/b&gt; 
&lt;p&gt;2) Show only those rows that are found in the lookup table against the filter Terms. &lt;br&gt;&lt;b&gt;ShowRows :this.lookupTable["Ajax"]&lt;/b&gt; 
&lt;p&gt;That's about the algorithm / design for the extender to work .&lt;br&gt;Getting this working is another matter altogether.&lt;br&gt;Once you have understood this , lets start: 
&lt;p&gt;&lt;b&gt;Find all unique Strings in the same column :&lt;/b&gt; 
&lt;p&gt;once you find all the unique strings in all subsequent rows for the same column , we will need to build the checkbox list that &lt;br&gt;will allows the user to select the filter Terms. &lt;b&gt;I.e this :&lt;/b&gt;&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/FilterExpressionSelector_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="245" alt="FilterExpressionSelector" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/BuildinganExcellike_10A47/FilterExpressionSelector_thumb.jpg" width="155" border="0"&gt;&lt;/a&gt; &lt;/pre&gt;
&lt;p&gt;This is a bit tricky , the way one would go about doing this would be :&lt;/p&gt;
&lt;p&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;&amp;nbsp; Find out which Column the Extender is added in .Find the Cell Index of the Column , lets say _cellIndex&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;&amp;nbsp; For all subsequent rows in the table, Lookup the innerText of the Cell with CellIndex cellIndex. 
&lt;p&gt;&lt;strong&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each Row &lt;/strong&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Read the innerText of the Cell at CellIndex cellIndex.&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF the string read is not yet present in the lookup Table then&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add it to the lookup Table along with the rowIndex of the current Row&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE if string is already present in the lookupTable then 
&lt;p&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Begin &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add the RowIndex to the lookupTable[string] location. &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END IF 
&lt;p&gt;Once you have found all the Unique Strings , build the CheckBoxList and attach the appropriate handlers . 
&lt;p&gt;&lt;b&gt;Once user builds a Filter Expression and clicks on "Ok" , Filter the Rows in the Table based on the Expression.&lt;/b&gt; 
&lt;p&gt;Hide All Rows .&lt;br&gt;Get all the Rows in the Table other than the header and the footer , _rowsInTable.&lt;br&gt;Get the Current Search Filter by adding all the strings that are checked in the CheckBoxList.&lt;br&gt;For each term in the Search Filter , get the appropriate row Indices ,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For each row Index in the Row Indices, &lt;b&gt;_rowIndex&lt;br&gt;&lt;/b&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assign the cssClass _inFilterCssClass to the _rowsInTable[_rowIndex]. 
&lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;This is all neat , what if I have multiple columns in my GridView and I want to filter &lt;br&gt;each succeeding Column depending on the previous Column?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Well, I have thought about that too ..&lt;br&gt;This is what we would do :&lt;br&gt;Every FilterExtender &lt;strong&gt;(a)&lt;/strong&gt; can have a Dependent Filter&amp;nbsp; &lt;strong&gt;(b)&lt;/strong&gt; , if filter &lt;strong&gt;(b) &lt;/strong&gt;is used to filter data ( it raises the itemFiltered Event ),&lt;br&gt;then&amp;nbsp; the Filter &lt;strong&gt;(a) &lt;/strong&gt;has to rebuild its index to remove any index text &lt;br&gt;that was removed as a result of the filter expression on filter &lt;strong&gt;(b)&lt;/strong&gt;.&lt;br&gt;&lt;strong&gt;&lt;br&gt;Important Note about the DependentFilterID &lt;br&gt;&lt;/strong&gt;&lt;br&gt;If a FilterExtender &lt;strong&gt;(a)&lt;/strong&gt;&amp;nbsp; has a FilterExtender &lt;strong&gt;(b)&lt;/strong&gt;&amp;nbsp; as its Dependent Filter ID , they both should have the matching values for the &lt;br&gt;InFilterCssClass and the NotInFilterCssClass attributes.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="612" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;strong&gt;Set DependentFilterID &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;strong&gt;In markup&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;Raj:GridViewFilterExtender  DependentFilterId="optionListPnl"&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="610"&gt;&lt;pre class="csharpcode"&gt;$find(&amp;lt;filterBehaviorID&amp;gt;).set_dependentFilterId(&amp;lt;dependentFilterId&amp;gt;)&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Attributes :&lt;/strong&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="757" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="644"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;TargetControlID&lt;/td&gt;
&lt;td valign="top" width="644"&gt;ID of the control upon clicking on which , the Filter is shown&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;OkButtonId&lt;/td&gt;
&lt;td valign="top" width="644"&gt;ID of the control upon clicking on which , the FilterExpression is applied and the filter is hidden&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;CancelButtonId&lt;/td&gt;
&lt;td valign="top" width="644"&gt;ID of the control upon clicking on which , the FilterExpression is &lt;u&gt;NOT applied &lt;/u&gt;and the filter is hidden&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;EnableSelectAll&lt;/td&gt;
&lt;td valign="top" width="644"&gt;If the filter contains an option to "Select All" Rows&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;InFilterCssClass&lt;/td&gt;
&lt;td valign="top" width="644"&gt;The CssClass applied to all rows which are available from the Filter Expression.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;NotInFilterCssClass&lt;/td&gt;
&lt;td valign="top" width="644"&gt;The CssClass applied to all rows which are NOT available from the Filter Expression.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="111"&gt;FilterPanelID&lt;/td&gt;
&lt;td valign="top" width="644"&gt;The Panel Control which contains the Filter &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Events :&lt;/strong&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="765" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="640"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;itemSelected&lt;/td&gt;
&lt;td valign="top" width="640"&gt;When any filter Expression is Selected&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;itemFiltered&lt;/td&gt;
&lt;td valign="top" width="640"&gt;When the filter Expression is applied.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;onOk&lt;/td&gt;
&lt;td valign="top" width="640"&gt;when the Control Referenced by OkButtonId is clicked&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="120"&gt;onCancel&lt;/td&gt;
&lt;td valign="top" width="640"&gt;when the Control Referenced by CancelButtonId is clicked&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;strong&gt;Subscribing to the Events :&lt;br&gt;&lt;br&gt;a) Markup :&lt;br&gt;&lt;/strong&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Raj:OptionPickerBehavior&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="optionListPnl"&lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnToggle"&lt;/span&gt;
         &lt;span class="attr"&gt;blah&lt;/span&gt; &lt;span class="attr"&gt;blah&lt;/span&gt; &lt;span class="attr"&gt;blah&lt;/span&gt;
         &lt;span class="attr"&gt;OnOkScript&lt;/span&gt;&lt;span class="kwrd"&gt;="okClickHandler"&lt;/span&gt;
         &lt;span class="attr"&gt;OnCancelScript&lt;/span&gt; &lt;span class="kwrd"&gt;="cancelClickHandler"&lt;/span&gt;
         &lt;span class="attr"&gt;OnClientItemFiltered&lt;/span&gt; &lt;span class="kwrd"&gt;="itemFilteredHandler"&lt;/span&gt;
         &lt;span class="attr"&gt;OnClientItemSelected&lt;/span&gt; &lt;span class="kwrd"&gt;="itemSelectedHandler"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Raj:OptionPickerBehavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;lt;script language=&lt;span class="str"&gt;"javascript"&lt;/span&gt; type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt;&amp;gt;
            &lt;span class="kwrd"&gt;function&lt;/span&gt; itemSelectedHandler(element,args)  {
                Sys.Debug.trace( args.get_text() + &lt;span class="str"&gt;"   "&lt;/span&gt; + args.get_isChecked());
            }
            &lt;span class="kwrd"&gt;function&lt;/span&gt; itemFilteredHandler(element,args)  {
                Sys.Debug.trace( args.get_item() + &lt;span class="str"&gt;"   "&lt;/span&gt; + args.get_filterText());
            }
            &lt;span class="kwrd"&gt;function&lt;/span&gt; okClickHandler(element,args)  {
                Sys.Debug.trace( &lt;span class="str"&gt;"Ok Button was clicked"&lt;/span&gt; );
            }
             &lt;span class="kwrd"&gt;function&lt;/span&gt; cancelClickHandler(element,args)  {
                Sys.Debug.trace( &lt;span class="str"&gt;"Cancel Button was clicked"&lt;/span&gt;);
            }
            &lt;span class="kwrd"&gt;function&lt;/span&gt; traceCall(msg) {
                $get(&lt;span class="str"&gt;"traceDiv"&lt;/span&gt;).appendChild(document.createTextNode(msg)); 
            }
 &amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;b) Script &lt;br&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;$find(&lt;span class="str"&gt;"BehaviorId"&lt;/span&gt;).add_onOk( okClickHandler );

$find(&lt;span class="str"&gt;"BehaviorId"&lt;/span&gt;).add_onCancel( cancelClickHandler );

$find(&lt;span class="str"&gt;"BehaviorId"&lt;/span&gt;).add_itemFiltered( itemFilteredHandler );

$find(&lt;span class="str"&gt;"BehaviorId"&lt;/span&gt;).add_itemSelected( itemSelectedHandler );&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="Trebuchet MS"&gt;That's it for now ! Do give feedback on the control if you get a chance to use it / look at it .&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;/pre&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5771108" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Prototype/default.aspx">Prototype</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Astoria/default.aspx">Astoria</category></item><item><title>Astoria DataSource Extender</title><link>http://blogs.msdn.com/phaniraj/archive/2007/10/19/astoria-datasource-extender.aspx</link><pubDate>Fri, 19 Oct 2007 23:18:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5528265</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/5528265.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=5528265</wfw:commentRss><description>&lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;&lt;u&gt;Download Source and Example&amp;nbsp; :&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 26px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-925c2d2bb2d03c6b.skydrive.live.com/embedrow.aspx/Public/AstoriaClient.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Most of you must have heard about Astoria. Read More about it here , if you haven't already :&lt;br&gt;&lt;a href="http://astoria.mslivelabs.com/" target="_blank"&gt;Microsoft Codename "Astoria".&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/astoriateam/" target="_blank"&gt;The Astoria Team Blog :&lt;/a&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;It's a "Database in the cloud", your db is hosted on the Web and you access it via REST -style URIs.&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;I have written a ControlExtender that helps one retrieve data and post data to a db on Astoria using JavaScript.&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;The Extender encapsulates its own Server-Side handler so that&amp;nbsp; you don't have to write a Server-Side proxy to &lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;avoid Making Cross-Domain Requests from the Client browser.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;The way it would work is :&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;Client Browser&amp;nbsp; =====&amp;gt; Server-Side handler ===&amp;gt; Astoria Servers&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;When the Client Script tries to download the data from the Astoria Servers, the following process is followed&lt;/font&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;font size="2"&gt;Client Script requests a certain page ( dataDownloader.astoria)&amp;nbsp; on the same server as the website with all the Astoria Query related parameters as headers. &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;The *.astoria extension is mapped to a handler contained in the Extender Control. &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;Once the handler receives the request , it makes the call to the actual Astoria Servers and passes on the error/Data back to the requesting Client . &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;The Control notifies any registered event handlers that the Data is now ready for use by the Script&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;u&gt;What does the Extender NOT do ?&lt;/u&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;The Extender does NOT Support the following Scenarios&lt;/font&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;font size="2"&gt;Data Manipulation such as POSTING and Editing Data.&lt;/font&gt;  &lt;li&gt;&lt;font size="2"&gt;Bind the Returned Data to HTML controls , this would have to be done manually.&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Events Supported by the Extender:&lt;/strong&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="908" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="118"&gt;&lt;strong&gt;Event Name&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="273"&gt;&lt;strong&gt;Raised When&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="347"&gt;&lt;strong&gt;Event Args&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="120"&gt;dataReady&lt;/td&gt; &lt;td valign="top" width="273"&gt;When the Data is downloaded and available for use by the client application&lt;/td&gt; &lt;td valign="top" width="347"&gt;EventArgs contains the item( the Control itself) and the Data that the Client application can use&lt;/td&gt; &lt;td valign="top" width="164"&gt;See Example below&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="122"&gt;dataDownloadBegins&lt;/td&gt; &lt;td valign="top" width="273"&gt;When the Data download starts from the Astoria Servers&lt;/td&gt; &lt;td valign="top" width="347"&gt;EventArgs.Empty&lt;/td&gt; &lt;td valign="top" width="164"&gt;See Example below&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="122"&gt;dataDownloadEnds&lt;/td&gt; &lt;td valign="top" width="273"&gt;When the Data download Ends from the Astoria Servers . The Data may/may not be ready for use by the Client Application&lt;/td&gt; &lt;td valign="top" width="347"&gt;EventArgs.Empty&lt;/td&gt; &lt;td valign="top" width="164"&gt;See Example below&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="122"&gt;dataDownloadError&lt;/td&gt; &lt;td valign="top" width="273"&gt;When the Data download from the Astoria Servers results in an error&lt;/td&gt; &lt;td valign="top" width="347"&gt;&lt;u&gt;AstoriaExtenders.DataDownloadErrorEventArgs&lt;br&gt;&lt;/u&gt;Contains the Error information &lt;/td&gt; &lt;td valign="top" width="164"&gt;See Example below&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Subscribing to the Events of the Astoria Data Source Extender :&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The BehaviorID of the Extender added on the page is : "asBehavior"&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Subscribing to the dataReady event&lt;/span&gt;
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).add_dataReady( dataReadyHandler );
&lt;span class="rem"&gt;//Subscribing to the dataDownloadBegins event&lt;/span&gt;
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).add_dataDownloadBegins(&amp;lt;functionName&amp;gt;);
&lt;span class="rem"&gt;//Subscribing to the dataDownloadEnds event&lt;/span&gt;
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).add_dataDownloadEnds(&amp;lt;functionName&amp;gt;);
&lt;span class="rem"&gt;//Subscribing to the dataDownloadError event&lt;/span&gt;
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).add_dataDownloadError(dwError);&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//The dataReady Event handler&lt;/span&gt;
&lt;span class="kwrd"&gt;function&lt;/span&gt; dataReadyHandler(sender,eventArgs) {
   alert(&lt;span class="str"&gt;"The Data returned is :: "&lt;/span&gt;+eventArgs.get_data());
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//The dataDownloadError Event handler&lt;/span&gt;
&lt;span class="kwrd"&gt;function&lt;/span&gt; dwError(sender,eventArgs) {
    Sys.Debug.trace(&lt;span class="str"&gt;"error Code ::"&lt;/span&gt;+eventArgs.get_error().ErrorCode);
    Sys.Debug.trace(&lt;span class="str"&gt;"error Message ::"&lt;/span&gt;+eventArgs.get_error().ErrorMessage);
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;font size="3"&gt;Attributes Supported by the Extender&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;table cellspacing="0" cellpadding="2" width="852" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;&lt;strong&gt;&lt;font size="2"&gt;Attribute Name&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="457"&gt;&lt;strong&gt;&lt;font size="2"&gt;Description&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="157"&gt;&lt;strong&gt;&lt;font size="2"&gt;Usage&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="70"&gt;&lt;font size="2"&gt;Default&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="151"&gt;&lt;font size="2"&gt;PageSize&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="457"&gt;&lt;font size="2"&gt;The Number of Records to show in one page&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="157"&gt;&lt;font size="2"&gt;See Example below&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="74"&gt;&lt;font size="2"&gt;5&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="151"&gt;&lt;font size="2"&gt;StartPageIndex&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="457"&gt;&lt;font size="2"&gt;The Initial page of Data returned&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="157"&gt;&lt;font size="2"&gt;See Example below&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="78"&gt;&lt;font size="2"&gt;0&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="152"&gt;&lt;font size="2"&gt;Query&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="457"&gt;&lt;font size="2"&gt;The Actual Astoria Query to return Data to the Client &lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="157"&gt;&lt;font size="2"&gt;See Example below&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="81"&gt;&lt;font size="2"&gt;None&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="152"&gt;&lt;font size="2"&gt;ExpandRecord&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="457"&gt;&lt;font size="2"&gt;The Sub-record which has to also expanded along with the parent Rows.&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="157"&gt;&lt;font size="2"&gt;See Example below&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="84"&gt;&lt;font size="2"&gt;None&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="152"&gt;&lt;font size="2"&gt;DatabaseURI&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="457"&gt;&lt;font size="2"&gt;The Astoria URI to reach the Database &lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="157"&gt;&lt;font size="2"&gt;See Example below&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="86"&gt;&lt;font size="2"&gt;None&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="152"&gt;&lt;font size="2"&gt;DataFormat&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="457"&gt;&lt;font size="2"&gt;The Format in which the Client Requires data : json/xml/rdf&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="157"&gt;&lt;font size="2"&gt;See Example below&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="89"&gt;&lt;font size="2"&gt;json&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Usage Examples&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).get_currentPageIndex();&lt;br&gt;$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).set_currentPageIndex(2);&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Retrieve the Table 'Categories' from the 'NorthWind' Database&lt;/span&gt;
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).set_dbURI(&lt;span class="str"&gt;"http://astoria.sandbox.live.com/northwind/northwind.rse"&lt;/span&gt;);
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).set_query(&lt;span class="str"&gt;"/Categories"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).set_dataFormat(&lt;span class="str"&gt;"json"&lt;/span&gt;);
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).set_pageSize(10);
&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;font face="Trebuchet MS"&gt;Methods Supported by the Extender&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;table cellspacing="0" cellpadding="2" width="814" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="117"&gt;&lt;strong&gt;&lt;font size="2"&gt;Method Name&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="518"&gt;&lt;strong&gt;&lt;font size="2"&gt;Description&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="174"&gt;&lt;strong&gt;&lt;font size="2"&gt;Usage&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="119"&gt;&lt;font size="2"&gt;DataBind&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="518"&gt;&lt;font size="2"&gt;Does what it says : it Downloads the data based on the parameters already specified&lt;/font&gt;&lt;/td&gt;
&lt;td valign="top" width="174"&gt;&lt;font size="2"&gt;See Example Below&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;Usage&amp;nbsp; Examples&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bind the data to the client :&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).DataBind()&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;Move to a Specific page of data :&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Move to the 3rd page&lt;/span&gt;
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).set_currentPageIndex( 2 );
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).DataBind();&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;Move to the Next page&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).set_currentPageIndex( &lt;br&gt;               $find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).get_currentPageIndex() + 1  &lt;br&gt;               );
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).DataBind();&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;Move to the Previous page&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).set_currentPageIndex( &lt;br&gt;                   $find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).get_currentPageIndex() - 1  &lt;br&gt;                    );
$find(&lt;span class="str"&gt;"asBehavior"&lt;/span&gt;).DataBind();&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;font size="3"&gt;Markup Way of doing the above &lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Raj:AstoriaDSExtender&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="asbehaviorPnl"&lt;/span&gt; 
&lt;span class="attr"&gt;BehaviorID&lt;/span&gt;&lt;span class="kwrd"&gt;="asBehavior"&lt;/span&gt;
&lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnAstoria"&lt;/span&gt; 
&lt;span class="attr"&gt;DatabaseURI&lt;/span&gt;&lt;span class="kwrd"&gt;="http://astoria.sandbox.live.com/northwind/northwind.rse"&lt;/span&gt;
&lt;span class="attr"&gt;DataFormat&lt;/span&gt;&lt;span class="kwrd"&gt;="json"&lt;/span&gt; &lt;span class="attr"&gt;StartPageIndex&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;PageSize&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; 
&lt;span class="attr"&gt;Query&lt;/span&gt;&lt;span class="kwrd"&gt;="/Categories"&lt;/span&gt; &lt;span class="attr"&gt;ExpandRecord&lt;/span&gt;&lt;span class="kwrd"&gt;="Products"&lt;/span&gt;
&lt;span class="attr"&gt;OnClientDataDownloadError&lt;/span&gt;&lt;span class="kwrd"&gt;="dwError"&lt;/span&gt; 
&lt;span class="attr"&gt;OnClientDataReady&lt;/span&gt;&lt;span class="kwrd"&gt;="endDownload"&lt;/span&gt; 
&lt;span class="attr"&gt;ErrorPanelId&lt;/span&gt;&lt;span class="kwrd"&gt;="divContainsErrorInfo"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;font size="3"&gt;Setting up your project to use the Astoria Extender&lt;/font&gt;&lt;br&gt;&lt;/strong&gt;&lt;strong&gt;Web.Config :&lt;br&gt;&lt;/strong&gt;&lt;font face="Tre"&gt;1. Register the Handler for the Extender&lt;br&gt;&lt;/font&gt;&lt;font face="Tre"&gt;Add the Below line to the &amp;lt;httpHandlers&amp;gt; Section of your web.config.&lt;br&gt;&lt;/font&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;="*.astoria"&lt;/span&gt; &lt;span class="attr"&gt;verb&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="AstoriaExtenders.AstoriaHandler"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;2. The Tag Prefix for the Extenders&lt;br&gt;Add this line to the &amp;lt;controls&amp;gt; Section of the &amp;lt;Pages&amp;gt; Section in web.config&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;tagPrefix&lt;/span&gt;&lt;span class="kwrd"&gt;="Raj"&lt;/span&gt; &lt;span class="attr"&gt;namespace&lt;/span&gt;&lt;span class="kwrd"&gt;="AstoriaExtenders"&lt;/span&gt; &lt;span class="attr"&gt;assembly&lt;/span&gt;&lt;span class="kwrd"&gt;="AstoriaExtenders"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;3. Set up the proxy so that the Web Server can talk to the Astoria Servers.&lt;br&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.net&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;defaultProxy&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;proxy&lt;/span&gt; &lt;span class="attr"&gt;usesystemdefault&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt; &lt;span class="attr"&gt;proxyaddress&lt;/span&gt;&lt;span class="kwrd"&gt;=&lt;a href="http://proxyServerName"&gt;http://proxyServerName&lt;/a&gt;&lt;/span&gt; &lt;span class="attr"&gt;bypassonlocal&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;defaultProxy&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.net&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5528265" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Astoria/default.aspx">Astoria</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Demo/default.aspx">Demo</category></item><item><title>Happy Birthday to Me !!!</title><link>http://blogs.msdn.com/phaniraj/archive/2007/09/17/happy-birthday-to-me.aspx</link><pubDate>Mon, 17 Sep 2007 18:47:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4958118</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/4958118.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=4958118</wfw:commentRss><description>&lt;p&gt;Hello all ,&lt;/p&gt; &lt;p&gt;Today I grow a year older ,&amp;nbsp; I am now all of 26 !!! &lt;/p&gt; &lt;p&gt;As return gifts&amp;nbsp; to everyone, I am giving out a demo application that encompasses most of my knowledge about the AjaxControlToolkit Animation Extender. &lt;/p&gt; &lt;p&gt;Here is a list of the Animations that are demo'd .&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Basic Animations &lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt; Fade &lt;/li&gt; &lt;li&gt; ReSize &lt;/li&gt; &lt;li&gt; Length &lt;/li&gt; &lt;li&gt; Color &lt;/li&gt; &lt;li&gt; Pulse &lt;/li&gt; &lt;li&gt; Discrete &lt;/li&gt; &lt;li&gt; Scale &lt;/li&gt; &lt;li&gt; Move &lt;/li&gt; &lt;li&gt; Case &lt;/li&gt; &lt;li&gt; Condition &lt;/li&gt; &lt;li&gt; Sequence &lt;/li&gt; &lt;li&gt; Parallel &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Actions &lt;/strong&gt; &lt;ul&gt; &lt;li&gt; Enable Action &lt;/li&gt; &lt;li&gt; Script Action &lt;/li&gt; &lt;li&gt; Hide Action &lt;/li&gt; &lt;li&gt; Opacity Action &lt;/li&gt; &lt;li&gt; Style Action &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Advanced &lt;/strong&gt; &lt;ul&gt; &lt;li&gt; Scripting Animations&lt;/li&gt; &lt;li&gt; Client-Side DataBinding &lt;/li&gt; &lt;li&gt; Experiment #1 &lt;/li&gt; &lt;li&gt; Experiment #2 ( Plot a Path and Follow it )&lt;/li&gt; &lt;li&gt; Reuse AnimationExtender &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Triggers&lt;/strong&gt;  &lt;ul&gt; &lt;li&gt; OnLoad &lt;/li&gt; &lt;li&gt; OnHoverOver/Out &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Some Screenshots&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;The Main Menu &lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/HappyBirthdaytoMe_1251E/MainMenu_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="196" alt="MainMenu" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/HappyBirthdaytoMe_1251E/MainMenu_thumb.jpg" width="244" border="0"&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;In each demo of each animation type , you get :&lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp; a Demo of the animation&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/HappyBirthdaytoMe_1251E/Demo_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="196" alt="Demo" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/HappyBirthdaytoMe_1251E/Demo_thumb.jpg" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt; 2.&amp;nbsp; The Source Code for implementing the animation&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/HappyBirthdaytoMe_1251E/Code_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="196" alt="Code" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/HappyBirthdaytoMe_1251E/Code_thumb.jpg" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;3.&amp;nbsp; Reference towards further explanation of the animation type&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/HappyBirthdaytoMe_1251E/Reference_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="196" alt="Reference" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/HappyBirthdaytoMe_1251E/Reference_thumb.jpg" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;How do I download this ?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt; Click here : &lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 26px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-925c2d2bb2d03c6b.skydrive.live.com/embedrow.aspx/Public/All%20animations%20Demos.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;What do I need&amp;nbsp; to be pre-installed ?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt; The ASP.NET Ajax Extensions&lt;/p&gt; &lt;p&gt; IIS Web Server&lt;/p&gt; &lt;p&gt;&lt;strong&gt;How do I set this up ?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Follow the steps mentioned here : &lt;a href="http://support.microsoft.com/kb/172138/en-us" target="_blank"&gt;Instructions to Setup a Virtual Directory in IIS&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Which browser does this work in ?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;The animations themselves work in all browsers that are officially supported.&lt;/p&gt; &lt;p&gt; For the Tabs look that&amp;nbsp; is present on each page is my own implementation using JavaScript that works only in IE ( I use DIVS&amp;nbsp; :-) ).&lt;/p&gt; &lt;p&gt;In case you see that you cant navigate in between the tabs on the demo pages , fire up visual Studio 2005 and you should be able to see &lt;/p&gt; &lt;p&gt;the source code right there.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;So , Download it and go crazy !!! &lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4958118" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>Expand Accordion Panes On Mouse Over Header</title><link>http://blogs.msdn.com/phaniraj/archive/2007/09/10/expand-accordion-panes-on-mouse-over-header.aspx</link><pubDate>Mon, 10 Sep 2007 22:56:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4855913</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/4855913.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=4855913</wfw:commentRss><description>&lt;p&gt;This is a common requirement I see&amp;nbsp; among users of the accordion , &lt;/p&gt; &lt;p&gt;How do I Open Accordion Panes OnMouseOver of&amp;nbsp; the header and Not on header Click ?&lt;/p&gt; &lt;p&gt;The answer is pretty simple .&lt;/p&gt; &lt;p&gt;Lets walk through this :&lt;/p&gt; &lt;p&gt;a) Setup your Accordion &lt;/p&gt;&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:Accordion&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Accordion1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ContentCssClass&lt;/span&gt;&lt;span class="kwrd"&gt;="grey"&lt;/span&gt; 
            &lt;span class="attr"&gt;FadeTransitions&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt;  &lt;span class="attr"&gt;FramesPerSecond&lt;/span&gt;&lt;span class="kwrd"&gt;="25"&lt;/span&gt; &lt;span class="attr"&gt;TransitionDuration&lt;/span&gt;&lt;span class="kwrd"&gt;="250"&lt;/span&gt;  &lt;/pre&gt;&lt;pre class="csharpcode"&gt;            &lt;span class="attr"&gt;HeaderCssClass&lt;/span&gt;&lt;span class="kwrd"&gt;="dimgreen"&lt;/span&gt; &lt;span class="attr"&gt;EnableViewState&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Panes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
               ::::
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Panes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:Accordion&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;b) Each of the accordion header Pane will have a &amp;lt;SPAN&amp;gt; tag setup for the header.&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;    On MouseOver of the Span Tag , we will open the Accordion Pane .&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AccordionPane&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="PaneOne"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;font size="4"&gt;               &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt; &lt;span class="attr"&gt;onmouseover&lt;/span&gt;&lt;span class="kwrd"&gt;="Openpane('0',event)"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Accordion&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/font&gt;           &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Header&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
           &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
               &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
               &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
               Expand Accordion Panes on Mouse Over :: Pane 1
               &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
               &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AccordionPane&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;The Span's onmouseover event is handled by the Openpane Function.&lt;/p&gt;
&lt;p&gt;c) The javaScript Function Openpane .&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; 

&lt;span class="kwrd"&gt;function&lt;/span&gt; Openpane(paneIndex,eventElement) { 
    &lt;span class="kwrd"&gt;var&lt;/span&gt; behavior = $get(&lt;span class="str"&gt;"Accordion1"&lt;/span&gt;).AccordionBehavior; 
    behavior.set_SelectedIndex(paneIndex); 
}

&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Download Complete Example : &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 26px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-925c2d2bb2d03c6b.skydrive.live.com/embedrow.aspx/Public/Accordion_OnHover.aspx.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4855913" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Accordion/default.aspx">Accordion</category></item><item><title>How to : Perform Operations on all instances of a Ajax Control Extender on a page</title><link>http://blogs.msdn.com/phaniraj/archive/2007/06/20/how-to-perform-operations-on-all-instances-of-a-ajax-control-extender-on-a-page.aspx</link><pubDate>Wed, 20 Jun 2007 17:12:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3424908</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/3424908.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=3424908</wfw:commentRss><description>&lt;p&gt;Consider a scenario wherein you have a lot of control Extenders on a page and you want to conduct operations on all instances&lt;/p&gt; &lt;p&gt;Specific Extender or specific instances of an extender.&lt;/p&gt; &lt;p&gt;We all know that we can reference certain instances of an Extender by&amp;nbsp;using &amp;nbsp;its BehaviorID and the &lt;a href="http://ajax.asp.net/docs/ClientReference/Global/FindShortcutMethod.aspx" target="_blank"&gt;$find&lt;/a&gt; function.&lt;/p&gt; &lt;p&gt;Now , consider an implementation where you want to Collapse/Expand all Collapsible Panels present on a Page.&lt;/p&gt; &lt;p&gt;You don't know how many CollapsiblePanels will be present on the page and what their IDs will be .&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Solution&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The ASP.NET Ajax Framework has a couple of really useful functions which will help us here.&lt;/p&gt; &lt;p&gt;You can get all instances of all behaviors present on the page using the &lt;strong&gt;&lt;a href="http://ajax.asp.net/docs/ClientReference/Sys/ApplicationClass/SysApplicationGetComponentsMethod.aspx" target="_blank"&gt;Sys.Application.getComponents()&lt;/a&gt; &lt;/strong&gt;method.&lt;/p&gt; &lt;p&gt;There&amp;nbsp; , it's &amp;nbsp;that simple !!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;How do you use this to find all instances of a &lt;u&gt;Specific Control Extender &lt;/u&gt;on a page ?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ans : You can find out the "Type" of any given Behavior by&amp;nbsp;using any of the following code Snippets.&lt;/p&gt; &lt;h5&gt;&lt;strong&gt;1) Using the Object.getType() Method.&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;&amp;nbsp;EX: &lt;/p&gt; &lt;p&gt;&amp;nbsp;Given that your behavior Instance is : controlYourSelf of type : HoverMenu&lt;/p&gt;&lt;pre class="csharpcode"&gt;Object.getType( controlYourSelf ).getName()&lt;/pre&gt;&lt;pre class="csharpcode"&gt;will give you the name of the AjaxControlToolkit behavior .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Ex output is :  AjaxControlToolkit.HoverMenuBehavior and so on and so forth.&lt;/pre&gt;
&lt;h5&gt;&lt;strong&gt;2) Using the get_name() method on the Behavior Instance.&lt;/strong&gt;&lt;/h5&gt;&lt;pre class="csharpcode"&gt;Your Behavior Name will not be qualified with AjaxControlToolkit.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;so , if you call get_name() on controlYourSelf Behavior .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;controlYourSelf.get_name() will give you : HoverMenuBehavior&lt;/pre&gt;&lt;pre class="csharpcode"&gt;usage : &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;lt;BehaviorInstance&amp;gt;.get_name()&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Consider the Following Example which shows you how to &lt;strong&gt;&lt;u&gt;Collapse all the Collapsible Panels present on a page&lt;/u&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Algorithm would be:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;Find all instances of the CollapsiblePanel Behavior on the page. 
&lt;li&gt;&amp;nbsp;On each of them , 
&lt;li&gt;&amp;nbsp;Check if the Panel is Collapsed by calling the get_Collapsed() function. 
&lt;li&gt;&amp;nbsp;If not collapsed&amp;nbsp;, call the collapsePanel Function to collapse the Panel.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Code would be&amp;nbsp; :&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Function To Collapse all CollapsiblePanels on a page , if not already collapsed.&lt;/span&gt;
&lt;span class="kwrd"&gt;function&lt;/span&gt; collapseAllCollapsiblePanels() {
    &lt;span class="kwrd"&gt;var&lt;/span&gt; currentBehavior = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
   &lt;span class="rem"&gt;//1) Find all instances of the CollapsiblePanel Behavior on the page.&lt;/span&gt;
    &lt;span class="rem"&gt;//Get all the Behaviors Present in the Page&lt;/span&gt;
    &lt;span class="kwrd"&gt;var&lt;/span&gt; allBehaviors = Sys.Application.getComponents() ;
    &lt;span class="rem"&gt;//Loop Through them&lt;/span&gt;
    &lt;span class="kwrd"&gt;for&lt;/span&gt;( &lt;span class="kwrd"&gt;var&lt;/span&gt; loopIndex = 0 ; loopIndex &amp;lt; allBehaviors.length; loopIndex++ ) {
        currentBehavior = allBehaviors[loopIndex];
    &lt;span class="rem"&gt;//For each behavior , check the Behavior Name &lt;/span&gt;
        &lt;span class="kwrd"&gt;if&lt;/span&gt;( currentBehavior.get_name() === &lt;span class="str"&gt;"CollapsiblePanelBehavior"&lt;/span&gt; ) {
      &lt;span class="rem"&gt;//If its of type CollapsiblePanelBehavior&lt;/span&gt;
        &lt;span class="rem"&gt;//3) Check if the Panel is Collapsed by calling the get_Collapsed() function.&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt;( !currentBehavior.get_Collapsed() ) {
            &lt;span class="rem"&gt;//4) If not collapsed , call the collapsePanel Function to collapse the Panel.&lt;/span&gt;
                currentBehavior.collapsePanel();
            }
        }
    }
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;You can use this approach in your applications  for any myriad number of reasons .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Hope this helps Someone out there.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3424908" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>How to : Use a Key Value Pair in your AutoCompleteExtender ( updated again... )</title><link>http://blogs.msdn.com/phaniraj/archive/2007/06/19/how-to-use-a-key-value-pair-in-your-autocompleteextender.aspx</link><pubDate>Tue, 19 Jun 2007 16:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3406114</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>62</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/3406114.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=3406114</wfw:commentRss><description>&amp;nbsp; 
&lt;P&gt;&lt;FONT size=2&gt;Hi all,&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;This has come up time and again on the asp.net&amp;nbsp; Ajax&amp;nbsp; forums and has become the Top Voted issue for the AutoCompleteExtender Work Items . I had some time the other day and set upon to write a fix for this .&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;How do you use&amp;nbsp;&amp;nbsp; it?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;FONT size=2&gt;1) Attach a handler to the itemSelected Event using the OnClientItemSelected property in&amp;nbsp; the ACE markup &lt;/FONT&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;ajaxToolkit:AutoCompleteExtender&lt;/SPAN&gt; &lt;SPAN class=attr&gt;runat&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="server"&lt;/SPAN&gt; 
            &lt;SPAN class=attr&gt;BehaviorID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AutoCompleteEx"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;ID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="autoComplete1"&lt;/SPAN&gt;
            &lt;SPAN class=attr&gt;TargetControlID&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="myTextBox"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;ServicePath&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="~/Services/AutoComplete.asmx"&lt;/SPAN&gt;               
            &lt;SPAN class=attr&gt;ServiceMethod&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="GetCompletionListKeyValuePair"&lt;/SPAN&gt;
            ......
            &lt;FONT size=4&gt;&lt;SPAN class=attr&gt;OnClientItemSelected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;="IAmSelected"&lt;/SPAN&gt;
        &lt;/FONT&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;
&lt;SPAN class=kwrd&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN class=html&gt;ajaxToolkit:AutoCompleteExtender&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;function&lt;/SPAN&gt; IAmSelected( source, eventArgs ) {
   alert( &lt;SPAN class=str&gt;" Key : "&lt;/SPAN&gt;+ eventArgs.get_text() +&lt;SPAN class=str&gt;"  Value :  "&lt;/SPAN&gt;+eventArgs.get_value()); 
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;P&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;2) The Server-Side Method :&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;The Server-Side Method will return an array of strings as before ,&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;You create KeyValue Pairs by calling the method :&lt;/FONT&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(&amp;lt;key&amp;gt;,&amp;lt;&lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;&amp;gt;);&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;P&gt;&lt;FONT size=2&gt;EX:&lt;/FONT&gt;&amp;nbsp; &lt;/P&gt;&lt;PRE class=csharpcode&gt;[WebMethod]

        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;[] GetCompletionList(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; prefixText, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; count)
        {

            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (count == 0)
            {

                count = 10;

            }

            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (prefixText.Equals(&lt;SPAN class=str&gt;"xyz"&lt;/SPAN&gt;))
            {

                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;[0];

            }

            Random random = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Random();

            List&amp;lt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;&amp;gt; items = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;&amp;gt;(count);

            &lt;SPAN class=kwrd&gt;for&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; i = 0; i &amp;lt; count; i++)
            {

                &lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt; c1 = (&lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt;)random.Next(65, 90);

                &lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt; c2 = (&lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt;)random.Next(97, 122);

                &lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt; c3 = (&lt;SPAN class=kwrd&gt;char&lt;/SPAN&gt;)random.Next(97, 122);

                items.Add(&lt;FONT color=#ff0000 size=4&gt;AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem&lt;/FONT&gt;(prefixText + c1 + c2 + c3, i.ToString()));

            }

            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; items.ToArray();

        }
&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;
&lt;PRE class=csharpcode&gt;The Display of the ACE does not change , it still remains the same :&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;Once you select an item from the DropDown of the ACE , you get an alert which shows you the value of the selectedItem.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;In Your applications , instead of the Alert , process some business logic as per your requirements.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;Hope this is an useful Addition.&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;P&gt;Download the Latest AjaxControlToolkit from : 
&lt;P&gt;&lt;A title=http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941 href="http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941" mce_href="http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941"&gt;http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4941&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;[Update ]&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You don't need to specify the UseKeyValuepairs attibute anymore ( in fact , its been removed :) ).&lt;/P&gt;
&lt;P&gt;The ACE script is intelligent enough to realize when Key/Value pairs are returned automatically.&lt;/P&gt;
&lt;P&gt;And also , the method CreateKeyvaluePair has been changed to CreateAutoCompleteItem.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3406114" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>Scripting Animations from the Ms Ajax AnimationExtender</title><link>http://blogs.msdn.com/phaniraj/archive/2007/05/31/scripting-animations-from-the-ms-ajax-animationextender.aspx</link><pubDate>Fri, 01 Jun 2007 00:54:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3013645</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/3013645.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=3013645</wfw:commentRss><description>&lt;h1&gt;&lt;/h1&gt; &lt;p&gt;An ignored / unknown / very useful&amp;nbsp; feature of the animation Framework is that it allows you to control the animation as its playing.&lt;/p&gt; &lt;p&gt;You can &lt;strong&gt;&lt;u&gt;Play, Pause , Resume , Stop and Quit&amp;nbsp;&lt;/u&gt;&lt;/strong&gt; an Animation Instance by using appropriate methods in JavaScript.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Setting up the Animation&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The Animation we will be playing is a Length Animation on a DIV element with ID "&lt;font color="#ff0000"&gt;divMovable&lt;/font&gt;".&lt;/p&gt; &lt;p&gt;The DIV will Increase in length from 200 px to 550px over a duration of 1.5 Seconds OnClick of the DIV.&lt;/p&gt; &lt;h3&gt;Markup For Div&lt;/h3&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="demoDivYellow"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    I Move Away
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;span class="kwrd"&gt;Markup for the Animation Extender&lt;/span&gt;&lt;/h3&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="AnimationExtender1"&lt;/span&gt; &lt;span class="attr"&gt;BehaviorID&lt;/span&gt;&lt;span class="kwrd"&gt;="controlledAnimation"&lt;/span&gt;
                        &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
             &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Length&lt;/span&gt; &lt;span class="attr"&gt;duration&lt;/span&gt;&lt;span class="kwrd"&gt;="1.5"&lt;/span&gt; &lt;span class="attr"&gt;fps&lt;/span&gt;&lt;span class="kwrd"&gt;="40"&lt;/span&gt; 
                            &lt;span class="attr"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;="style"&lt;/span&gt;  &lt;span class="attr"&gt;PropertyKey&lt;/span&gt;&lt;span class="kwrd"&gt;="height"&lt;/span&gt; 
                            &lt;span class="attr"&gt;StartValue&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt;  &lt;span class="attr"&gt;EndValue&lt;/span&gt;&lt;span class="kwrd"&gt;="550"&lt;/span&gt; 
                            &lt;span class="attr"&gt;unit&lt;/span&gt;&lt;span class="kwrd"&gt;="px"&lt;/span&gt; &lt;span class="attr"&gt;AnimationTarget&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
              &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Notice that the AnimationExtender has the BehaviorID assigned to be "&lt;font color="#0000ff"&gt;&lt;strong&gt;controlledAnimation&lt;/strong&gt;&lt;/font&gt;".&lt;/p&gt;
&lt;p&gt;We will be accessing the Control Methods using this BehaviorID.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Playing An Animation&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;You&amp;nbsp; can trigger an animation to start playing by calling the &lt;font color="#ff0000"&gt;&lt;strong&gt;play&lt;/strong&gt;&lt;/font&gt; method on&amp;nbsp;the Animation Extender Behavior .&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; playAnimation() {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; onclkBehavior = $find(&lt;span class="str"&gt;"controlledAnimation"&lt;/span&gt;).get_OnClickBehavior().get_animation();
            &lt;font color="#008040"&gt;&lt;font size="4"&gt;&lt;strong&gt;onclkBehavior.play();&lt;/strong&gt;&lt;/font&gt;
&lt;/font&gt;        }&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Pausing An Animation&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;You&amp;nbsp; can Pause an animation by calling the&amp;nbsp;&lt;font color="#ff0000"&gt;&lt;strong&gt;pause&lt;/strong&gt;&lt;/font&gt; method on&amp;nbsp;the Animation Extender Behavior .&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; pauseAnimation() {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; onclkBehavior = $find(&lt;span class="str"&gt;"controlledAnimation"&lt;/span&gt;).get_OnClickBehavior().get_animation();
            &lt;strong&gt;&lt;font color="#008000" size="4"&gt;onclkBehavior.pause();&lt;/font&gt;&lt;/strong&gt;
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Resuming a Paused Animation&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can Resume a Paused Animation by calling its &lt;font color="#ff0000"&gt;&lt;strong&gt;play&lt;/strong&gt;&lt;/font&gt; Method again :) .&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Stopping A Playing&amp;nbsp;Animation&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;You&amp;nbsp; can Stop&amp;nbsp;a playing animation by calling the&amp;nbsp;&lt;font color="#ff0000"&gt;&lt;strong&gt;stop &lt;/strong&gt;&lt;/font&gt;method on&amp;nbsp;the Animation Extender Behavior .&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; stopAnimation() {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; onclkBehavior = $find(&lt;span class="str"&gt;"controlledAnimation"&lt;/span&gt;).get_OnClickBehavior().get_animation();
            &lt;font color="#008040" size="4"&gt;&lt;strong&gt;onclkBehavior.stop();&lt;/strong&gt;&lt;/font&gt;
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Quitting A Playing Animation&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;You&amp;nbsp; can quit&amp;nbsp; playing an animation by calling the&amp;nbsp;&lt;font color="#ff0000"&gt;&lt;strong&gt;quit &lt;/strong&gt;&lt;/font&gt;method on&amp;nbsp;the Animation Extender Behavior .&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; quitAnimation() {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; onclkBehavior = $find(&lt;span class="str"&gt;"controlledAnimation"&lt;/span&gt;).get_OnClickBehavior().get_animation();
            &lt;font color="#008040" size="4"&gt;&lt;strong&gt;onclkBehavior.quit();&lt;/strong&gt;&lt;/font&gt;
        }&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;What's the Difference between Stop and Quit ?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Copied Text from the Remarks section of the &lt;strong&gt;&lt;u&gt;Quit&lt;/u&gt;&lt;/strong&gt; Function from AnimationBehavior.JS&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;"Quit differs from the stop function which will update the final state.  The
quit function is most useful for scenarios where you're toggling back and forth
between two animations , like those used in OnHoverOver or OnHoverOut, and
 you don't want to completely finish one animation if its counterpart is triggered"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;strong&gt;&lt;u&gt;Complete Sample&lt;/u&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true"%&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%@ Register Assembly="AjaxControlToolkit, Version=1.0.10123.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e"
    Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="Head1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Controlling Animation With JavaScript&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; onclkBehavior ;
        &lt;span class="kwrd"&gt;function&lt;/span&gt; pageLoad()
        {
            onclkBehavior = $find(&lt;span class="str"&gt;"controlledAnimation"&lt;/span&gt;).get_OnClickBehavior().get_animation();
        }
        &lt;span class="kwrd"&gt;function&lt;/span&gt; playAnimation() {
            
            onclkBehavior.play();
            $get(&lt;span class="str"&gt;"lblCurrentStatus"&lt;/span&gt;).innerText=&lt;span class="str"&gt;"Playing.."&lt;/span&gt;;
        }
        &lt;span class="kwrd"&gt;function&lt;/span&gt; pauseAnimation()
        {
        
           onclkBehavior.pause();
           $get(&lt;span class="str"&gt;"lblCurrentStatus"&lt;/span&gt;).innerText=&lt;span class="str"&gt;"Paused.."&lt;/span&gt;;
        }
        &lt;span class="kwrd"&gt;function&lt;/span&gt; stopAnimation() {
            onclkBehavior.stop();
            $get(&lt;span class="str"&gt;"lblCurrentStatus"&lt;/span&gt;).innerText=&lt;span class="str"&gt;"Stopped.."&lt;/span&gt;;
        }
        &lt;span class="kwrd"&gt;function&lt;/span&gt; quitAnimation()
        {
            $find(&lt;span class="str"&gt;"controlledAnimation"&lt;/span&gt;).get_OnClickBehavior().quit();
            $get(&lt;span class="str"&gt;"lblCurrentStatus"&lt;/span&gt;).innerText=&lt;span class="str"&gt;"Quit.."&lt;/span&gt;;
        }
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="frmScripting"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="purpleButtonClass"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="playAnimation()"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="btnPlayAnimation"&lt;/span&gt;
                           &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Play"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="purpleButtonClass"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="pauseAnimation()"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="btnPauseAnimation"&lt;/span&gt;
                           &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Pause"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="purpleButtonClass"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="stopAnimation()"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="btnStopAnimation"&lt;/span&gt;
                           &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Stop"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="purpleButtonClass"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="quitAnimation()"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="btnQuitAnimation"&lt;/span&gt;
                           &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Quit"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="lblCurrentStatus"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;span&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="demoDivYellow"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    I Move Away
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="AnimationExtender1"&lt;/span&gt; &lt;span class="attr"&gt;BehaviorID&lt;/span&gt;&lt;span class="kwrd"&gt;="controlledAnimation"&lt;/span&gt;
    &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Length&lt;/span&gt; &lt;span class="attr"&gt;duration&lt;/span&gt;&lt;span class="kwrd"&gt;="1.5"&lt;/span&gt; &lt;span class="attr"&gt;fps&lt;/span&gt;&lt;span class="kwrd"&gt;="40"&lt;/span&gt; 
                    &lt;span class="attr"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;="style"&lt;/span&gt;  &lt;span class="attr"&gt;PropertyKey&lt;/span&gt;&lt;span class="kwrd"&gt;="height"&lt;/span&gt; 
                    &lt;span class="attr"&gt;StartValue&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt;  &lt;span class="attr"&gt;EndValue&lt;/span&gt;&lt;span class="kwrd"&gt;="550"&lt;/span&gt; 
                    &lt;span class="attr"&gt;unit&lt;/span&gt;&lt;span class="kwrd"&gt;="px"&lt;/span&gt; &lt;span class="attr"&gt;AnimationTarget&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;font color="#000000" size="4"&gt;Hope this helps someone out there!&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3013645" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>My Update to the AutoCompleteExtender</title><link>http://blogs.msdn.com/phaniraj/archive/2007/05/24/my-update-to-the-autocompleteextender.aspx</link><pubDate>Fri, 25 May 2007 00:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2851307</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2851307.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2851307</wfw:commentRss><description>&lt;p&gt;HI ,&lt;/p&gt; &lt;p&gt;&amp;nbsp;I was asked to work on the &lt;strong&gt;&lt;u&gt;beta&amp;nbsp;&amp;nbsp;&lt;/u&gt;&lt;/strong&gt;&amp;nbsp; &lt;a href="http://www.codeplex.com/AtlasControlToolkit/Wiki/View.aspx?title=PatchUtility&amp;amp;referringTitle=PatchCredit"&gt;AjaxControlToolkit Patch Utility&lt;/a&gt; Tool from the &lt;a href="http://forums.asp.net/1022.aspx"&gt;Asp.Net AjaxControlToolkit Forums&lt;/a&gt; .&lt;/p&gt; &lt;p&gt;&amp;nbsp; My first fix , which allows the first result in a result set to be automatically selected&amp;nbsp; ( if chosen to ) , has been made part of the codebase &lt;/p&gt; &lt;p&gt;and will be in the next release of the Toolkit .&lt;/p&gt; &lt;p&gt;Youc an see me in the &lt;a href="http://www.codeplex.com/AtlasControlToolkit/Wiki/View.aspx?title=PatchHallOfFame&amp;amp;referringTitle=PatchCredit"&gt;Hall of Fame&lt;/a&gt; .&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/FRSAC%5B8%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="270" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/FRSAC_thumb%5B6%5D.jpg" width="901" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Default Behavior , With "FirstRowSelected" set to &lt;strong&gt;&lt;u&gt;false.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/FRSAC3%5B4%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="177" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/FRSAC3_thumb%5B2%5D.jpg" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Behavior after My patch&amp;nbsp;is part of the AjaxCotnrolToolkit , With "FirstRowSelected" set to &lt;strong&gt;&lt;u&gt;true.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/ACEFRS1%5B10%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="270" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/MyUpdatetotheAutoCompleteExtender_FF9/ACEFRS1_thumb%5B8%5D.jpg" width="487" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Link to the WorkItem my fix resolves&amp;nbsp;&amp;nbsp; &lt;a href="http://www.codeplex.com/AtlasControlToolkit/WorkItem/View.aspx?WorkItemId=9305"&gt;Be able to have the first row selected Title is required&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Hope this helps !!!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2851307" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>Some Useful Links from the  ASP.NET Ajax Forums</title><link>http://blogs.msdn.com/phaniraj/archive/2007/05/10/some-useful-links-from-the-asp-net-ajax-forums.aspx</link><pubDate>Thu, 10 May 2007 23:50:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2529912</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2529912.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2529912</wfw:commentRss><description>&lt;p&gt;Hi ,&lt;/p&gt; &lt;p&gt;Over the past couple of months, I have been actively contributing to the Asp.net Ajax forums and have come across some very &lt;/p&gt; &lt;p&gt;&amp;nbsp;weird and challenging problems to solve.Anyone who's been at the forums can tell, the community is VERY Active and helpful when it comes to helping&lt;/p&gt; &lt;p&gt;out your fellow developer . Below is a list of some FAQs that I often encountered and was able to address on the&amp;nbsp; Forums .&lt;/p&gt; &lt;p&gt;Helping someone out with a brain-bender they are stuck on and seeing the issue resolved after some brainstorming is VERY satisfying.&lt;/p&gt; &lt;p&gt;Why am I doing this ? &lt;/p&gt; &lt;p&gt;There is a lot of content on the Forums and I wanna share what I learnt and was able to share with my fellow devs.&lt;/p&gt; &lt;p&gt;Also, I could have blogged about this but felt that its better to point you guys to the place where we learnt about this .&lt;/p&gt; &lt;p&gt;You might find some content duplicated from my Blog , as far as possible I have tried to avoid that and give you guys the unique ones that I have seen.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a title="Tough ModalPopup Extender Question ( My Favorite )" href="http://forums.asp.net/thread/1578347.aspx" target="_blank"&gt;Tough ModalPopup Extender Question ( My Favorite )&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Assigning Multiple Triggers to an AnimationExtender" href="http://forums.asp.net/thread/1679613.aspx" target="_blank"&gt;Assigning Multiple Triggers to an AnimationExtender&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Execute JavaScript on the client Side Before Showing a ModalPopup" href="http://forums.asp.net/thread/1667827.aspx"&gt;Execute JavaScript on the client Side Before Showing a ModalPopup&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://forums.asp.net/thread/1457306.aspx" target="_blank"&gt;Expand Accordion Pane WITHOUT clicking the header&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Animate an Element's Property in JavaScript" href="http://forums.asp.net/thread/1623283.aspx" target="_blank"&gt;Animate an Element's Property in JavaScript&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Using client side calculated sizes for the Resize animation" href="http://forums.asp.net/thread/1612703.aspx" target="_blank"&gt;Using client side calculated sizes for the Resize animation&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Prevent repeat animation (animationextender) / ConditionalAnimation" href="http://forums.asp.net/thread/1621738.aspx" target="_blank"&gt;Prevent repeat animation (animationextender) / ConditionalAnimation&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="How do I use Animation without server-side controls? (mission impossible??)" href="http://forums.asp.net/thread/1578357.aspx" target="_blank"&gt;How do I use Animation without server-side controls? (mission impossible??)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Hyperlink to a page with Accordion and opening a specific pane" href="http://forums.asp.net/thread/1601837.aspx" target="_blank"&gt;Hyperlink to a page with Accordion and opening a specific pane&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Change visible Accordion Pane using  JavaScript" href="http://forums.asp.net/thread/1597085.aspx" target="_blank"&gt;Change visible Accordion Pane using JavaScript&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Combine Animate and Modal dialog functionality" href="http://forums.asp.net/thread/1597036.aspx" target="_blank"&gt;Combine Animate and Modal dialog functionality&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Create ModalPopupExtender control dynamically client side" href="http://forums.asp.net/thread/1581774.aspx" target="_blank"&gt;Create ModalPopupExtender control dynamically client side&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As time goes by , I will be putting up another list of issues that I helped on , &lt;/p&gt; &lt;p&gt;these are the unique ( sort-of ) ones that I could find out of all the ones that I answered .&lt;/p&gt; &lt;p&gt;If you are not a part of the Forums , get yourself an account and start helping out !&lt;/p&gt; &lt;p&gt;Hope this helps someone out there !&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2529912" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/ModalPopupExtender/default.aspx">ModalPopupExtender</category></item><item><title>HowTo : Change Visible Tab Using JavaScript in the MS AJAX TabControl</title><link>http://blogs.msdn.com/phaniraj/archive/2007/04/16/howto-change-visible-tab-using-javascript-in-the-ms-ajax-tabcontrol.aspx</link><pubDate>Tue, 17 Apr 2007 01:20:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2157741</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2157741.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2157741</wfw:commentRss><description>&lt;p&gt;I have seen this in the forums a lot ..&lt;/p&gt; &lt;p&gt;"How do I change the Visible Tab in the MS AJAX TabControl on the Client-Side using Javascript ?"&lt;/p&gt; &lt;p&gt;Well, I have posted it several times and I think Its time I'd rather point people to a link than write the same piece again and again :-).&lt;/p&gt; &lt;p&gt;So, here you go .....&lt;/p&gt; &lt;p&gt;1) Consider that you have a TabControl on your page by the name of "MyTabs" . &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabContainer&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="MyTabs"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
//blah blah blah
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabContainer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;2) &lt;font face="tre"&gt;You can access the Methods exposed by the TabControl by accessing its  behavior.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tre"&gt;   The Behavior is not accessible easily . &lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tre"&gt;   The  TabControl has a property called as "control" that provides a way to access the Client-Side Methods of the &lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tre"&gt;   TabControl.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;   EX: var&lt;/span&gt; tabBehavior = $get(&lt;span class="str"&gt;'&amp;lt;%=MyTabs.ClientID%&amp;gt;'&lt;/span&gt;).control; &lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="tre"&gt;3) once you have a handle to the Tabbehavior , you can use the "set_activeTab" method to set the Active Tab of the TabControl.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;   EX:tabBehavior.set_activeTabIndex(1); &lt;/pre&gt;&lt;pre class="csharpcode"&gt;4)  You are Done !!&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Complete  Code for the ChangeTab Function :&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;lt;script language=&lt;span class="str"&gt;"javascript"&lt;/span&gt;&amp;gt; 

&lt;span class="kwrd"&gt;function&lt;/span&gt; changeTab( tabIndex ){ 
&lt;span class="kwrd"&gt;var&lt;/span&gt; tabBehavior = $get(&lt;span class="str"&gt;'&amp;lt;%=MyTabs.ClientID%&amp;gt;'&lt;/span&gt;).control; 
tabBehavior.set_activeTabIndex(tabIndex); 
}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;lt;/script&amp;gt; 
&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Complete Example is posted below :&lt;/pre&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolKit" %&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Select Tabs By Script&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="frmAccessAccordion"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;function&lt;/span&gt; changeTab(){ 
        &lt;span class="rem"&gt;//Get The Index of the Current Selected Index in the DropDownList&lt;/span&gt;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; tabIndex = parseInt( $get(&lt;span class="str"&gt;'&amp;lt;%=dlTabindex.ClientID%&amp;gt;'&lt;/span&gt;).value );
        &lt;span class="rem"&gt;//Get a Handle to the Tab Behavior &lt;/span&gt;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; tabBehavior = $get(&lt;span class="str"&gt;'&amp;lt;%=MyTabs.ClientID%&amp;gt;'&lt;/span&gt;).control; 
        &lt;span class="rem"&gt;//Set the Currently Visible Tab &lt;/span&gt;
        tabBehavior.set_activeTabIndex(tabIndex); 
        }
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        Select Tab To Show :
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="dlTabindex"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="One"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Two"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Three"&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ListItem&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:DropDownList&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnDynamicAnimate"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Button"&lt;/span&gt; &lt;span class="attr"&gt;OnClientClick&lt;/span&gt;&lt;span class="kwrd"&gt;="changeTab();return false;"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="scrpManager"&lt;/span&gt; &lt;span class="attr"&gt;EnablePartialRendering&lt;/span&gt;&lt;span class="kwrd"&gt;="true"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabContainer&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="MyTabs"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="tabOne"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    One
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Tab One
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="tabTwo"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Two
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Tab Two
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="btnServer"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Submit"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="tabThree"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Three
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;HeaderTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    Tab Three
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Button&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Button1"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Submit"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ContentTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolKit:TabContainer&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2157741" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Components/default.aspx">Components</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/TABContainer/default.aspx">TABContainer</category></item><item><title>MS AJAX AnimationExtender : How Many Ways Do I Play thee ? ( Updated )</title><link>http://blogs.msdn.com/phaniraj/archive/2007/04/13/animations-how-many-ways-do-i-call-thee.aspx</link><pubDate>Fri, 13 Apr 2007 17:23:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2115203</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2115203.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2115203</wfw:commentRss><description>&lt;p&gt;We will discuss the various ways&amp;nbsp; in which one can animate a visual element using the MS AJAX Animation.&lt;/p&gt; &lt;p&gt;The Example would be to resize a div named "queryReply" to have a height of 100px and width of 200px On&amp;nbsp;Click of the&amp;nbsp; Div&amp;nbsp;.&lt;/p&gt; &lt;p&gt;1) &lt;strong&gt;The Simplest Way&amp;nbsp; , Markup &lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="animateReplyPanes"&lt;/span&gt; 
        &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="queryReply"&lt;/span&gt; &lt;span class="attr"&gt;BehaviorID&lt;/span&gt;&lt;span class="kwrd"&gt;="animateReplyPanesBehavior"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Resize&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="100"&lt;/span&gt; &lt;span class="attr"&gt;FPS&lt;/span&gt;&lt;span class="kwrd"&gt;="25"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;duration&lt;/span&gt;&lt;span class="kwrd"&gt;="0.3"&lt;/span&gt; &lt;span class="attr"&gt;unit&lt;/span&gt;&lt;span class="kwrd"&gt;="px"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;This would be the easiest way to&amp;nbsp;attach &amp;nbsp;an animation (&amp;nbsp;ReSize ) to a control&amp;nbsp; ( QueryReply )&amp;nbsp;on an Event ( &lt;span class="html"&gt;OnClick &lt;/span&gt;) .&lt;/p&gt;
&lt;p&gt;When the Div &amp;nbsp;is clicked , the Control "queryReply" is resized to have a height of 100 px and a width of 200px.&lt;/p&gt;
&lt;p&gt;2) The "Not So Simple" Ways via javascript&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a) Call the Static PLAY Method &amp;nbsp;of the Animation Framework to Animate the Control .&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;&amp;lt;!--AjaxControlToolkit.Animation.ResizeAnimation.play(target, duration, fps, width, height, unit);--&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Play the Animation by calling its static methods&lt;/span&gt;
AjaxControlToolkit.Animation.ResizeAnimation.play( $get(&lt;span class="str"&gt;"queryReply"&lt;/span&gt;) , 0.3 , 25 , 100 , 300 , &lt;span class="str"&gt;"px"&lt;/span&gt; );
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;The Animation will play immediately after this line.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;b) Create an Instance of the Client-Side Animation Extenders to Animate the Control .&lt;/strong&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;&amp;lt;!--Constructor: new AjaxControlToolkit.Animation.ResizeAnimation(target, duration, fps, width, height, unit); --&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Create an instance of the ReSize Animation&lt;/span&gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; resizeAnimation = &lt;span class="kwrd"&gt;new&lt;/span&gt; AjaxControlToolkit.Animation.ResizeAnimation( $get(&lt;span class="str"&gt;"queryReply"&lt;/span&gt;) , 0.3 , 25 , 100 , 300 , &lt;span class="str"&gt;"px"&lt;/span&gt;);
&lt;span class="rem"&gt;//Play the Animation just created&lt;/span&gt;
resizeAnimation.play(); &lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;c) Selectively playing the Animation Already defined in Markup for an AnimationExtender on the Page.&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Lets say that you already have animation defined on your page in markup and you want to trigger the animation using Script .&lt;/div&gt;
&lt;div&gt;You achieve this by :&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp; 1) Get a handle to the AnimationExtender's Behavior by using the "$find" method.&lt;/div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Get a handle to the Animation Behavior&lt;/span&gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; behaveYourself       = $find(&lt;span class="str"&gt;"animateReplyPanesBehavior"&lt;/span&gt;);
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;div&gt;&amp;nbsp;&amp;nbsp; 2) Based on where the animation is defined ( Onload , OnClick , OnHover&amp;nbsp;, whatever&amp;nbsp;), get a handle to the child Animation Definition.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Get the Animation to be played onClick of the TargetControl &lt;/span&gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; onClickAnimation     = behaveYourself.get_OnClickBehavior();
&lt;span class="rem"&gt;//Get the Animation to be played onLoad of the TargetControl &lt;/span&gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; onLoadAnimation     = behaveYourself.get_OnLoadBehavior();
&lt;span class="rem"&gt;//Get the Animation to be played onHover of the TargetControl &lt;/span&gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; onHoverAnimation     = behaveYourself.get_OnHoverBehavior();&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;div&gt;&amp;nbsp;&amp;nbsp; 3) Call the "Play" method on the&amp;nbsp; required Animations Definition.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Play the Animation defined  onClick of the TargetControl &lt;/span&gt;
onClickAnimation.play();
&lt;span class="rem"&gt;//Play the Animation defined  onLoad of the TargetControl &lt;/span&gt;
onLoadAnimation.play();
&lt;span class="rem"&gt;//Play the Animation defined  onHover of the TargetControl &lt;/span&gt;
onHoverAnimation.play();&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;d) Set the JSON String for an existing Animation Extender &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Once you declare the Markup as above, you can access the animations that are assigned to the Extender by using the "get_&amp;lt;Event&amp;gt;" Methods on the Behavior .&lt;/p&gt;
&lt;p&gt;EX:&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Get a handle to the Animation Behavior&lt;/span&gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; behaveYourself       = $find(&lt;span class="str"&gt;"animateReplyPanesBehavior"&lt;/span&gt;);
&lt;span class="rem"&gt;//Get the Animation to be played onClick of the TargetControl &lt;/span&gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; onClickAnimation     = behaveYourself.get_OnClickBehavior();&lt;/pre&gt;&amp;nbsp;&lt;/div&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;pre class="csharpcode"&gt;Once you have the respective Animation Behavior , you can use the "set_&amp;lt;EVENT&amp;gt;" method to set the Animation JSON String .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The Json String is constucted like this :&lt;/pre&gt;&lt;pre class="csharpcode"&gt;"{
     "AnimationName":"ReSize",
     "Height":"100px",&lt;/pre&gt;&lt;pre class="csharpcode"&gt;     "width":"200px",   
     "unit":"px",
     "duration":"0.3",
     "AnimationTarget":"queryReply",
     "AnimationChildren":[]
 }"&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The AnimationName is the Name of the Animation that you want run .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The AnimationChildren is supposed to be an array of child animations .&lt;/pre&gt;&lt;pre class="csharpcode"&gt;The ReSize animation cannot have Child Animations, so the array is empty.&lt;/pre&gt;&lt;pre class="csharpcode"&gt;So, once you have the JSON String, we use the "Set_&amp;lt;Event&amp;gt;" function to set the JSON property of the animation.&lt;/pre&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Construct the JSON String&lt;/span&gt;
&lt;span class="kwrd"&gt;var&lt;/span&gt; jsonAnimationString =&lt;span class="str"&gt;"{\"AnimationName\":\"ReSize\",\"Height\":\"100px\", "&lt;/span&gt;+
&lt;span class="str"&gt;"\"Width\":\"200\",\"unit\":\"px\",\"duration\":\"0.1"&lt;/span&gt; +
&lt;span class="str"&gt;"\",\"AnimationTarget\":\"queryReply\",\"AnimationChildren\":[]}"&lt;/span&gt;;
&lt;span class="rem"&gt;//Set the JSON of the AnimationExtender to be the JSON String&lt;/span&gt;
behaveYourself.set_OnClick( jsonAnimationString );
&lt;span class="rem"&gt;//Play the Animation&lt;/span&gt;
onClickAnimation.play();&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Complete Example :&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="asp"&gt;&amp;lt;%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Ways to Call Animations&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="frmAnimations"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        
            &lt;span class="kwrd"&gt;function&lt;/span&gt; callStaticMethods(){
            &lt;span class="rem"&gt;//Play the Animation by calling its static methods&lt;/span&gt;
            AjaxControlToolkit.Animation.ResizeAnimation.play( $get(&lt;span class="str"&gt;"queryReply"&lt;/span&gt;) , 0.2 , 45 , 200 , 100 , &lt;span class="str"&gt;"px"&lt;/span&gt; );
            }
            
            &lt;span class="kwrd"&gt;function&lt;/span&gt; createInstanceAndPlay(){
            &lt;span class="rem"&gt;//Create an instance of the ReSize Animation&lt;/span&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; resizeAnimation = &lt;span class="kwrd"&gt;new&lt;/span&gt; AjaxControlToolkit.Animation.ResizeAnimation( $get(&lt;span class="str"&gt;"queryReply"&lt;/span&gt;) , 0.2 , 45 , 200 , 100 , &lt;span class="str"&gt;"px"&lt;/span&gt;);
            &lt;span class="rem"&gt;//Play the Animation just created&lt;/span&gt;
            resizeAnimation.play(); 
            }
            
            &lt;span class="kwrd"&gt;function&lt;/span&gt; SetJSONStringThenPlay(){
            &lt;span class="rem"&gt;//Get a handle to the Animation Behavior&lt;/span&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; behaveYourself       = $find(&lt;span class="str"&gt;"animateReplyPanesBehavior"&lt;/span&gt;);
            &lt;span class="rem"&gt;//Get the Animation to be played onClick of the TargetControl &lt;/span&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; onClickAnimation     = behaveYourself.get_OnClickBehavior();
            &lt;span class="rem"&gt;//Construct the JSON String&lt;/span&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; jsonAnimationString =&lt;span class="str"&gt;"{\"AnimationName\":\"ReSize\",\"Height\":\"100px\", "&lt;/span&gt;+
            &lt;span class="str"&gt;"\"Width\":\"200\",\"unit\":\"px\",\"duration\":\"0.1"&lt;/span&gt; +
            &lt;span class="str"&gt;"\",\"AnimationTarget\":\"queryReply\",\"AnimationChildren\":[]}"&lt;/span&gt;;
            &lt;span class="rem"&gt;//Set the JSON of the AnimationExtender to be the JSON String&lt;/span&gt;
            behaveYourself.set_OnClick( jsonAnimationString );
            &lt;span class="rem"&gt;//Play the Animation&lt;/span&gt;
            onClickAnimation.play();
            }
            
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Call Static Play Method"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="callStaticMethods();"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Create Instance And Play"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="createInstanceAndPlay();"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="button"&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;="Set JSON String then Play"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="SetJSONStringThenPlay();"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="queryReply"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="background-color: #ffcc00; position: absolute;
            top: 100px; left: 100px; height: 300px; width: 300px"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            Click me to resize me ( Uses Markup )
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="ScriptManager1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="animateReplyPanes"&lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="queryReply"&lt;/span&gt;
            &lt;span class="attr"&gt;BehaviorID&lt;/span&gt;&lt;span class="kwrd"&gt;="animateReplyPanesBehavior"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Resize&lt;/span&gt; &lt;span class="attr"&gt;height&lt;/span&gt;&lt;span class="kwrd"&gt;="100"&lt;/span&gt; &lt;span class="attr"&gt;width&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;duration&lt;/span&gt; &lt;span class="kwrd"&gt;="0.2"&lt;/span&gt; &lt;span class="attr"&gt;fps&lt;/span&gt;&lt;span class="kwrd"&gt;="45"&lt;/span&gt; &lt;span class="attr"&gt;unit&lt;/span&gt;&lt;span class="kwrd"&gt;="px"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Resize&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Hope I helped someone out there looking For this information .&lt;/p&gt;
&lt;p&gt;Well, Happy Coding !!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2115203" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>HowTo : Customize Rendering of AutoCompleteExtender 1</title><link>http://blogs.msdn.com/phaniraj/archive/2007/04/09/howto-customize-rendering-of-autocompleteextender-1.aspx</link><pubDate>Mon, 09 Apr 2007 19:16:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2061868</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/2061868.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=2061868</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Registering your own handlers when Items in the SearchResults are Selected&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Hi,&lt;/p&gt; &lt;p&gt;Quite a few people have a list of changes that they want made to the AutoCompleteExtender , and the asp.net Ajax Team is working quite dilligently to solving most of these &lt;/p&gt; &lt;p&gt;in the next toolkit release .&lt;/p&gt; &lt;p&gt;I will tackle a few of the issues for those who dont want to wait until the next toolkit release.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Registering your own handlers when Items in the SearchResults are Selected.  &lt;li&gt;Specifying your own template for how the data should be displayed.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;We will discusss Point #2 in My Next&amp;nbsp; Blog post .&lt;/p&gt; &lt;p&gt;We will achieve these functionalities by modifying the source of the AjaxControlToolkit for the File "AutoCompleteBehavior.js".&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;1.Registering your own handlers when Items in the SearchResults are Selected.&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To achieve this , we will have to add/modify certain scripts.&lt;/p&gt; &lt;p&gt;&amp;nbsp;Lets look at the changes now .&lt;/p&gt; &lt;p&gt;1. Add a member to the class called "&lt;strong&gt;customClickHandler&lt;/strong&gt;" , which will store the Event handler to be called when an item in the list is selected.&lt;/p&gt; &lt;div&gt;&lt;pre class="csharpcode"&gt;AjaxControlToolkit.AutoCompleteBehavior.initializeBase(&lt;span class="kwrd"&gt;this&lt;/span&gt;, [element]);
Blah , blah , blah , existing declarations
&lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
}
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;2. Provide a way for Users to specify the Eventhandler , add a function called &lt;strong&gt;"set_ClickCallBack".&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;AjaxControlToolkit.AutoCompleteBehavior.prototype = {
blah,blah, existing functions
set_ClickCallBack:&lt;span class="kwrd"&gt;function&lt;/span&gt;(evthandler){
    &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler = Function.createDelegate(&lt;span class="kwrd"&gt;this&lt;/span&gt;, evthandler);
   }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;3.Wherever the&amp;nbsp; extender's Default onclick hanlder is called, replace with this handler.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;_onListMouseDown&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;_onListMouseDown: &lt;span class="kwrd"&gt;function&lt;/span&gt;(ev) {
   &lt;span class="kwrd"&gt;if&lt;/span&gt; (ev.target !== &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement) {
       &lt;span class="kwrd"&gt;if&lt;/span&gt;( &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler != &lt;span class="kwrd"&gt;null&lt;/span&gt; ){
             &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler( ev.target );
       }
       &lt;span class="kwrd"&gt;else&lt;/span&gt;{
           &lt;span class="kwrd"&gt;this&lt;/span&gt;._setText(ev.target.firstChild.nodeValue);
           }
       }
   },&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;_onKeyDown&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;_onKeyDown: &lt;span class="kwrd"&gt;function&lt;/span&gt;(ev) {
        &lt;span class="kwrd"&gt;var&lt;/span&gt; k = ev.keyCode ? ev.keyCode : ev.rawEvent.keyCode;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (k === Sys.UI.Key.esc) {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._hideCompletionList();
            ev.preventDefault();
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (k === Sys.UI.Key.up) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex &amp;gt; 0) {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex--;
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._highlightItem(&lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.childNodes[&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex]);
                ev.preventDefault();
            }
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (k === Sys.UI.Key.down) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex &amp;lt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.childNodes.length - 1)) {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex++;
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._highlightItem(&lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.childNodes[&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex]);
                ev.preventDefault();
            }
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (k === Sys.UI.Key.enter) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex !== -1) {
            &lt;span class="rem"&gt;//Call Custom Click Handler if registered&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt;( &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler == &lt;span class="kwrd"&gt;null&lt;/span&gt; ){
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._setText(&lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement.childNodes[&lt;span class="kwrd"&gt;this&lt;/span&gt;._selectIndex].firstChild.nodeValue);}
                &lt;span class="kwrd"&gt;else&lt;/span&gt; {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;._customClickHandler( &lt;span class="kwrd"&gt;this&lt;/span&gt;._completionListElement );
                }
                
                ev.preventDefault();
            }
        }
        
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (k !== Sys.UI.Key.tab) {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._timer.set_enabled(&lt;span class="kwrd"&gt;true&lt;/span&gt;);
        }
    },&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;How do you use this after modification in your applications ?&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the behaviorID of the AutoCompleteExtender is "customAutoComplete".&lt;/p&gt;
&lt;p&gt;The Code to hookup the Custom Click handler is :&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt;  pageLoad(){
$find(&lt;span class="str"&gt;"customAutoComplete"&lt;/span&gt;).set_ClickCallBack( customClickhandler ); 
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;customClickHandler is a javascript Function .&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; customClickhandler( clickedElement ){
&lt;span class="rem"&gt;//Your Code here&lt;/span&gt;
}
&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2061868" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AutoCompleteExtender/default.aspx">AutoCompleteExtender</category></item><item><title>Expirements with Ms AJAX 1 : Plot a Path and follow it</title><link>http://blogs.msdn.com/phaniraj/archive/2007/03/26/expirements-with-ms-ajax-1-plot-a-path-and-follow-it.aspx</link><pubDate>Mon, 26 Mar 2007 11:50:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1950974</guid><dc:creator>PhaniRajuYN</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/phaniraj/comments/1950974.aspx</comments><wfw:commentRss>http://blogs.msdn.com/phaniraj/commentrss.aspx?PostID=1950974</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterEditableSmartContent" id="d49da610-fc34-4988-88d9-3c0a788fd878:e1993fb9-3c44-454f-802d-f718bef150d4" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;embed name="msn_soapbox" pluginspage="http://macromedia.com/go/getflashplayer" src="http://images.soapbox.msn.com/flash/soapbox1_1.swf" width="412" height="362" type="application/x-shockwave-flash" quality="high" wmode="transparent" flashvars="c=v&amp;amp;v=62373c16-4fc1-49f1-9847-edb2c429952a"&gt;&lt;/embed&gt;&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;While working on some documentation and presentations for MS AJAX Animation ( wait for it , its gonna rock !!&amp;nbsp;) , I made what you see in the demo video.&lt;/p&gt; &lt;p&gt;Its basic premise is this :&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Allow the User to plot points on a plane  &lt;li&gt;Then trigger an animation that goes over all the points&amp;nbsp; and stops&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Why do this ?&lt;/p&gt; &lt;p&gt;No&amp;nbsp;Perceptible use , pure fun factor&amp;nbsp;.&lt;/p&gt; &lt;p&gt;I just though that it'd be cool to control an animation by clicking on points and asking an element to go to those points .&lt;/p&gt; &lt;p&gt;Well, here you have it .&lt;/p&gt; &lt;p&gt;Once the demo is hosted, you can see the same as an online app.&lt;/p&gt; &lt;p&gt;Take a look at a screenshot .&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/1528719273ab_C948/PlotaPath%5B4%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="400" src="http://blogs.msdn.com/blogfiles/phaniraj/WindowsLiveWriter/1528719273ab_C948/PlotaPath_thumb%5B2%5D.jpg" width="516" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Lets see how we can achieve this ..&lt;/p&gt; &lt;p&gt;We need the following functionality &lt;/p&gt; &lt;ol&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp; Allow the User to plot an arbitrary number of points on a plane  &lt;li&gt;&amp;nbsp; Create an animation that moves to all the points.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;1.Allow the User to plot an arbitrary number of points on a plane &lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;The "Plane"&amp;nbsp; would be a DIV element on the page. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="pathPallette"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;&amp;nbsp;The user plots a point on the plane by clicking on the plane.&lt;/p&gt;
&lt;p&gt;We will have a global collection of points called pointsInpath which will be a javaScript array .&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; pointsInPath = &lt;span class="kwrd"&gt;new&lt;/span&gt; Array();&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;We can attach an eventhandler to the Click event of the Div by using the $addHandler function of the Ms AJAX framework&amp;nbsp; explained &lt;a href="http://ajax.asp.net/docs/ClientReference/Global/AddHandlerShortcutMethod.aspx"&gt;Here&lt;/a&gt;&amp;nbsp;.&lt;/p&gt;&lt;pre class="csharpcode"&gt;Syntax: $addHandler(element, eventName, handler);&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;$addHandler($get(&lt;span class="str"&gt;"pathPallette"&lt;/span&gt;),&lt;span class="str"&gt;"click"&lt;/span&gt;,markPoint);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;We will now define the function "markPoint".&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; markPoint(eventArg)&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; evt = window.&lt;span class="kwrd"&gt;event&lt;/span&gt; || eventArg;   &lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; xCoOrd = evt.clientX ;&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; yCoOrd = evt.clientY ;&lt;/pre&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;pre class="alt"&gt;    Addpoint( xCoOrd , yCoOrd );&lt;/pre&gt;&lt;pre&gt;    createMarker( xCoOrd - $get(&lt;span class="str"&gt;"pathPallette"&lt;/span&gt;).offsetLeft , yCoOrd - $get(&lt;span class="str"&gt;"pathPallette"&lt;/span&gt;).offsetTop );&lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;MarkPoint&amp;nbsp; calls 2 functions .&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AddPoint&amp;nbsp; , to add the point to a collection of points 
&lt;li&gt;Createmarker ,to&amp;nbsp; mark the spot as a point on the plane which will be visited by the Animated element&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;AddPoint&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; Addpoint( xCoOrd,yCoOrd)&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;    anyMorePoints= &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;    pointsInPath[index++] = &lt;span class="str"&gt;"{\"X\" : \""&lt;/span&gt;+xCoOrd +&lt;span class="str"&gt;"\",\"Y\":\""&lt;/span&gt;+yCoOrd +&lt;span class="str"&gt;"\"}"&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;The AddPoint function recieves the X and Y co-ordinates of the Point in the Element's Path.&lt;/p&gt;
&lt;p&gt;Add the Point to the existing points collection.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Createmarker &lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; createMarker( xCoOrd,yCoOrd )&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; newmarker = document.createElement(&lt;span class="str"&gt;"SPAN"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;    newmarker.id = &lt;span class="str"&gt;"marker"&lt;/span&gt;+markeridCounter;    &lt;/pre&gt;&lt;pre class="alt"&gt;    newmarker.className =&lt;span class="str"&gt;"white"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;    newmarker.innerText = markeridCounter;&lt;/pre&gt;&lt;pre class="alt"&gt;    $get(&lt;span class="str"&gt;"pathPallette"&lt;/span&gt;).appendChild( newmarker );&lt;/pre&gt;&lt;pre&gt;    Sys.UI.DomElement.setLocation( newmarker , xCoOrd , yCoOrd );&lt;/pre&gt;&lt;pre class="alt"&gt;    markeridCounter++;&lt;/pre&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;This Function creates a &amp;lt;SPAN&amp;gt; element , writes the point # in the span , and positions it in the plane.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;2.Create an animation that moves to all the points&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;u&gt;Basic algorithm for this step&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; Get the Point to navigate to 
&lt;li&gt;&amp;nbsp;&amp;nbsp; Set the animation to move to the next point 
&lt;li&gt;&amp;nbsp; Play the animation until there are no more points left &lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The Element that will move to all the points will be another div ( "divMovable" )&amp;nbsp;with a background color&amp;nbsp; assigned to it &lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="height: 15px; width: 15px; position: absolute;
          top: 300px; left: 300px; background-color: #ffcc00;"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="attr"&gt;&amp;amp;nbsp;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The Animation Markup would be to use the Move Animation to move the Element along the points.&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="AnimationExtender1"&lt;/span&gt; &lt;span class="attr"&gt;BehaviorID&lt;/span&gt;&lt;span class="kwrd"&gt;="controlledAnimation"&lt;/span&gt;
            &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Move&lt;/span&gt; &lt;span class="attr"&gt;relative&lt;/span&gt;&lt;span class="kwrd"&gt;="false"&lt;/span&gt;  &lt;span class="attr"&gt;duration&lt;/span&gt;&lt;span class="kwrd"&gt;="0.2"&lt;/span&gt; &lt;span class="attr"&gt;fps&lt;/span&gt;&lt;span class="kwrd"&gt;="40"&lt;/span&gt;   
                        &lt;span class="attr"&gt;horizontalScript&lt;/span&gt; &lt;span class="kwrd"&gt;="getX()"&lt;/span&gt; &lt;span class="attr"&gt;verticalScript&lt;/span&gt; &lt;span class="kwrd"&gt;="getY()"&lt;/span&gt;
                      &lt;span class="attr"&gt;AnimationTarget&lt;/span&gt;&lt;span class="kwrd"&gt;="divMovable"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;OnClick&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Animations&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AnimationExtender&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;p&gt;The MoveAnimation would run only once and would also move to only one point , we need to keep changing the destination Points.&lt;/p&gt;
&lt;p&gt;If you notice the horizontalScript ="getX()" verticalScript ="getY()"&amp;nbsp; snippet , the "Script" attribute added to any attribute in the Animation Markup&lt;/p&gt;
&lt;p&gt;would cause the expression to be "eval"ed at runtime allowing us to use Expressions to set properties.&lt;/p&gt;
&lt;p&gt;So, right , the&amp;nbsp; horizontal (X) co-ordinates&amp;nbsp; would be retrieved from the function getX().&lt;/p&gt;
&lt;p&gt;The Vertical (Y) co-ordinates would be retrieved from the function getY().&lt;/p&gt;
&lt;p&gt;The&amp;nbsp; next point the element should move to would be represented by&amp;nbsp; "nextPoint".&lt;/p&gt;
&lt;p&gt;The Function "setNextPoint()" would set the next point in the path.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; getX()
{
    &lt;span class="kwrd"&gt;if&lt;/span&gt;( nextPoint == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
    {
        setNextPoint();
    }
    &lt;span class="kwrd"&gt;return&lt;/span&gt; nextPoint.X;
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;p&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; getY()
{
    &lt;span class="kwrd"&gt;return&lt;/span&gt; nextPoint.Y;
}
&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/pre&gt;
&lt;p&gt;Once we get the next point to move to , the animation should repeat with the new values for X and Y Co-Ordinates.&lt;/p&gt;
&lt;p&gt;We do this , by hooking a handler to the Ending event of the Animation.&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&amp;lt;script language=&lt;span class="str"&gt;"javascript"&lt;/span&gt;&amp;gt;
       &lt;span class="kwrd"&gt;var&lt;/span&gt; OnClickBehavior ;
       &lt;span class="kwrd"&gt;function&lt;/span&gt; pageLoad()
       {
           OnClickBehavior = $find(&lt;span class="str"&gt;"controlledAnimation"&lt;/span&gt;).get_OnClickBehavior().get_animation();
           OnClickBehavior.add_ended(continueAnimating);
           $addHandler($get(&lt;span class="str"&gt;"pathPallette"&lt;/span&gt;),&lt;span class="str"&gt;"click"&lt;/span&gt;,markPoint);
      }
  
   &amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;We can hook eventhandlers to the ending event of the Animation by&amp;nbsp; using the "add_ended" method.&lt;/div&gt;
&lt;div&gt;Here , we add the "continueAnimating" function as an eventhandler to the Animation Ending&amp;nbsp; event.&lt;/div&gt;
&lt;div&gt;Then , we call the "play" method on the animation just as it ends, to give a seamless&amp;nbsp;feel to the flow as the element moves along different points.&lt;/div&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; continueAnimating(){
     setNextPoint(); 
     &lt;span class="kwrd"&gt;if&lt;/span&gt;( nextPoint!= &lt;span class="kwrd"&gt;null&lt;/span&gt;){
        OnClickBehavior.play();
     }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Trigger the complete animation sequence by calling the "play" method on the OnclickBehavior &lt;/div&gt;
&lt;div&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; playAnimation()
{
    ResetPoints();
    hideAllmarkers();
    setNextPoint();
    OnClickBehavior.play();  
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;There you have it , fun and a pretty&amp;nbsp; neat exercise in geometry and also shows you how easy it is to do complex stuff with the MS Ajax Framework.&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode-wrapper, .csharpcode-wrapper pre {
  background-color: #f4f4f4;
  border: solid 1px gray;
  cursor: text;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  margin: 20px 0px 10px 0px;
  max-height: 200px;
  overflow: auto;
  padding: 4px 4px 4px 4px;
  width: 97.5%;
}
.csharpcode-wrapper pre {
  border-style: none;
  margin: 0px 0px 0px 0px;
  overflow: visible;
  padding: 0px 0px 0px 0px;
}
.csharpcode, .csharpcode pre, .csharpcode .alt {
  background-color: #f4f4f4;
  border-style: none;
  color: black;
  font-family: consolas, 'Courier New', courier, monospace;
  font-size: 8pt;
  line-height: 12pt;
  overflow: visible;
  padding: 0px 0px 0px 0px;
  width: 100%;
}
.csharpcode pre {
  margin: 0em;
}
.csharpcode .alt {
  background-color: white;
}
.csharpcode .asp {
  background-color: #ffff00;
}
.csharpcode .attr {
  color: #ff0000;
}
.csharpcode .html {
  color: #800000;
}
.csharpcode .kwrd {
  color: #0000ff;
}
.csharpcode .lnum {
  color: #606060;
}
.csharpcode .op {
  color: #0000c0;
}
.csharpcode .preproc {
  color: #cc6633;
}
.csharpcode .rem {
  color: #008000;
}
.csharpcode .str {
  color: #006080;
}
&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1950974" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/phaniraj/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/Animation/default.aspx">Animation</category><category domain="http://blogs.msdn.com/phaniraj/archive/tags/JavaScript/default.aspx">JavaScript</category></item></channel></rss>