// This function is just used for resizing text areas function resizeTextarea(itm,direction) { var txtarea = document.getElementById(itm); if (direction == 'down') { txtarea.rows = txtarea.rows + 3; } else { txtarea.rows = txtarea.rows - 3; } } // Just opens the url in a new window that is placed in the centre of the screen function openCentered(theURL,winName,winWidth,winHeight,features) { var w = (screen.width - winWidth)/2; var h = (screen.height - winHeight)/2 - 30; features = features+',width='+winWidth+',height='+winHeight+',top='+h+',left='+w; window.open(theURL,winName,features); } // Returns all elements that have been assigned a specific class function getElementsByClass(searchClass,node,tag) { var classElements = new Array(); if (node == null) { node = document; } if (tag == null) { tag = '*'; } var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)'); for (i = 0, j = 0; i < elsLen; i++) { if (pattern.test(els[i].className)) { classElements[j] = els[i]; j++; } } return classElements; } // This is used to add a JavaScript even to an element function addEvent(obj, type, fn) { if(obj.addEventListener) { obj.addEventListener(type, fn, false); EventCache.add(obj, type, fn); } else if (obj.attachEvent) { obj['e' + type + fn] = fn; obj[type + fn] = function() { obj['e' + type + fn](window.event); } obj.attachEvent('on' + type, obj[type + fn]); EventCache.add(obj, type, fn); } else { obj['on' + type] = obj['e' + type+fn]; } } // This is used with the above function var EventCache = function(){ var listEvents = []; return { listEvents : listEvents, add : function(node, sEventName, fHandler){ listEvents.push(arguments); }, flush : function(){ var i, item; for(i = listEvents.length - 1; i >= 0; i = i - 1){ item = listEvents[i]; if(item[0].removeEventListener){ item[0].removeEventListener(item[1], item[2], item[3]); }; if(item[1].substring(0, 2) != "on"){ item[1] = "on" + item[1]; }; if(item[0].detachEvent){ item[0].detachEvent(item[1], item[2]); }; item[0][item[1]] = null; }; } }; }(); addEvent(window,'unload',EventCache.flush); // Just a function to hide the comments and show the hide/show link function lazOnload() { lazNode = document.getElementById('lazarusgb'); var comDivs = getElementsByClass('comDiv', lazNode, 'div'); for (i = 0; i < comDivs.length; i++) { comDivs[i].style.overflow = 'hidden'; comDivs[i].style.height = comDivs[i].offsetHeight + 2 + 'px'; comDivs[i].style.display = 'none'; document.getElementById(comDivs[i].id + '_link').style.display = ''; } } // This is called to display AGCode buttons and make smiley button do something function doSmileysBox() { smileysBox = document.getElementById('LazSmileys'); smileysBox.style.display = ''; smileysBox.style.width = document.getElementById('gb_comment').offsetWidth + 'px'; smileysBox.style.height = (smileysBox.offsetHeight > 100) ? 100 + 'px': smileysBox.offsetHeight + 'px'; document.getElementById('theSmileys').style.height = smileysBox.style.height; smileysBox.style.display = 'none'; elem = document.getElementById('smileySlider'); el = 'LazSmileys'; addEvent(elem, 'click', function() { toggleSlide('LazSmileys'); } ); } // Takes a string and removes and whitespace from the ends function trim(value) { value = value.replace(/^\s+|\s+$/g,''); return(value); } // Posts a given smiley string in to the textarea function emoticon(string) { string = ' ' + string + ' '; document.getElementById('gb_comment').focus(); if (typeof(document.getElementById('gb_comment').selectionStart) != 'undefined') { var start = document.getElementById('gb_comment').selectionStart; document.getElementById('gb_comment').value = document.getElementById('gb_comment').value.substr(0, start) + string + document.getElementById('gb_comment').value.substr(document.getElementById('gb_comment').selectionEnd, document.getElementById('gb_comment').value.length); start += string.length; document.getElementById('gb_comment').setSelectionRange(start, start); } document.getElementById('gb_comment').focus(); } // Used to put the AGCode in to the textarea surrounding any selected text function agCode(theTag) { textarea = document.getElementById('gb_comment'); tagStart = '[' + theTag + ']'; tagEnd = '[/' + theTag + ']'; var scrollTop = textarea.scrollTop; if (typeof textarea.selectionStart != 'undefined') { var start = textarea.selectionStart, end = textarea.selectionEnd; if (textarea.value.substring(start, start + 1) == ' ') start++; if (textarea.value.substring(end - 1, end) == ' ') end--; var selection = textarea.value.substring(start, end); var selectionStart = start; } else if (document.selection.createRange) { var selection = document.selection.createRange().text; var selectionStart = 0; } selection = (trim(selection) != '') ? selection : ''; var text = tagStart + selection + (typeof tagEnd != 'undefined' ? tagEnd : tagStart); if (typeof textarea.selectionStart != 'undefined') textarea.value = textarea.value.substr(0, start) + text + textarea.value.substr(end); else if (document.selection && document.selection.createRange) { textarea.focus(); range = document.selection.createRange(); range.text = text.replace(/\r?\n/g, '\r\n'); range.select(); } else { textarea.value += text; } textarea.scrollTop = scrollTop; textarea.focus(); if (typeof textarea.setSelectionRange == 'undefined') { range = document.selection.createRange(); tagEndLength = (typeof tagEnd != 'undefined' ? tagEnd : tagStart).length; range.moveStart('character', -tagEndLength - selection.length); range.moveEnd('character', -tagEndLength); range.select() } else { newStart = selectionStart + tagStart.length; newEnd = newStart + selection.length; textarea.setSelectionRange(newStart, newEnd) } } // Gets the styling of the chosen elemtn function getStyle(oElm, strCssRule) { var strValue = ''; if(document.defaultView && document.defaultView.getComputedStyle) { strValue = document.defaultView.getComputedStyle(oElm, '').getPropertyValue(strCssRule); } else if(oElm.currentStyle) { strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1) { return p1.toUpperCase(); }); strValue = oElm.currentStyle[strCssRule]; } return strValue; } // Stores any styling assigned to form inputs before highlighting them as incorrect function errorStyling(itm) { if(lazFormStyle[itm] == '' || lazFormStyle[itm] == undefined) { lazFormStyle[itm] = (getStyle(document.getElementById(itm), 'background-color') == undefined) ? '' : getStyle(document.getElementById(itm), 'background-color'); } document.getElementById(itm).style.backgroundColor = input_error_color; } // below here is the JavaScript used for the sliding effect. It is a modified version of // http://www.harrymaugans.com/2007/03/24/one-click-toggle-for-sliding-animated-div/ var timerlen = 5; var slideAniLen = 500; var timerID = []; var startTime = []; var obj = []; var endHeight = []; var moving = []; var dir = []; var comCount = []; var objPre = ''; function slidedown(objname) { if(moving[objname]) { return; } if(document.getElementById(objPre + objname).style.display != 'none') { return; // cannot slide down something that is already visible } moving[objname] = true; dir[objname] = 'down'; startslide(objname); } function slideup(objname) { if(moving[objname]) { return; } if(document.getElementById(objPre + objname).style.display == 'none') { return; // cannot slide up something that is already hidden } moving[objname] = true; dir[objname] = 'up'; startslide(objname); } function startslide(objname) { obj[objname] = document.getElementById(objPre + objname); endHeight[objname] = parseInt(obj[objname].style.height); startTime[objname] = (new Date()).getTime(); if(dir[objname] == 'down') { obj[objname].style.height = '1px'; } obj[objname].style.display = 'block'; timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen); } function slidetick(objname) { var elapsed = (new Date()).getTime() - startTime[objname]; if (elapsed > slideAniLen) { endSlide(objname) } else { var d =Math.round(elapsed / slideAniLen * endHeight[objname]); if(dir[objname] == 'up') { d = endHeight[objname] - d; } obj[objname].style.height = d + 'px'; } return; } function endSlide(objname) { clearInterval(timerID[objname]); if(dir[objname] == 'up') { obj[objname].style.display = 'none'; } obj[objname].style.height = endHeight[objname] + 'px'; delete(moving[objname]); delete(timerID[objname]); delete(startTime[objname]); delete(endHeight[objname]); delete(obj[objname]); delete(dir[objname]); if(objPre != '') { document.getElementById(objPre + objname + '_link').innerHTML = ((document.getElementById(objPre + objname).style.display == 'none') ? showComs : hideComs) + ' (' + comCount[objname] + ')'; } return; } function toggleSlide(objname, comsCount) { comCount[objname] = comsCount; if(document.getElementById(objPre + objname).style.display == 'none'){ // div is hidden, so let's slide down slidedown(objname); } else { // div is not hidden, so slide up slideup(objname); } }