/* requires neos-utils.js */ var NEOS_NS = "neos"; // Neos namespace /** Max Leng **/ /* var MAX_TEXTAREA_LENGTH=255; function checkMaxInput(textarea) { if (textarea.value.length > MAX_TEXTAREA_LENGTH) textarea.value = textarea.value.substring(0, MAX_TEXTAREA_LENGTH); } var MAX_COMMENTS_LEN=1000; function checkMaxInputComments(textarea) { maxLen = 1000; if (textarea.value.length > MAX_COMMENTS_LEN) textarea.value = textarea.value.substring(0, MAX_COMMENTS_LEN); } */ /** NEO-S rollover images functions. **/ // === Variables === // Images cache. var loadedImages = new Array(); // Suffices array - 1 per an image state. // Empty suffix is for 'default' images. var suffices = new Array(2); suffices[0] = ""; suffices[1] = "on"; // Preload completion flag. var loaded = false; // Defaults. var defaultPath = "../img/"; var defaultExt = ".png"; // === API === /** * Pre-loads image(s) by names. * * Call example: preLoadByName('test/404.gif', 'delete'); */ function preLoadByName() { if (document.images) { // Iterate over arguments. var argLen = arguments.length; for (var i = 0; i < argLen; i++) { // Image name. var name = arguments[i]; // Check for duplicates. if (loadedImages[name]) { return; } // Extract path, use default, if none. var path = defaultPath; var k = name.lastIndexOf('/'); if (k >= 0) { path = name.substring(0, k + 1); name = name.substring(k + 1); } // Extract extension, use default, if none. var ext = defaultExt; k = name.lastIndexOf('.'); if (k >= 0) { ext = name.substring(k); name = name.substring(0, k); } // Iterate over suffices. var sufLen = suffices.length; for (j = 0; j < sufLen; j++) { var suffix = suffices[j]; if (suffix != "" && suffix.indexOf('_') != 0) { suffix = '_' + suffix; } name += suffix; loadedImages[name] = new Image(); loadedImages[name].src = path + name + ext; } } loaded = true; } // [ONZ] TODO: Debugging code, remove as complete. // dumpCache(); } /** * Pre-loads the given image. * * @param image The image object. */ function preLoadImage(component) { if (component) { if (component.src) { preLoadByName(component.src); } else if (component.name) { preLoadByName(component.name); } else { // [ONZ] TODO: Failed - add alert for the developer. } } } /** * Image rollover handler. * * @param name The image name. * @param locale The image locale (optional, use '' for default). * @param state The image state, e.g. 'on' (optional). */ function rollOver(component, locale, state) { var argLen = arguments.length; var localeSuffix = ""; if (argLen >= 2 && locale && locale.length > 0) { localeSuffix = '_' + locale; } var stateSuffix = ((argLen == 3 && state) ? ('_' + state) : ""); if (document.images && loaded) { var loadedImage = loadedImages[name + localeSuffix + stateSuffix]; if (component && loadedImage) { component.src = loadedImage; } else if (component) { showRollover(component, localeSuffix, stateSuffix); } } else if (component) { showRollover(component, localeSuffix, stateSuffix); } } function showRollover(component, localeSuffix, stateSuffix){ component.src = component.name + localeSuffix + stateSuffix + ".png"; } function displayRollover(component, imgSrc){ var loadedImage = loadedImages[imgSrc]; if(component&&loadedImage){//already cached component.src = loadedImage.src; } else if(component){ //not cached. LET'S CACHE IT IMMEDIATELY. var img = new Image(); img.src = imgSrc; loadedImages[imgSrc] = img; component.src = img.src; } } function displayRolloverStated(component, imgSrc) { var attrVal = getElmAttr(component, "disabled", NEOS_NS); if (attrVal == null || attrVal == false || attrVal == "false") { displayRollover(component, imgSrc); } } function disableRolloverElem(rolloverElm) { var disabledSrc = getElmAttr(rolloverElm, "disabledSrc", NEOS_NS); if (rolloverElm && disabledSrc) { rolloverElm.src = disabledSrc; setElmAttr(rolloverElm, "disabled", true, NEOS_NS); setElmAttr(rolloverElm, "disabled", "disabled"); } } function enableRolloverElem(rolloverElm) { var defaultSrc = getElmAttr(rolloverElm, "defaultSrc", NEOS_NS); if (rolloverElm && defaultSrc) { rolloverElm.src = defaultSrc; setElmAttr(rolloverElm, "disabled", false, NEOS_NS); remElmAttr(rolloverElm, "disabled"); } } function disableRollover(rolloverId) { disableRolloverElem(document.getElementById(rolloverId)); } function enableRollover(rolloverId) { enableRolloverElem(document.getElementById(rolloverId)); } // === caching images == function cacheImages(activeImageURL, inactiveImageURL){ loadedImages[activeImageURL] = new Image(); loadedImages[activeImageURL].src = activeImageURL; loadedImages[inactiveImageURL] = new Image(); loadedImages[inactiveImageURL].src = inactiveImageURL; } /* Rotate button rollover code */ var doHLAction = true; // state variables to get rid of recursion calls var doDLAction = true; // state variables to get rid of recursion calls var overImagesCached = false; var ROTATE_LEFT_OVER_SRC = '../img/button_toolbar_rotate_l_over.gif'; var ROTATE_RIGHT_OVER_SRC = '../img/button_toolbar_rotate_r_over.gif'; // TODO: cache 'over' images // TODO: needs refactoring function rotateButtonHighlight(elm, ev, rLeftElmId, rRightElmId, labelId, callerId) { if (doHLAction) { doHLAction = false; var rotateLeftElm = document.getElementById(rLeftElmId); var rotateRightElm = document.getElementById(rRightElmId); var rotateLabel = document.getElementById(labelId); if (callerId == labelId) { ev = ev || window.event; var mouseOffset = getMouseOffset(elm, ev); if (mouseOffset.x < (elm.offsetWidth / 2)) { if (rotateLeftElm) { displayRollover(rotateLeftElm,ROTATE_LEFT_OVER_SRC); }; if (rotateRightElm) { rotateRightElm.onmouseover(); }; } else { if (rotateRightElm) { displayRollover(rotateRightElm,ROTATE_RIGHT_OVER_SRC); }; if (rotateLeftElm) { rotateLeftElm.onmouseover(); }; }; } else if (callerId == rLeftElmId) { if (rotateLabel) rotateLabel.onmouseover(); if (rotateRightElm) { rotateRightElm.onmouseover(); }; if (rotateLeftElm) { displayRollover(rotateLeftElm,ROTATE_LEFT_OVER_SRC); }; } else if (callerId == rRightElmId) { if (rotateLabel) rotateLabel.onmouseover(); if (rotateLeftElm) { rotateLeftElm.onmouseover(); }; if (rotateRightElm) { displayRollover(rotateRightElm,ROTATE_RIGHT_OVER_SRC); }; }; doHLAction = true; } } function rotateButtonDislight(elm, ev, rLeftElmId, rRightElmId, labelId, callerId) { if (doDLAction) { doDLAction = false; var rotateLeftElm = document.getElementById(rLeftElmId); var rotateRightElm = document.getElementById(rRightElmId); var rotateLabel = document.getElementById(labelId); if (callerId != labelId) { rotateLabel.onmouseout(); }; if (callerId != rotateRightElm) { rotateRightElm.onmouseout(); }; if (callerId != rotateLeftElm) { rotateLeftElm.onmouseout(); }; doDLAction = true; } } // === Private/debugging functions === function dumpCache() { var s = ""; var i = 0; for (var k in loadedImages) { var d = loadedImages[k]; s += "\n{" + k + ": " + d; s += "\n src = " + d.src; s += "\n}" i++; } s = typeof(loadedImages) + "[" + i + "]" + s; alert(s); } function changeLanguage(lang){ var link = document.getElementById("link_"+lang); if(link){ // link.onclick(); window.location.href = link.href; } }