function setupCaptions() { document.getElementsByClassName('caption_cover').each( function(cap) { Event.observe(cap, 'mouseover', function(e){ KyanShowCaption(cap.previousSibling); }) Event.observe(cap, 'mouseout', function(e){ KyanHideCaption(cap.previousSibling); }) if(cap.getElementsByTagName('a').length > 0) { links = cap.parentNode.firstChild.getElementsByTagName('a'); for(var i = 0; i < links.length; i++) { links[i].removeAttribute('href'); } Event.observe(cap.getElementsByTagName('a')[0], 'focus', function(e){ KyanShowCaption(cap.previousSibling); }) Event.observe(cap.getElementsByTagName('a')[0], 'blur', function(e){ KyanHideCaption(cap.previousSibling); }) } cap.previousSibling.originalDimensions = Element.getDimensions(cap.previousSibling); cap.previousSibling.style.height = '0px'; cap.previousSibling.style.visibility = 'visible'; if(cap.parentElement && cap.parentElement.currentStyle) { cap.parentElement.style.height = ''+(cap.parentElement.offsetHeight-4)+'px'; } }) $('logo').onclick= function(e) { e = e || window.event; if(e.altKey) { KyanShowCaptions(); return false; } } } Event.observe(window, 'load', setupCaptions); KyanShowCaptions = function() { captions = document.getElementsByClassName('caption') for(var i = 0; i < captions.length; i++) { cap = captions[i]; window.setTimeout(KyanAutoShower(cap), 500 + 300*i); } } KyanAutoShower = function(cap) { return function() { KyanShowCaption(cap); window.setTimeout(function() { KyanHideCaption(cap) }, 1000); }; } KyanHideCaption = function(element) { var element = $(element); var options = Object.extend({ delay: 0.4, duration: 1.2, fps: 40, scaleX: false, scaleContent: false, scaleFrom: 100*element.getDimensions().height / element.originalDimensions.height, scaleMode: { originalHeight: element.originalDimensions.height }, beforeUpdate: function(eff) { // scaleFrom was set when the mouseover happened. This might have // been when the caption was still growing so we recalculate it here eff.options.scaleFrom = 100*eff.element.getDimensions().height / eff.element.originalDimensions.height // Somewhere the factor was being munged so we hackily fix it here eff.factor = -1; // We don't want to run this function again after the first time eff.options.beforeUpdate = null; } }, arguments[1] || {}) element.currentEffect = new Effect.Scale(element, 0, options); return element.currentEffect; } KyanShowCaption = function(element) { var element = $(element); if(element.currentEffect) { element.currentEffect.cancel(); } var options = { fps: 40, scaleX: false, scaleContent: false, scaleFrom: 100*element.getDimensions().height / element.originalDimensions.height, scaleMode: { originalHeight: element.originalDimensions.height }, duration: 0.3 } element.currentEffect = new Effect.Scale(element, 100, options ); return element.currentEffect; }