+ return div;
+ };
+
+ function hasOpacityTransition(div) {
+ return ([div.getStyle('transition-property'),
+ div.getStyle('-moz-transition-property'),
+ div.getStyle('-webkit-transition-property'),
+ div.getStyle('-o-transition-property')
+ ].join(' ').split(' ').indexOf('opacity') !== -1);
+ }
+
+ function hide(div) {
+ div = $(div);
+ if (supportsTransition && hasOpacityTransition(div)) {
+ div.observe(endTransitionEventName, function() {
+ div.stopObserving(endTransitionEventName);
+ if (!div.getOpacity()) { // in case show has been called in-between
+ div.hide();
+ }
+ });
+ div.setOpacity(0);
+ } else {
+ div.hide();
+ }
+ }
+
+ function show(div) {
+ div = $(div);
+ div.show();
+ // we need to set opacity to 0 before calling hasOpacityTransition
+ // otherwise we trigger mozilla #601190
+ div.setOpacity(0);
+ if (supportsTransition && hasOpacityTransition(div)) {
+ // display = '' then opacity = 1;
+ Element.setOpacity.defer(div, 1);
+ } else {
+ div.setOpacity(1);
+ }
+ }