var ocm_time_in = 3, ocm_time_out= 5, max_opac = 0.9, ocm_opac_step = 0.05; var aTimer = null, bTimer = null; // Timer var elements = new Array(); /* functions */ function ocm_child(el) { var child_alive = false; for(var j=0;j< elements.length;j++) { if(elements[j] == null || elements[j] == undefined) continue; if(elements[j].pa_men == el) { if(elements[j].active) child_alive = true; else child_alive = ocm_child(elements[j]); } if(child_alive) break; } return child_alive; } /* dest = true => show*/ function ocm_blend(fade_in) { // return if there are no more elements if(elements.length == 0) return; // if any update was done set timer (at the end) var update = false; for(var i=0;i< elements.length;i++) { if(elements[i] == null || elements[i] == undefined) continue; var child_alive = ocm_child(elements[i]); if(!elements[i].active && !child_alive && !fade_in) { if(elements[i].xOpacity > 0) { // Fade out elements[i].xOpacity -= ocm_opac_step; setOpacity(elements[i]); update = true; } else { elements[i].style.visibility = 'hidden'; elements[i] = null; elements = ocm_trim(elements); } } else if(fade_in && (elements[i].active || child_alive)) { if(elements[i].xOpacity == 0) elements[i].style.visibility="visible"; if(elements[i].xOpacity < max_opac) { // Fade in elements[i].xOpacity += ocm_opac_step; setOpacity(elements[i]); update = true; } } } } function ocm_trim(array) { // trim list while(array.length > 0 && array[array.length-1] == null) { array.pop(); } return array; } function ocm_leave(el) { var element = document.getElementById(el); element.active = false; if(aTimer == null) aTimer = setInterval("ocm_blend(false)",ocm_time_out); } function ocm_enter(el,parent_menue,pa_el,align) { // Get the element var element = document.getElementById(el); var pa_men = document.getElementById(parent_menue); // Set element active element.active = true; // is the element a new element var isNew = true; // if any elements are in the element list // check for last and current element if(elements.length > 0) { for(var i=0;i< elements.length;i++) { if(elements[i] == null || elements[i] == undefined) continue; // if element is already in element list if(elements[i] == element) { // element is not new isNew = false; } } } // if parent is set if(pa_el) { x = absLeft(pa_el); y = absTop(pa_el); w = pa_el.offsetWidth; h = pa_el.offsetHeight; if(align=="right") { element.style.left = x+w+'px'; element.style.top = y+'px'; } else if(align="bottom") { element.style.left = x+'px'; element.style.top = y+h+'px'; element.style.minwidth = w+'px'; } } // if element is new, then add to element list if(isNew) { element.xOpacity = 0; element.pa_men = pa_men; elements[elements.length] = element; } if(bTimer == null) bTimer = setInterval("ocm_blend(true)",ocm_time_in); } function setOpacity(el) { if(el.xOpacity >= max_opac) { el.xOpacity = max_opac; } else if(el.xOpacity <= 0) { el.xOpacity = 0; } el.style.opacity = el.xOpacity; el.style.MozOpacity = el.xOpacity; el.style.filter = "alpha(opacity=" + (el.xOpacity*100) + ")"; } function absLeft(el) { return (el.offsetParent) ? el.offsetLeft+absLeft(el.offsetParent) : el.offsetLeft; } function absTop(el) { return (el.offsetParent) ? el.offsetTop+absTop(el.offsetParent) : el.offsetTop; }