The ability to set and read cookies is a very useful feature of many programming languages. Fortunately, JavaScript has this functionality. Klaus Hartl released a cookie plugin last year for jQuery. What I particularly like about this plugin is the simple syntax - synonymous with jQuery. Traditionally, one would create a cookie and set the value of a cookie using standard JavaScript as follows:
document.cookie = 'name=value; expires=Thu, 2 Aug 2008 20:00:00 UTC; path=/'
You can read more about using standard JavaScript to set and read cookies over at Quirksmode. We can use jQuery with Klaus Hartl’s cookie plugin to streamline the process of creating and reading cookies. Furthermore, the plugin simplifies the syntax used.
Before we get started on designing a collapsible layout, I’m going to introduce the syntax for Klaus Hartl’s Cookie plugin:
// Get the value of a cookie: $.cookie('sampleCookie'); // Create (or update) the value of a cookie: $.cookie('sampleCookie', 'cookieValue'); //Create (or update) the value of a cookie to expire in 2 days: $.cookie('sampleCookie', 'cookieValue', { expires: 2 }); // Delete a cookie: $.cookie('sampleCookie', null);
Please note that in the examples above, ’sampleCookie’ is the name of a cookie and ‘cookieValue’ is the value assigned to that cookie.
Collapsible Layout
I’m going to demonstrate how to use cookies with jQuery by designing a simple collapsible layout. The page layout will comprise of 2 columns. 2-column structures are common amongst many websites. The left column typically contains site navigation whilst the right column houses the page content. Allowing users to colapse entire columns is probably not beneficial in most cases. It would be more beneficial to allow users to collapse and subsequently expand (often referred to as toggling) individual sections within columns (e.g. navigation sections, news sections etc.). However, to keep this article short and simple, we’ll work with entire columns.
Firstly, we’ll need a 2-column page layout to work with. We’ll allow users to collapse and expand both the left and right columns. In order to add this functionality, we will be utilizing jQuery’s CSS manipulation features:
// LEFT COLUMN: // When the collapse button is clicked: $('.collapseLeft').click(function() { $('.collapseLeft').css("display","none"); $('.expandLeft').css("display","block"); $('#leftCol').css("height","20px"); }); // When the expand button is clicked: $('.expandLeft').click(function() { $('.expandLeft').css("display","none"); $('.collapseLeft').css("display","block"); $('#leftCol').css("height","500px"); }); // RIGHT COLUMN: // When the collapse button is clicked: $('.collapseRight').click(function() { $('.collapseRight').css("display","none"); $('.expandRight').css("display","block"); $('#rightCol').css("height","20px"); }); // When the expand button is clicked: $('.expandRight').click(function() { $('.expandRight').css("display","none"); $('.collapseRight').css("display","block"); $('#rightCol').css("height","500px"); }); });
This is really some very simple code. Let’s take a detailed look. We’ll deal with the left column first. In the left column, there will be 2 possible buttons. One button will expand the column. The other button will collapse the column. However, if the left column is already expanded, there is no need to display the expand button. The same principal can be applied to the collapse button.
I have assigned a collapse button for the left column the class: ‘ collapseLeft’. When this button is clicked, we want 3 actions to occur. Firstly, we want to hide the collapse button. We can do this by manipulating the CSS as follows:
$('.collapseLeft').css("display","none");
We now want to give the user the option to expand the column. We do this by displaying the expand button. I have given the expand button for the left column the class: ‘expandLeft’. Initially, we want to hide the expand button. This can be done using plain CSS (i.e. display: none;). To now display this button, we need to manipulate the CSS:
$('.expandLeft').css("display","block");
Finally, we want to collapse the left column. Since I have positioned the buttons (using CSS) ‘absolutely’ at the top of left column, I don’t want to completely hide the left column. Instead, I’ll manipulate the CSS, changing the height of the left column to leave just enough room to display the expand button:
$('#rightCol').css("height","20px");
You should now be able to follow through the next 3 blocks of code and understand what each line does. You can see that for the right column expand and collapse buttons, I have used the classes: ‘collapseRight’ and ‘expandRight’. Obviously, instead of collapsing or expanding the left column, these buttons will collapse or expand the right column.
I have designed a quick demonstration page. We have not yet used cookies to remember which columns are expanded or collapsed. Therefore, when you collapse a column and refresh the page’, the column will return to its default state (i.e. fully expanded). Try it for your self!
Using Cookies
In most cases, this functionality added thus far is pretty useless. What we really want is for the site to remember each user’s preferences. To do this, we will use the jQuery cookie plugin.
$(document).ready(function() { // LEFT COLUMN: // When the collapse button is clicked: $('.collapseLeft').click(function() { $('.collapseLeft').css("display","none"); $('.expandLeft').css("display","block"); $('#leftCol').css("height","20px"); $.cookie('leftCol', 'collapsed'); }); // When the expand button is clicked: $('.expandLeft').click(function() { $('.expandLeft').css("display","none"); $('.collapseLeft').css("display","block"); $('#leftCol').css("height","500px"); $.cookie('leftCol', 'expanded'); }); // RIGHT COLUMN: // When the collapse button is clicked: $('.collapseRight').click(function() { $('.collapseRight').css("display","none"); $('.expandRight').css("display","block"); $('#rightCol').css("height","20px"); $.cookie('rightCol', 'collapsed'); }); // When the expand button is clicked: $('.expandRight').click(function() { $('.expandRight').css("display","none"); $('.collapseRight').css("display","block"); $('#rightCol').css("height","500px"); $.cookie('rightCol', 'expanded'); }); // COOKIES // Left column state var leftCol = $.cookie('leftCol'); // Right column state var rightCol = $.cookie('rightCol'); // Set the user's selection for the left column if (leftCol == 'collapsed') { $('.collapseLeft').css("display","none"); $('.expandLeft').css("display","block"); $('#leftCol').css("height","20px"); }; // Set the user's selection for the right column if (rightCol == 'collapsed') { $('.collapseRight').css("display","none"); $('.expandRight').css("display","block"); $('#rightCol').css("height","20px"); }; });
Let’s walk through the new code. In order to remember the user’s selection (i.e. which columns are collapsed or expanded), we must create a cookie for both the right and left column. The 1st line of code added creates (or updates) a cookie named ‘leftCol’. When the collapse button for the left column is clicked, we want to set the value of this cookie to ‘collapsed’:
$.cookie('leftCol', 'collapsed');
When the expand button for the left column is clicked, we want to update the value of this cookie to ‘expanded’:
$.cookie('leftCol', 'expanded');
We do the same for the right column. However, this time the cookie is named ‘rightCol’:
$.cookie('rightCol', 'collapsed'); $.cookie('rightCol', 'expanded');
So, now we have up to 2 cookies (note the words ‘up to’ since the cookies will only exist when the expand or collapse buttons are clicked for the first time). The values of these cookies depend on if the columns are expanded or collapsed. We now want to apply the user’s preferences when the page loads. This is obviously read from the cookies.
Firstly, We’ll created 2 variables:
// Left column state var leftCol = $.cookie('leftCol'); // Right column state var rightCol = $.cookie('rightCol');
We’ll create and assign the variable ‘leftCol’ the value of the cookie also named ‘leftCol’. Similarly, I’ve create and assign the variable ‘rightCol’ the value of the cookie named ‘rightCol’. This just makes life easier when we test the value of the cookies (as we’re about to do).
The final step is to apply the user’s selection. To do this, we will first deal with the left column:
if (leftCol == 'collapsed') { $('.collapseLeft').css("display","none"); $('.expandLeft').css("display","block"); $('#leftCol').css("height","20px"); };
This block of code first identifies if the value of the variable ‘leftCol’ (and hence the value of the cookie also named ‘leftCol’) is equal to ‘collapsed’. If this is true (i.e. if the user has selected to collapse the left column), the same actions are performed as when the collapse button for the left column is clicked (see the ‘Collapsible Layout’ section for more information). To refresh your memory, these actions are:
- Hide the button which allows users to collapse the left column.
- Display the button which allows users to expand the left column.
- Set the height of the left column to 20px.
We do exactly the same for the right column:
if (rightCol == 'collapsed') { $('.collapseRight').css("display","none"); $('.expandRight').css("display","block"); $('#rightCol').css("height","20px"); };
Let’s take a look at the demo:
When we now refresh the page (or navigate to other pages using the same cookies), the selection is remembered. Please do post any comments you may have. Let me know what you think!

March 11, 2008
Quote
Thanks for this great tutorial! I used an alteration of it to show/hide the navigation elements persistently across multiple pages in the current CodeIgniter project I am working on.
April 4, 2008
Quote
Great!! I’m follow your instruction and it works!! Thanks for this one, and wish that you will write some more fresh stuff int the future
May 25, 2008
Quote
But how can I use the cookie plugin with the slidetoogle function?
May 25, 2008
Quote
Hi Marc!
If I understand what you’re asking for, you simply apply the sildeUp() and slideDown() functions to the columns:
The ‘400′ is just the time duration for the animation.
Note to visitors: please wrap all you code in ‘pre’ tags when posting comments.
May 26, 2008
Quote
Ah! Ok, thanx for you help! Next time I will use the pre-Tags! =)
May 26, 2008
Quote
I ran into a problem: I have the slideToggle function build into my webpage. If I would use your solution I had to completely my markup. So is it possible to check the current state of the slideToggle-function to use cookies with it?
My jQuery-code:
May 26, 2008
Quote
mhh, I used the -Tags but it did not work. Sorry
May 26, 2008
Quote
If you want to check the current state (i.e. whether a column is up or down), just call the value of the cookie. You’ll notice in the example, I set the value of the cookie to a variable:
and when the column is expanded, for example, we set the value of the cookie to ‘expanded’:
So, to identify if the column is expanded, we just look at the value of the variable (called ‘leftCol’ in this example).
May 26, 2008
Quote
Just to add. We can use the value of the variable (as detailed in my previous comment) to expand or collapse the column (depeding on the visitor’s preference) when they load the page. This way, the script remembers if they expanded or collapsed the column and sets the page accordingly:
May 26, 2008
Quote
ok, but I am using the slideToggle-function and not your way. I have the problem that the build-in slideToggle-function does not offer a way to check in which state it is. Or did I miss the point?
May 26, 2008
Quote
It shouldn’t matter if you use the slideUp and slideDown functions (instead of manipulating the CSS to a certain height). For example:
You can see this here: shopdev.co.uk/demos/CC3/V1/Biome/index.php
I would not use the slideToggle function, as it may be more difficult to keep track of the user’s preferences with regards to which columns are expanded and collapsed. Instead, use both slideUp and slideDown.
May 26, 2008
Quote
ok. But how can I use the same tag for the interaction? In your example are 2 div tags. If you click on the first div then it will disappears and then the other div-tag appears instead.
But I have another structure:
http://www.marctv.de/download/jquery_cookies.txt
I put it in a txt because the tags would be removed here in the comments
May 26, 2008
Quote
Ah.. In this case, all you need to do is add some kind of identifier to the heading. For example, you could add/change the class:
And, to check the preferences (inside document.ready):
Do the same for the expansion action. Remember to add the class, “expanded” to “roll_head”.
May 27, 2008
Quote
Ok, I played a lot with your code. But it does not work for me:
“zu” means: collapsed
“auf” means: expanded
It does not switch the classes. =( Why?
May 27, 2008
Quote
And this does not work either:
May 27, 2008
Quote
Hi Marc!
I see what you mean. It is probably best to use a unique selector as in the demo. To use a single selector will probably mean extending the use of selectors. I would simply use an arrow to the right of the heading. Then, switch between 2 divs as per the example. You could even have the divs extend right across the heading so as to imitate clicking the heading.
May 27, 2008
Quote
I did it:
I used it for the sidebar elements on the right on http://www.marctv.de
=)
May 27, 2008
Quote
Great Job!
I don’t know why I didn’t think of using the “else”. Must be having a bad day.
June 22, 2008
Quote
[…] Recall your interface state using jQuery and Klaus Hartl’s cookie plugin. […]
June 30, 2008
Quote
Got the plugin. Man, this is an awesome little add to jQuery. Ease of use is sky high and this write up makes it so understandable it is hard to imagine a way to screw things up.
I am thrilled with it. And I am thrilled with the tutorial you put together here. It works as expected out of the box. Thanks a million.
July 1, 2008
Quote
Thanks for the comment Robert! All the positive feedback certainly makes it worth while.
July 3, 2008
Quote
@ Homar:
Thank you very much!
Really, I save a lot of time learning your tutorials! They’re amazing!
Thanks again,
David Carreira
July 30, 2008
Quote
Thanks for the write up! Also, the current design of your site is lovely. It’s hard to make the web feel soft.
August 1, 2008
Quote
Quick question, using your example code, how would one extend the cookie to not die at end of the current session?
August 1, 2008
Quote
Hi Rob!
The cookie should not be destroyed. This is indeed the whole point of using the cookies. You can see Klaus Hartl’s page (link near the top of the article) for defining an expiry time and path.
September 17, 2008
Quote
Great !!!!!!!!!!!!!!
October 2, 2008
Quote
Thank you for this, but I can not get it to work for some reason. I really could use some help. I have the expand and contract working, but the cookie does not save.
Also, when I add
$(’#poster’).slideUp(550);
or
$(’#poster’).slideDown(550);
I get a flash that happens real fast. It is wierd, but dam annoying.
October 2, 2008
Quote
Hi IG88!
Regarding the Cookie. Without looking at your page, I can only really suggest that you check the Cookie plugin is being included correctly in your page (right after the jQuery library).
Is it a flash/flicker of the screen? Or… Is the expandable/contractible element jumping quickly and then scrolling soothly? Paddings will cause this to happen. There is more information here: http://jqueryfordesigners.com/.....quick-tip/
October 2, 2008
Quote
Homar,
Thank you very much. The website is {link removed} but please delete it from this comment. It is hardly done but you will be able to see the problem. The jQeury is only being used on the home page. I started out using the one from Harry Maugans (link below) but I could not figure out how to make a cookie for it. Sorry I am a beginner.
http://www.harrymaugans.com/20.....t-and-css/
October 2, 2008
Quote
The path specified to jquery.cookie.js throws a 404. Please ensure that you uploaded the file.
October 2, 2008
Quote
Wow. It is 90.1% always a user error. Sorry about that. It does work now. However I followed the instructions from the site you suggested, and I am still having the flash issue.
Any ideas?
October 3, 2008
Quote
It looks like you’ve removed both the jQuery library and the Cookie plugin from your page now???
October 3, 2008
Quote
Yeah sorry I was working on the ImageMenu. It appears that one of the jQuery files is messing with the JS for the ImageMenu. This is very interesting.
I have reinstated the jQuery for the index and as you see the ImageMenu now does not work. If you look at the other pages where the jQeury library is not installed, the Imagemenu works fine.
It may be the Imagemenu though, because adding the javascript form to the contact page is also making my Imagemenu not work.
October 3, 2008
Quote
Here is another issue I think is very interesting. If you close the DIV it will collapse all the way; 0px. Even though I have the height set to 20px.
$(’#poster’).css(”height”,”20px”);
However, if you refresh the page it will then show it with the 20px height. And then if you click it to open, the DIV will open very fast and ignore the
$(’#poster’).slideUp(550);
October 3, 2008
Quote
Sorry I meant
… And then if you click it to open, the DIV will open very fast and ignore the
$(’#poster’).slideDown(550);
p.s. I have tried using the pre tags in your comment but they do not seem to work.
October 3, 2008
Quote
Sorry about the pre tags. I keep meaning to get this sorted. The problem is in your code, you have:
Hence, the script quickly changes the height to 20px and then tries to animate it using the built in function (slideUp).
Instead of these 2 lines, you could use:
October 3, 2008
Quote
That appears to have fixed the flashing issue and the height issue. However, what would I do to have the slideDown animate at the same speed?
October 3, 2008
Quote
October 3, 2008
Quote
Well I fixed that slidedown speed issue by just adding the same code you just gave me to the expandleft…
$(’#poster’).animate({height:”250px”},550);
October 3, 2008
Quote
You may find that your ImageMenu will not work due to the jQuery library conflicting with MooTools.
October 3, 2008
Quote
haha, sorry. I posted too soon.
You are a genius. Thank you so much for the tutorial and the amazing support throughout your comments. You are a good person.
Do you have any ideas why this might be messing with my ImageMenu? Causing it to just not work at all.
October 3, 2008
Quote
Once again. I posted to soon.
I wonder if there is anyway around this conflict. If it was you, what would you do?
October 3, 2008
Quote
If it were me… I’d scrap MooTools and use one of the alternate jQuery plugins available on the net.
October 6, 2008
Quote
Thanks for this awesome plugin! Exactly what I’ve just looked for aaaaaaand your tutorial is more than detailed!
October 21, 2008
Quote
Hii Homar and thank you so much for this thing. I have a small trouble getting the code below work for me. I can see the cookie being created BUT the if condition isn’t working i.e. on page refresh its loosing the changes.
function toggle_style(color) {
$(”.tcat”).css(”background-image”, “none”);
$(”.tcat”).css(”background-color”, color);
$.cookie(’tech555color’, color);
}
var tech555color = $.cookie(’tech555color’);
if (tech555color == color) {
$(”.tcat”).css(”background-image”, “none”);
$(”.tcat”).css(”background-color”, color);
};
Thank you
October 21, 2008
Quote
Hi Vinayak!
You have the line:
But, in the code provided, you have not initialized the variable “color”. If you are checking whether the cookie’s value is “cookie”, you should place the word “cookie” inside quotes to make it a string rather than a variable name. Otherwise, you should create the variable first - e.g:
October 21, 2008
Quote
thanks for your super fast reply Homar… actually I did not provided that part of the code. I DO HAVE color initialized elsewhere.
I can see the cookie being created with the correct color value.
I think it would be better if you check out my webpage.
Please visit here:-
http://www.tech555.com/forum/index.php?styleid=7
And notice the “Color Chooser” in the header. Its working perfect, even the cookies are being created BUT on refresh, all vanishes.
Thank you
October 22, 2008
Quote
Just to add.. that for checking purposes I added this before if condition:-
var color = “#000000″;
Where #000000 is the cookie’s value. But it still doesn’t work!
October 22, 2008
Quote
alright… after lots and lots of trial and error, I finally got it working. But I notice a small flicker on every refresh. I can see the old CSS for a second or two until it is replaced with the new CSS as it takes time for the info to be read from the cookie. And my CSS is large which made the JS large too.
Anyways.. I have switched to dynamic stylesheets which in my case gives a better result.
Thank you and keep up the good work.
December 2, 2008
Quote
Hi Homar,
It’s me again, and I am back with another question. Is it possible to set this up so the div is automatically closed from the start and you have to click to open it?
December 2, 2008
Quote
Sure… Try setting the collapsible container to display:none.
December 2, 2008
Quote
Yeah, that does work, but doesn’t that confuse by starting you off with a collapsed div showing a collapse.gif instead of the expand.gif?
December 6, 2008
Quote
Ok, I think I have figured something out but it needs some polishing from you.
If I switch the animation height it works. However when you first visit the page and the DIV is closed like it should be and then you click the DIV to open it does it very fast and quirky. After that it opens and closes with the function time you set. Also I just switched the classes to show you here, but to do it right you need to rework/switch the CSS. Anyways here it is and hopefully you can make sense of it…
JS..
and as I said
open menu
close menu
December 6, 2008
Quote
In your CSS, try change the #poster element to:
Also, after:
Add:
December 6, 2008
Quote
Yes, as you can see on my site, it does work, however the only problem that still exist is that when you use the X and the O as a button to open and close the DIV, the Close button will be there when you first visit the page and the DIV is already closed, so you have to click it twice in order to open the DIV.
December 6, 2008
Quote
You have these the wrong way round:
It should be:
December 6, 2008
Quote
Update…
I had Javascript disabled while testing and that is why I got that result. With Javascript enabled it seems to work fine, but now the cookie is not working. I can open the DIV on one page but when I go to the next page it will be closed again.
December 7, 2008
Quote
You’re giving the cookie the wrong value:
Should be:
December 7, 2008
Quote
Opps.
You are right.
But it is still doing the same thing with the open and close image.
December 7, 2008
Quote
You haven’t made the change yet. The only problem, that I can see, is that when the cookie reads ‘collapsed’, the code is expanding the #poster element. I.e. If you expand the element and then refresh the page, the element is set to its collapsed state. If you make the change in my last post, it should work.
December 7, 2008
Quote
Still the same.
Because before a cookie is set, when you first visit the site, the DIV is being recognized as having a 1px height, therefore it is appears closed, but it is still an open DIV, therefore it shows the Close button. The 1px is set in the CSS as you said to, but the JS gives it the 250px after you activate it.
The problem still is that at first visit the 1px DIV is showing the Closed button.
December 7, 2008
Quote
Ahh… I see… You need to change your HTML/CSS. Instead of having the “close” image displaying (as standard), you want the “open” image.
December 7, 2008
Quote
I don’t think it is as simple as that. Unless I don’t understand what you mean.
December 7, 2008
Quote
In your stylesheet, you have:
You should have:
This is because you don’t want the poster element to be displayed by default. Hence, you want the “expand” image to be displayed by default (i.e. when the cookie has not been set). After the cookie has been set, the value of the cookie dictates whether the element should be expanded or collapsed - and hence what image should be displayed.
December 7, 2008
Quote
Ahh, That should have been obvious. Too much headbanging on my part.
Thank you very much for your help.
You should consider adding this to the tutorial so people can see how to reverse the effect.
Thank you again!
January 2, 2009
Quote
Great tutorial, I’m a bit of a jQuery newbie and this was just the thing I needed to get started. Thanks again.
February 3, 2009
Quote
If I have a site with say 10 modules of content and want this on each one, do I really need to duplicate the code 10 times?
I would love a simpler way based on the ID of the module clicked.
April 15, 2009
Quote
Great tutorial - nice intro into how cookies can make your users’ experiences simpler and easier.
May 13, 2009
Quote
nice . thax for sharing
May 26, 2009
Quote
very nice!!
July 24, 2009
Quote
Very nice tutorial xD, thax !!!!
October 6, 2009
Quote
I would like to make something like Marc’s. I have spent some time trying to get it to work but I haven’t gotten that far. I would like to combine cookies with this code.
jQuery.fn.blindToggle = function(speed, easing, callback) {
var h = this.height() + parseInt(this.css(’paddingTop’)) + parseInt(this.css(’paddingBottom’));
return this.animate({marginTop: parseInt(this.css(’marginTop’)) >0 ? 0 : +270 }, speed, easing, callback);
};
$(document).ready(function() {
var $box = $(’#cBox’)
$(’#blind’).click(function() {
$box.blindToggle(’slow’);
});
});
So that the cookie remembers when the box is down (except 30px) or up.
Nothing I have tried has worked. Your help would be appreciated!
October 6, 2009
Quote
I used pre tags with the language text/javascript Im not sure why I didn’t work.
October 18, 2009
Quote
Thank you so much for this tutorial I used the core of the script but modified to that the only thing left was the collapse part.
Example what I did: http://winpulse.net/index.php
Notice the yellow bar on top, I made it so when you click it that it disappears and doesn’t come back after a refresh :).
Thank you so much!
February 6, 2010
Quote
Hi Homar,
firstly i would like to thank for such a great solution. I have one question - its possible to get wrapper tag relatively by buttons. No discrimination for left or right. Have one code for collapsible functionality and use it every time i place .collapsible class to wrapper and buttons in this tag?
February 10, 2010
Quote
This is really great! I’m new to jQuery, although I’ve been a front-end web designer for about six years now. I’m fresh out of school and willing to learn. Thank you for this!
February 16, 2010
Quote
Excelente aporte….
February 24, 2010
Quote
hey Homar,
just wanted to say thank you .. one of the clearest tuts I’ve read in a long time. superb.
I’m off to bake some cookies ..
February 27, 2010
Quote
Thanks! A very helpful blog entry. I was using a server side AJAX request to store a session value, but using a cookie is much simpler and cleaner, I’ll try it out now!
Thanks
Shaun
March 5, 2010
Quote
Would it not be better to use one cookie?
March 15, 2010
Quote
jQuery cookies plugin is really cool. We used it for few projects now and it has been a great plugin so far.
Great Tutorial though.
June 19, 2010
Quote
I know this article is pretty old now and the chances of someone actually answering this question is pretty slim but I just have to ask. Like one of the previous posters pointed out that it would be better to have this all wrapped into a single cookie would it not ? In my case I have a 2 column layout on my site and each column can contain anywhere between 5 - 10 different divs and I would like to allow my users to have the ability to expand/collapse any of those divs and have their prefs saved for the next time they return to my site and if I am reading your code correctly I would have to create a cookie for each and every div I have on the page so in my case that would mean creating 10-20 cookies just for one page. That is excessive by any standers don’t you agree ? So my question is this, is there anyway to alter the code you have above so that it uses only 1 cookie regardless of how many columns / divs you are using ?
TIA,
Mike
June 29, 2010
Quote
your comment…
July 22, 2010
Quote
very usefull thanks.