// // IASP 5.0 Presentation Layer // March 2007 // // Copyright (C) IASP 2007. // Unauthorised reproduction or use // on external websites will // be subject to rigorous prosecution // // IE7 detection for bait-and-switch fade code var _isIE7 = false; if (typeof document.documentElement.style.maxHeight != "undefined" && document.all) { _isIE7 = true; } // Create namespace CMS.Presentation = function() { } CMS.Presentation._isIE7 = _isIE7; // Set 40 frames per second on all animation var _cms_fps = 40; // Disable all smooth animation and just do simple show/hide var _cms_basicprofile = false; // Handle IE with kid gloves (no height: 0 allowed!) var _cms_ieQuirksMode = false; // Fade one element in or out, and roll another up or down. function cms_fadeRoll(fadeId, startOpacity, endOpacity, totalTimespan, rollId, startHeight, endHeight, endTimeoutCallback, initialDelay) { if (initialDelay == null) initialDelay = 0; if (_cms_ieQuirksMode) { if (startHeight == 0) startHeight = 1; if (endHeight == 0) endHeight = 1; } if (_cms_basicprofile) { // Basic profile only; pop out everything now, set the timeoutCallback to run after the timespan. if (initialDelay > 0) { setTimeout("cms_setOpacity(" + endOpacity + ",'" + fadeId + "')", initialDelay); setTimeout("cms_setHeight(" + endHeight + ",'" + rollId + "')", initialDelay); } else { cms_setOpacity(endOpacity,fadeId); cms_setHeight(endHeight,rollId); } if (endTimeoutCallback != null) { setTimeout(endTimeoutCallback, totalTimespan + initialDelay); } } else { if (_isIE7 == true && startOpacity == 0 && endOpacity == 100) { // Preserve cleartype (create new working copy of object) var originalObj = document.getElementById(fadeId); var newObj = document.createElement(originalObj.tagName); newObj.innerHTML = originalObj.innerHTML; newObj.id = '__fade_baitSwitch_' + originalObj.id; newObj.style.display='none'; var oParent = originalObj.parentNode || originalObj.parent; oParent.insertBefore(newObj,originalObj); } //alert(_cms_fps); var timeInterval = (1000 / _cms_fps); var frames = Math.floor(totalTimespan / timeInterval) - 1; var opacInc = (endOpacity - startOpacity) / frames; var heightInc = (endHeight - startHeight) / frames; var curTime = initialDelay; var curOpac = startOpacity; var curHeight = startHeight; // schedule frames for (i = 0; i < frames; i++) { setTimeout("cms_setOpacity(" + curOpac + ",'" + fadeId + "')", curTime); setTimeout("cms_setHeight(" + curHeight + ",'" + rollId + "')", curTime); curTime += timeInterval; curOpac += opacInc; curHeight += heightInc; } // schedule final status setTimeout("cms_setOpacity(" + endOpacity + ",'" + fadeId + "')", totalTimespan + initialDelay); setTimeout("cms_setHeight(" + endHeight + ",'" + rollId + "')", totalTimespan + initialDelay); // set supplied completion callback as required if (endTimeoutCallback != null) { setTimeout(endTimeoutCallback, (totalTimespan * 1.1) + initialDelay); } if (_isIE7 == true && startOpacity == 0 && endOpacity == 100) { setTimeout("cms_fade_IE_baitSwitch('" + fadeId + "');",(totalTimespan * 1.1) + initialDelay - 5); } } return false; } // Run a 2D resize function cms_resizeAnim(totalTimespan, rollId, startHeight, endHeight, startWidth, endWidth, endTimeoutCallback, initialDelay) { if (initialDelay == null) initialDelay = 0; if (_cms_ieQuirksMode) { if (startHeight == 0) startHeight = 1; if (endHeight == 0) endHeight = 1; if (startWidth == 0) startWidth = 1; if (endWidth == 0) endWidth = 1; } if (_cms_basicprofile) { // Basic profile only; pop out everything now, set the timeoutCallback to run after the timespan. if (initialDelay > 0) { setTimeout("cms_setHeight(" + endHeight + ",'" + rollId + "')", initialDelay); setTimeout("cms_setWidth(" + endWidth + ",'" + rollId + "')", initialDelay); } else { cms_setHeight(endHeight,rollId); cms_setWidth(endWidth,rollId); } if (endTimeoutCallback != null) { setTimeout(endTimeoutCallback, totalTimespan + initialDelay); } } else { var timeInterval = (1000 / _cms_fps); var frames = Math.floor(totalTimespan / timeInterval) - 1; var heightInc = (endHeight - startHeight) / frames; var widthInc = (endWidth - startWidth) / frames; var curTime = initialDelay; var curHeight = startHeight; var curWidth = startWidth; // schedule frames for (i = 0; i < frames; i++) { setTimeout("cms_setHeight(" + curHeight + ",'" + rollId + "')", curTime); setTimeout("cms_setWidth(" + curWidth + ",'" + rollId + "')", curTime); curTime += timeInterval; curHeight += heightInc; curWidth += widthInc; } // schedule final status setTimeout("cms_setHeight(" + endHeight + ",'" + rollId + "')", totalTimespan + initialDelay); setTimeout("cms_setWidth(" + endWidth + ",'" + rollId + "')", totalTimespan + initialDelay); // set supplied completion callback as required if (endTimeoutCallback != null) { //setTimeout(endTimeoutCallback, totalTimespan + 1); setTimeout(endTimeoutCallback, (totalTimespan * 1.1) + initialDelay); } } return false; } // Move an object (must be absolutely positioned beforehand function cms_moveAnim(totalTimespan, rollId, startTop, endTop, startLeft, endLeft, endTimeoutCallback, initialDelay) { if (initialDelay == null) initialDelay = 0; if (_cms_basicprofile) { // Basic profile only; pop out everything now, set the timeoutCallback to run after the timespan. if (initialDelay > 0) { setTimeout("cms_setTop(" + endTop + ",'" + rollId + "')", initialDelay); setTimeout("cms_setLeft(" + endLeft + ",'" + rollId + "')", initialDelay); } else { cms_setTop(endTop,rollId); cms_setLeft(endLeft,rollId); } if (endTimeoutCallback != null) { setTimeout(endTimeoutCallback, totalTimespan + initialDelay); } } else { var timeInterval = (1000 / _cms_fps); var frames = Math.floor(totalTimespan / timeInterval) - 1; var TopInc = (endTop - startTop) / frames; var LeftInc = (endLeft - startLeft) / frames; var curTime = initialDelay; var curTop = startTop; var curLeft = startLeft; // schedule frames for (i = 0; i < frames; i++) { setTimeout("cms_setTop(" + curTop + ",'" + rollId + "')", curTime); setTimeout("cms_setLeft(" + curLeft + ",'" + rollId + "')", curTime); curTime += timeInterval; curTop += TopInc; curLeft += LeftInc; } // schedule final status setTimeout("cms_setTop(" + endTop + ",'" + rollId + "')", totalTimespan + initialDelay); setTimeout("cms_setLeft(" + endLeft + ",'" + rollId + "')", totalTimespan + initialDelay); // set supplied completion callback as required if (endTimeoutCallback != null) { //setTimeout(endTimeoutCallback, totalTimespan + 1); setTimeout(endTimeoutCallback, (totalTimespan * 1.1) + initialDelay); } } return false; } // Run a resize only function cms_roll(totalTimespan, rollId, startHeight, endHeight, endTimeoutCallback, initialDelay) { if (initialDelay == null) initialDelay = 0; if (_cms_ieQuirksMode) { if (startHeight == 0) startHeight = 1; if (endHeight == 0) endHeight = 1; } if (_cms_basicprofile) { // Basic profile only; pop out everything now, set the timeoutCallback to run after the timespan. if (initialDelay > 0) { setTimeout("cms_setHeight(" + endHeight + ",'" + rollId + "')", initialDelay); } else { cms_setHeight(endHeight,rollId); } if (endTimeoutCallback != null) { setTimeout(endTimeoutCallback, totalTimespan + initialDelay); } } else { var timeInterval = (1000 / _cms_fps); var frames = Math.floor(totalTimespan / timeInterval) - 1; var heightInc = (endHeight - startHeight) / frames; var curTime = initialDelay; var curHeight = startHeight; // schedule frames for (i = 0; i < frames; i++) { setTimeout("cms_setHeight(" + curHeight + ",'" + rollId + "')", curTime); curTime += timeInterval; curHeight += heightInc; } // schedule final status setTimeout("cms_setHeight(" + endHeight + ",'" + rollId + "')", totalTimespan + initialDelay); // set supplied completion callback as required if (endTimeoutCallback != null) { //setTimeout(endTimeoutCallback, totalTimespan + 1); setTimeout(endTimeoutCallback, (totalTimespan * 1.1) + initialDelay); } } return false; } // Set function CMS.Presentation.RollByID = cms_roll; // Fade one element in or out function cms_fade(fadeId, startOpacity, endOpacity, totalTimespan, endTimeoutCallback, initialDelay, disableIE7fix) { if (initialDelay == null) initialDelay = 0; if (_cms_basicprofile) { // Basic profile only; pop out everything now, set the timeoutCallback to run after the timespan. if (initialDelay > 0) { setTimeout("cms_setOpacity(" + endOpacity + ",'" + fadeId + "')", initialDelay); } else { cms_setOpacity(endOpacity,fadeId); } if (endTimeoutCallback != null) { setTimeout(endTimeoutCallback, totalTimespan + initialDelay); } } else { if (_isIE7 == true && startOpacity == 0 && endOpacity == 100 && disableIE7fix != true) { // Preserve cleartype (create new working copy of object) var originalObj = document.getElementById(fadeId); var newObj = document.createElement(originalObj.tagName); newObj.innerHTML = originalObj.innerHTML; newObj.id = '__fade_baitSwitch_' + originalObj.id; newObj.style.display='none'; var oParent = originalObj.parentNode || originalObj.parent; oParent.insertBefore(newObj,originalObj); } var timeInterval = (1000 / _cms_fps); var frames = Math.floor(totalTimespan / timeInterval); var opacInc = (endOpacity - startOpacity) / frames; var curTime = initialDelay; var curOpac = startOpacity; // schedule frames for (i = 0; i < frames; i++) { setTimeout("cms_setOpacity(" + curOpac + ",'" + fadeId + "')", curTime); curTime += timeInterval; curOpac += opacInc; } // schedule final status setTimeout("cms_setOpacity(" + endOpacity + ",'" + fadeId + "')", totalTimespan + initialDelay); // set supplied completion callback as required if (endTimeoutCallback != null) setTimeout(endTimeoutCallback, (totalTimespan * 1.1) + initialDelay); if (_isIE7 == true && startOpacity == 0 && endOpacity == 100 && disableIE7fix != true) { setTimeout("cms_fade_IE_baitSwitch('" + fadeId + "');",(totalTimespan * 1.1) + initialDelay - 5); } } return false; } // Set function CMS.Presentation.FadeByID = cms_fade; // Swap the adjacent bait/switch nodes around function cms_fade_IE_baitSwitch(fadeId) { var originalObj = document.getElementById(fadeId); var newObj = document.getElementById('__fade_baitSwitch_' + fadeId); newObj.className = originalObj.className; originalObj.id = '__fade_old' + fadeId; newObj.id = fadeId; newObj.innerHTML = originalObj.innerHTML; originalObj.style.display = 'none'; if (originalObj.style.position) newObj.style.position = originalObj.style.position; if (originalObj.style.top) newObj.style.top = originalObj.style.top; if (originalObj.style.left) newObj.style.left = originalObj.style.left; newObj.style.display = 'block'; // delete old object var oParent = originalObj.parentNode || originalObj.parent; oParent.removeChild(originalObj); } // Open popup div, load image and roll out to size function cms_img_loadRolloutPopup(dataId,imgId,fieldId,url) { var idStrBase = 'ic' + dataId + '_' + imgId + '_' + fieldId; var baseImgObj = document.getElementById(idStrBase); var baseParent = baseImgObj.parentNode || baseImgObj.parent; if (baseParent._open != 1) { // Open rollout div var outerDivObj = document.getElementById('sw_pi_' + idStrBase); var innerDivObj = document.getElementById('pi_' + idStrBase); innerDivObj.title = 'Click to close popup image.'; baseParent._open = 1; // catch wrapping shadow div if available var pos_obj = outerDivObj; if (pos_obj == null) pos_obj = innerDivObj; // Position div over image pos_obj.style.top=findPosY(baseImgObj) + "px"; pos_obj.style.left=findPosX(baseImgObj) + "px"; innerDivObj.style.height = baseImgObj.offsetHeight + "px"; innerDivObj.style.width = baseImgObj.offsetWidth + "px"; innerDivObj.style.display='block'; pos_obj.style.display='block'; cms_setOpacity(100,pos_obj.id); var absOldTop = findAbsPosY(baseImgObj); var absOldLeft = findAbsPosX(baseImgObj); // Fix size of wrapper and hide overflow innerDivObj.style.height = innerDivObj.offsetHeight + "px"; innerDivObj.style.width = innerDivObj.offsetWidth + "px"; innerDivObj.style.overflow = 'hidden'; // Create img element var newImgObj = document.createElement('IMG'); newImgObj.onload = function() { // Give the image an ID newImgObj.id = 'dynimg_' + idStrBase; innerDivObj.appendChild(newImgObj); cms_setOpacity(0,newImgObj.id); // Get sizes var oldHeight = parseInt(innerDivObj.offsetHeight); var newHeight = parseInt(newImgObj.offsetHeight); var oldWidth = parseInt(innerDivObj.offsetWidth); var newWidth = parseInt(newImgObj.offsetWidth); var pos_obj = (outerDivObj == null)?innerDivObj:outerDivObj; // Get start position var oldTop = parseInt(pos_obj.style.top.replace(/[^0-9]/g,'')); var oldLeft = parseInt(pos_obj.style.left.replace(/[^0-9]/g,'')); // Get screen size var s_width = parseInt(parent.document.documentElement.clientWidth); if (s_width == 0) s_width = parseInt(parent.document.body.clientWidth); var s_height = parseInt(parent.document.documentElement.clientHeight); if (s_height == 0) s_height = parseInt(parent.document.body.clientHeight); var scrolltop = parseInt(parent.document.documentElement.scrollTop); if (scrolltop == 0) scrolltop = parseInt(parent.document.body.scrollTop); // Calculate new position var newTop = oldTop; var newLeft = oldLeft; //alert('realLeft=' + absOldLeft + '\nrealTop=' + absOldTop + '\noldLeft=' + oldLeft + '\nnewwidth=' + newWidth + '\ncurwidth=' + oldWidth + '\ns_width=' + s_width + '\n\oldTop=' + oldTop + '\nnewheight=' + newHeight + '\ncurheight=' + oldHeight + '\ns_height=' + s_height + '\nscrolltop=' + scrolltop); if (s_width > 0 && s_height > 0) { // we can calculate window size // Get left position if ((absOldLeft + newWidth) > s_width) { if (absOldLeft + oldWidth - newWidth > 0) newLeft = (oldLeft + oldWidth - newWidth); else if (s_width - newWidth - 1 > 0) newLeft = (s_width - newWidth - 12); else { newLeft = 0; if (newWidth + 16 > s_width) { var scaleFactor = ((s_width - 16) / newWidth); newWidth = s_width - 16; newHeight = newHeight * scaleFactor; this.style.width=newWidth + 'px'; this.style.height=newHeight + 'px'; } } } // Get top position if ((absOldTop + newHeight) > (s_height + scrolltop)) { if (absOldTop + oldHeight - newHeight > scrolltop) newTop = (oldTop + oldHeight - newHeight); else if (s_height - newHeight - 1 > scrolltop) newTop = (s_height - newHeight - 12); else { newTop = scrolltop; if (newHeight + 16 > s_height) { var scaleFactor = ((s_height - 16) / newHeight); newHeight = s_height - 16; newWidth = newWidth * scaleFactor; this.style.width=newWidth + 'px'; this.style.height=newHeight + 'px'; } } } } // Turn off loader anim innerDivObj.className = 'cms_ui_popup_image_loaded'; // Start move anim if (oldTop != newTop || oldLeft != newLeft) cms_moveAnim(200, pos_obj.id, oldTop, newTop, oldLeft, newLeft); // Schedule fade (after move anim) cms_fade(newImgObj.id, 0, 100, 300, null, 100, true); // Schedule rollout (after move anim) cms_resizeAnim(250, innerDivObj.id, oldHeight, newHeight, oldWidth, newWidth, null, 100); } newImgObj.src = CMS.appRoot + 'img.ashx?f=v&' + url; } else { cms_img_cleanupClosedRollout(idStrBase); } return false; } function cms_img_cleanupClosedRollout(idStrBase) { var outerDivObj = document.getElementById('sw_pi_' + idStrBase); var innerDivObj = document.getElementById('pi_' + idStrBase); var baseImgObj = document.getElementById(idStrBase); while (innerDivObj.firstChild) { innerDivObj.removeChild(innerDivObj.firstChild); }; var baseParent = baseImgObj.parentNode || baseImgObj.parent; baseParent._open = 0; if (outerDivObj) outerDivObj.style.display='none'; innerDivObj.style.display = 'none'; innerDivObj.className = 'cms_ui_popup_image'; } function cms_img_closeRolloutPopup(dataId,imgId,fieldId,url) { var idStrBase = 'ic' + dataId + '_' + imgId + '_' + fieldId; var outerDivObj = document.getElementById('sw_pi_' + idStrBase); var innerDivObj = document.getElementById('pi_' + idStrBase); var baseImgObj = document.getElementById(idStrBase); var wrapObj = (outerDivObj == null)?innerDivObj:outerDivObj; cms_fade(wrapObj.id, 100, 0, 200, null, 0, true); setTimeout("cms_img_cleanupClosedRollout('" + idStrBase + "');",160); }