tag:blogger.com,1999:blog-306607152009-02-20T23:21:49.235-06:00Dan Does .NETVarious thoughts and experiences of web developer Daniel Schaffer related to Microsoft's .NET Framework and ASP.NETDanhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-30660715.post-53864018270358063962008-05-20T09:18:00.003-05:002008-05-20T09:23:31.991-05:00Reusable Themes with CompiledThemeBuildProviderI've created a BuildProvider that allows ASP.NET developer to create reusable themes. The theme and its content are compiled into a library, and the build provider extracts the selected themes and copies them into the web project at compile time.<br /><br /><a href="http://www.codeplex.com/compiledthemes">Check it out on CodePlex!</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-5386401827035806396?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0tag:blogger.com,1999:blog-30660715.post-78705539387803543102008-04-18T22:04:00.003-05:002008-04-18T22:10:36.686-05:00WorkingOn for FogBugz v1.3 ReleasedI finally got a bit of free time to knock out a small backlog of cases that had cropped up on my <a href="http://www.codeplex.com/fogbugzworkingon/">WorkingOn for FogBugz</a> project. Behold, <a href="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=fogbugzworkingon&ReleaseId=8187">v1.3</a>:<br /><div style="width: 771px;" class="WikiContent"> <div class="wikidoc"> <ul><li>Application should no longer crash when there is no network connection available, or if the network connection drops while the application is running</li><li>If the application is unable to update, a message will be displayed and the automatic refreshes will be disabled. The user must manually refresh (using the <b>Refresh</b> menu item) or log in again to start the automatic refreshes again.</li><li>The application should no longer attempt to set titles longer than 64 characters</li><li>The login form will automatically parse the protocol (http or https), server/domain and application path from the <b>Server</b> field</li><li>FogBugz installations in virtual directories and on SSL ports are now supported</li><li>A list of cases that have had time logged by the user in the last 14 days are now displayed in the <b>Recent Cases</b> submenu</li><li>The popup balloon shown after work is stopped on case now includes the total number of minutes logged.</li></ul>If you don't what <a href="http://www.fogbugz.com">FogBugz</a> is, it is an excellent web-based project management system developed by <a href="http://www.fogcreek.com">Fog Creek Software</a>.<a href="http://www.fogcreek.com/FogBugz/"></a> </div> </div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-7870553938780354310?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0tag:blogger.com,1999:blog-30660715.post-60857687796540100412008-03-09T20:47:00.007-05:002008-03-10T12:46:25.871-05:00Validatable CheckBox controlSo, a fairly common problem I've seen is that there's no home-baked way to validate a CheckBox control. This is most commonly used when registering on websites that require a user to agree to certain terms and conditions. I've seen a fair number of solutions, most of which involve writing a custom validator, which in my opinion, can get a little tricky. Well, to this, I say NO!<br /><br />I took a different approach - instead of trying to make a custom validator for the CheckBox, why not just modify the CheckBox control so that it can be validated by a RequiredFieldValidator?<br /><br />On the server side, this is as simple as creating a class that inherits from System.Web.UI.WebControls.CheckBox and adding the ValidationPropertyAttribute, like so:<br /><br /><span style="font-family:courier new;">[<span style="color: rgb(51, 153, 153);">ValidationProperty</span>(<span style="color: rgb(153, 0, 0);">"Checked"</span>)]</span><br /><span style="font-family:courier new;"><span style="color: rgb(51, 51, 255);">public class</span> <span style="color: rgb(51, 153, 153);">ValidatableCheckBox</span> : <span style="color: rgb(51, 153, 153);">CheckBox<br /><br /></span></span>The client side is a little bit more involved, but still fairly simple.<br /><br />ASP.NET's client side validation checks an element's value property. If it returns anything, it is considered validated. Since the "value" property of a checkbox element returns "on" or "off", it will always be considered validated. To deal with this, I've created a javascript class that effectively overrides the "value" property of the CheckBox control's client HTML element so that it returns an empty string instead of "off" when it is unchecked.<br /><br />You can check it out <a href="http://www.dandoes.net/validatablecheckbox/public/validatablecheckbox.js">here</a>.<br /><br />To associate that javascript class with our server side control, you need to implement the <span style="font-family:courier new;"><span style="color: rgb(51, 153, 153);">IScriptControl </span></span>interface. (For more info, see <a href="http://www.asp.net/ajax/documentation/live/tutorials/IScriptControlTutorial1.aspx" target="_blank"><span style="font-size:100%;">Adding Client Capabilities to a Web Server Control by Using ASP.NET AJAX Extensions</span></a>)<br /><br />I've done this <a href="http://www.dandoes.net/validatablecheckbox/public/validatablecheckbox.cs.txt">here</a>.<br /><br />That is all! You can see it in action <a href="http://www.dandoes.net/validatablecheckbox/">here</a>, or download the demo solution <a href="http://www.dandoes.net/validatablecheckbox/validatablecheckboxdemo.zip">here</a>.<br /><br /><br /><br /><span style="font-family:courier new;"></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-6085768779654010041?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0tag:blogger.com,1999:blog-30660715.post-69937189996260082122007-10-30T21:20:00.000-05:002007-10-30T21:29:08.868-05:00WorkingOn for FogBugzFor anyone who uses the new version 6 of Fog Creek's FogBugz project management application, I've written a system tray application that allows you to start and stop work on your FogBugz cases right from your system tray. Check it out on CodePlex:<br /><br /><a href="http://www.codeplex.com/fogbugzworkingon">http://www.codeplex.com/fogbugzworkingon</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-6993718999626008212?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0tag:blogger.com,1999:blog-30660715.post-58880809210696381362007-05-16T15:24:00.000-05:002007-05-16T15:49:26.913-05:00More RegEx; US and UK phone numbers and postal codesHere are some RegEx patterns I've created for parsing and validating US and UK phone numbers and post codes. The "parsing" patterns are designed to work with Microsoft .NET's implementation of RegEx to allow you to pick out the relevant values of the parts of the strings, and will likely not work with other RegEx implementations, such as JavaScript. The "validation" patterns are designed to simply validate whether the string matches the pattern or not; there are no captures made. All of the "validation" patterns should be portable to other RegEx implementations, with the exception of the UK phone number pattern.<br /><br /><span style="font-weight: bold;">US Zip Code parsing pattern:<br /></span><span style="color: rgb(51, 51, 51);">^(?<Zip>\d{5})[\s-]*(?<Plus4>\d{4})?$</span><br />Captures the 5-digit zip code to the named group "Zip" and the optional USPS 4-digit "plus 4" code to the named group "Plus4"<br /><br /><span style="font-weight: bold;">US Zip Code validation pattern:</span><br /><span style="color: rgb(51, 51, 51);">^\d{5}[\s-]*(?:\d{4})?$</span><br /><br /><span style="font-weight: bold;">UK Post Code parsing pattern:</span><br /><span style="color: rgb(51, 51, 51);">^(?<OutCode>(?:[ABD-HJLNP-UW-Z]{1,2})(?:(?:\d{1,2})|(?:\d[ABD-HJLNP-UW-Z])))\s*(?<InCode>\d[ABD-HJLNP-UW-Z]{2})$</span><br />Captures the first section of the post code to the named group "OutCode" and the second section of the post code to the named group "InCode".<br /><br /><span style="font-weight: bold;">UK Post Code validation pattern:</span><br /><span style="color: rgb(51, 51, 51);">^(?:[ABD-HJLNP-UW-Z]{1,2})(?:(?:\d{1,2})|(?:\d[ABD-HJLNP-UW-Z]))\s*\d[ABD-HJLNP-UW-Z]{2}$</span><br /><br />Valid UK postal codes follow the below patterns:<br /><dl><dd>A9 9AA</dd><dd>A99 9AA</dd><dd>A9A 9AA</dd><dd>AA9 9AA</dd><dd>AA99 9AA</dd><dd>AA9A 9AA</dd></dl>Source: <a href="http://en.wikipedia.org/wiki/UK_postcodes">http://en.wikipedia.org/wiki/UK_postcodes</a><br /><br /><span style="font-weight: bold;">US Phone Number parsing pattern:</span><br /><span style="color: rgb(51, 51, 51);">^[\s(]*(?<AreaCode>\d{3})[\s-)]*(?<TownExchange>\d{3})[\s-]*(?<Number>\d{4})$</span><br />Captures the area code to the named group "AreaCode", the next 3 numbers to the named group "TownExchange" and the final 4 numbers to the named group "Number".<br /><br /><span style="font-weight: bold;">US Phone Number validation pattern:</span><br /><span style="color: rgb(51, 51, 51);">^[\s(]*\d{3}[\s-)]*\d{3}[\s-]*\d{4}$</span><br /><br /><span style="font-weight: bold;">UK Phone Number parsing pattern:</span><br /><span style="color: rgb(51, 51, 51);">^[\s(]*(?<AreaCode>(?:(?<ac01x1>01\d1)|(?<ac011x>011\d)|(?<ac02x>02\d)|(?<ac01xxxa>01\d{3})|(?<ac01xxxb>01\d{3})|(?<ac01xxxx>01\d{4})))[\s\-)]*(?<TownExchange>(?(ac01x1)\d{3})(?(ac011x)\d{3})(?(ac02x)\d{4})(?(ac01xxxa)\d{3})(?(ac01xxxb)\d{5})(?(ac01xxxx)\d{4,5}))[\s\-]*(?<Number>(?(ac01x1)\d{4})(?(ac011x)\d{4})(?(ac02x)\d{4})(?(ac01xxxa)\d{3}))$</span><br />Captures the first set of digits to the named group "AreaCode", the second set of digits to the named group "TownExchange", and the final set of numbers, if it exists, to the named group "Number".<br /><br /><span style="font-weight: bold;">UK Phone Number validation pattern:</span><br /><span style="color: rgb(51, 51, 51);">^[\s(]*(?:(?</span><span style="color: rgb(51, 51, 51);"><</span><span style="color: rgb(51, 51, 51);">ac01x1>01\d1)|(?</span><span style="color: rgb(51, 51, 51);"><</span><span style="color: rgb(51, 51, 51);">ac011x</span><span style="color: rgb(51, 51, 51);">></span><span style="color: rgb(51, 51, 51);">011\d)|(?</span><span style="color: rgb(51, 51, 51);"><</span><span style="color: rgb(51, 51, 51);">ac02x</span><span style="color: rgb(51, 51, 51);">></span><span style="color: rgb(51, 51, 51);">02\d)|(?</span><span style="color: rgb(51, 51, 51);"><</span><span style="color: rgb(51, 51, 51);">ac01xxxa</span><span style="color: rgb(51, 51, 51);">></span><span style="color: rgb(51, 51, 51);">01\d{3})|(?</span><span style="color: rgb(51, 51, 51);"><</span><span style="color: rgb(51, 51, 51);">ac01xxxb</span><span style="color: rgb(51, 51, 51);">></span><span style="color: rgb(51, 51, 51);">01\d{3})|(?</span><span style="color: rgb(51, 51, 51);"><</span><span style="color: rgb(51, 51, 51);">ac01xxxx</span><span style="color: rgb(51, 51, 51);">></span><span style="color: rgb(51, 51, 51);">01\d{4}))[\s\-)]*(?(ac01x1)\d{3})(?(ac011x)\d{3})(?(ac02x)\d{4})(?(ac01xxxa)\d{3})(?(ac01xxxb)\d{5})(?(ac01xxxx)\d{4,5})[\s\-]*(?(ac01x1)\d{4})(?(ac011x)\d{4})(?(ac02x)\d{4})(?(ac01xxxa)\d{3})$<br /></span><br />These patterns match the following UK phone number patterns:<br />(01x1) xxx xxxx (matched by <b>ac01x1</b>)<br />(011x) xxx xxxx (matched by <b>ac011x</b>)<br />(02x) xxxx xxxx (matched by <b>ac02x</b>)<br />(01xxx) xxx xxx (matched by <b>ac01xxxa</b>)<br />(01xxx) xxxxx (matched by <b>ac01xxxb</b>)<br />(01xxxx) xxxxx (matched by <b>ac01xxxx</b>)<br />(01xxxx) xxxx (matched by <b>ac01xxxx</b>) <br /><br />Source: <a href="http://en.wikipedia.org/wiki/UK_telephone_numbering_plan">http://en.wikipedia.org/wiki/UK_telephone_numbering_plan</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-5888080921069638136?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com2tag:blogger.com,1999:blog-30660715.post-5747819700332648582007-05-09T16:58:00.000-05:002007-05-09T17:53:34.471-05:00RegEx Pattern: No Whitespace in String LiteralA colleague of mine, <a href="http://cbess.blogspot.com/">C. Bess</a>, recently asked me for help creating a RegEx pattern for matching whitespace in a string, while avoiding matching the whitespace that was inside quotes. Take the following string for example:<br /><br />The quick "red fox" jumped over "the lazy" brown dog.<br /><br />He needed to match the whitespace between each of the words, except the whitespace between "red" and "fox", and "the" and "lazy". Splitting based on the matches would return:<br /><br />[0] => The<br />[1] => quick<br />[2] => "red fox"<br />[3] => jumped<br />[4] => over<br />[5] => "the lazy"<br />[6] => brown<br />[7] => dog.<br /><br />The beast of a pattern I created uses a combination of forward and backward positive and negative assertions. So, without any further ado:<br /><br /><blockquote><p>\s(?![^"]*\")|\s(?<!\"[^"]*)|\s(?=(?:[^"]*\"[^"]*\"[^"]*)+[^"]*$)|<br />\s(?<=(?:^[^"]*"[^"]*\"[^"]*)+[^"]*)<br /></p></blockquote><br /><br /><span style="font-style: italic;font-size:85%;" >Note - you'll need to remove the line break from the middle of the pattern; I had to put one in for formatting purposes.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-574781970033264858?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0tag:blogger.com,1999:blog-30660715.post-79078483881508735612007-02-07T20:00:00.000-06:002007-02-07T20:26:54.048-06:00ASP.NET side basically doneI'm basically got everything on the ASP.NET backend working. ObjectFactory now returns a single object of a new class called "ObjectFactoryResponse", which includes a collection of both regular ObjectFactory objects and a collection of another new class, WebServiceControlData. WebServiceControlData contains the item's Id, the rendered HTML and a collection of ScriptDescriptors (used for sending values to AJAX Sys.UI.Controls).<br /><br />It was kind of tricky getting it to render the HTML without being on a real page - I forgot/didn't realize/should've known/etc that HtmlTextWriter needs have Flush() called before it actually writes anything to the stream. I'm guessing that method is normally automatically called by the Page object. It took me a bit of playing around to figure that one out.<br /><br />The really nice part is that the overall amount of work that was required to get to this point was considerably less than I thought it would be. Now I have to wire up everything on the client side, which I think will actually be quite a bit more effort, since I'm not nearly as familiar with AJAX.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-7907848388150873561?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0tag:blogger.com,1999:blog-30660715.post-53348023775132121742007-02-07T09:25:00.000-06:002007-02-07T20:25:40.028-06:00ASP.NET for JavaScript rendered controls, continued<p>I started playing around with it last night, and already have discovered that some of my assumptions will need to be changed.</p><p><br />First, I can't use IScriptControl. IScriptControl depends on having access to a ScriptManager. More specifically, THE ScriptManager that will be on the actual page. So while I could just add ScriptManagers into the controls I create, it would be pointless since it would actually be able to do anything. I will still be using one method from IScriptManager though - IEnumerable<scriptdescriptor> GetScriptDescriptors(), but I'll have to do some research into the AJAX Sys.Component or Sys.UI.Control constructors to figure out how I can pass that info into my javascript controls.</p><p><br />Also, I'm 90% sure that creating my own control type is a bit unrealistic. Its completely possible - with the Visual Studio 2005 SDK, I can even create my own custom directive (like <%@ WebServiceControl ... %>), but it seems more realistic to just inherit from UserControl. The question here is whether TemplateControl.LoadControl(...) (TemplateControl is the abstract class Page and UserControl both inherit from, LoadControl allows you to get an instance of a Page or UserControl from a virtual path) will work from the WebService if I just instantiate a new object. </p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-5334802377513212174?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com1tag:blogger.com,1999:blog-30660715.post-41320547164105022832007-02-06T17:34:00.000-06:002007-02-07T20:25:21.675-06:00ASP.NET for JavaScript rendered controlsSo, I started creating the site by creating controls entirely using the javascript DOM, and I've decided that doing it that way is a complete pain in the ass, so I'm going to be trying something new.<br /><br />The end result I want is to have a way of creating controls whose entire lifetime on the page itself is initiated and controlled by client script, and then have the controls’ properties updated without actually recreating the controls themselves. However, because of how tedious it is to design web pages and controls entirely using the DOM in javascript, I thought it would be really cool if I could use ASP.NET to generate the actual controls for me, and then have them returned via a web service. I can use AJAX’s IScriptControl to automatically create bindings between whatever server side control or object I create and the client side javascript class.<br /><br />Some things I was thinking about:<br />-Creating a new control type (like .wscx for WebServiceControlXmakesitsoundcool) and IHttpHandler made specifically with the intent of being rendered into an XML stream for use with a WebService<br />- Would be designed like ASCX controls, with HTML and a codebehind. Maybe just inherit from UserControl? Problem with that is that it won’t be contained in a Page class.<br />- Factory objects would take an additional generic Type parameter, TWebServiceControl, and which would allow this functionality to actually become part of the DAL<br />-Web service list methods would take a list of existing objects as parameters. List response would contain two parts: XML with HTML content (the WebServiceControl) for new objects (ie, objects that are missing from the list of existing objects), and regular data types (contained in serialized ObjectFactory objects) for updates to existing objects.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-4132054716410502283?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0tag:blogger.com,1999:blog-30660715.post-27649331254917534802007-02-01T20:08:00.000-06:002007-02-07T20:04:27.518-06:00...OfTheDayI'll be using this pre-dated entry to explain about my new personal ASP.NET project, called ...OfTheDay. It will be written in ASP.NET using C#, use SQL Server 2005 as its backend, and will be highly customized using Microsoft's ASP.NET AJAX.<br /><br />I'm am hoping for ...OfTheDay to become one of those useless sites that people with nothing better to do will sit and gaze at for hours. The idea is that users will submit a finite number of categories of "things" to vote on each day. Within each Category, users will submit a finite number of nominees for things that fall in to each Category. So for example, if a user created the Category "Fish", another user might nominate "Trout", while another might nominate "Salmon". Other users would vote on which Nominee should be the "Fish of the Day". The category with the most cumulative votes will be the "Thing of the Day". See? Completely useless, but I think it could be fairly addictive, especially if I added in incentives to vote and have your categories or nominees win. For example, the more you participate, the more your votes are worth, or something similar.<br /><br />I will be taking advantage of AJAX's asynchronous communication to keep all the objects on the page constantly updated. In order to cut down on bandwidth consumption, all the controls will be rendered using AJAX's client script, which will allow me to update only the individual controls that have actually changed, instead of wasting bandwidth updating everything, as would be necessary with traditional ASP.NET WebForms, even if AJAX UpdatePanels are involved.<br /><br />I will also be using a C# library called "ObjectFactory", which I can't talk too much about because it was written by a colleague of mine, <a href="http://www.willsllc.com/">Portman Wills</a>. Basically, a single ObjectFactory object represents a record from a table in the database. On his recommendation, I have modified his version considerably so that the factories themselves can be used as WebServices, and also work directly with the "WebServiceControls" I will be creating later on.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-2764933125491753480?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0tag:blogger.com,1999:blog-30660715.post-1153941115682637042006-07-26T14:03:00.000-05:002006-07-26T14:17:00.513-05:00FireFox and Visual Studio 2003/2005If you are a web developer of any kind, cross-browser compatibility is going to be fairly high on your priority list. This is a very simple optimization to make, and if you haven't done it yet, you'll be kicking yourself (as I was) over how easy it is to do.<br /><br />You will need:<br /><ul><li>Visual Studio 2003/2005</li><li><a href="http://www.mozilla.com/firefox/">Mozilla FireFox</a> 1.0 - 1.5 with the following extensions:</li><ul><li><a href="https://addons.mozilla.org/firefox/1419/">IE Tab</a></li><li><a href="https://addons.mozilla.org/firefox/1122/">Tab Mix Plus</a> (optional)</li></ul></ul>Instructions:<br /><ol><li>Right click on any ASPX web form</li><li>Click "Browse with..."</li><li>If FireFox is not listed, click "Add...", otherwise skip to step 5</li><li>Find firefox.exe, most likely located in C:\Program Files\Mozilla Firefox\ and click OK</li><li>Select FireFox and click "Set as Default"</li><li>When you debug, VS 2005 will now automatically open the debug window in FireFox.</li><li>To test in MSIE, simply right click on the page and click "View Page in IE Tab". You can probably even create a keyboard shortcut for it.<br /></li><li>I recommend using TabMix Plus to customize how the new tab will be opened to your liking</li></ol>Thanks to C. Bess for figuring this out after I did it by accident and couldn't figure out how.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-115394111568263704?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com1tag:blogger.com,1999:blog-30660715.post-1152053678027348262006-07-04T17:45:00.000-05:002006-07-04T17:56:12.306-05:00Problems in IE with JavaScript and Animated GIFsI recently discovered one of the many little "features" one may encounter while developing web pages that are meant to be cross-browser compatible. This particular oddity involves having multiple DIV panels which contain one or more animated GIFs. If your DIV panels are hidden and shown using an html anchor or button (<a> or <input>), or in ASP.NET, a HyperLink, LinkButton or Button, the animated GIFs will stop animating when said element is clicked.<br /><br />Apparently, MSIE stops animating GIFs when a form is submitted, and also, it seems, when a link is clicked. In order to work around this, you should use a SPAN (or in ASP.NET, a Label), and set your JavaScript code in the "onclick" attribute.<br /><br />I did not experience any of these problems in FireFox, and I can't imagine any good reason for MSIE to act like this, especially with this type of JavaScript behavior becoming fairly standard in many modern webpages and web applications. I haven't testing this in IE7 yet, but hopefully this will be fixed. Enjoy!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30660715-115205367802734826?l=www.dandoes.net%2Fdefault.htm'/></div>Danhttp://www.blogger.com/profile/17708411389698820845noreply@blogger.com0