// Name: Add, remove and find event // -------------------------------------------------- function addEvent(obj, evt, fn) { if (obj.addEventListener) { obj.addEventListener(evt, fn, false); } else if (obj.attachEvent) { obj.attachEvent('on' + evt, fn); } } function removeEvent(obj, evt, fn) { if (obj.removeEventListener) { obj.removeEventListener(evt, fn, false); } else if (obj.detachEvent) { obj.detachEvent('on' + evt, fn); } } // Function getElementsByClassName by Robert Nyman var getElementsByClassName = function(className, tag, elm) { if (document.getElementsByClassName) { getElementsByClassName = function(className, tag, elm) { elm = elm || document; var elements = elm.getElementsByClassName(className), nodeName = (tag) ? new RegExp("\\b" + tag + "\\b", "i") : null, returnElements = [], current; for ( var i = 0, il = elements.length; i < il; i += 1) { current = elements[i]; if (!nodeName || nodeName.test(current.nodeName)) { returnElements.push(current); } } return returnElements; }; } else if (document.evaluate) { getElementsByClassName = function(className, tag, elm) { tag = tag || "*"; elm = elm || document; var classes = className.split(" "), classesToCheck = "", xhtmlNamespace = "http://www.w3.org/1999/xhtml", namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace : null, returnElements = [], elements, node; for ( var j = 0, jl = classes.length; j < jl; j += 1) { classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]"; } try { elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null); } catch (e) { elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null); } while ((node = elements.iterateNext())) { returnElements.push(node); } return returnElements; }; } else { getElementsByClassName = function(className, tag, elm) { tag = tag || "*"; elm = elm || document; var classes = className.split(" "), classesToCheck = [], elements = (tag === "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag), current, returnElements = [], match; for ( var k = 0, kl = classes.length; k < kl; k += 1) { classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)")); } for ( var l = 0, ll = elements.length; l < ll; l += 1) { current = elements[l]; match = false; for ( var m = 0, ml = classesToCheck.length; m < ml; m += 1) { match = classesToCheck[m].test(current.className); if (!match) { break; } } if (match) { returnElements.push(current); } } return returnElements; }; } return getElementsByClassName(className, tag, elm); }; // Toggle classes on specified element with href // The function find element with href, then element with id="from href" function toggle_element() { var elem = this; if (elem && (elem.href !== null)) { elem.blur(); var getid = elem.href.split('#'); var id = document.getElementById(getid[1]); if (hasClass(id, "hide")) { replaceClass(id, "hide", "view"); } else { replaceClass(id, "view", "hide"); } } return false; } // Initialisation Toggle classes function toggle_init() { var i, ids, targetURL; var anch = getElementsByClassName("toggle"); if (anch.length < 1) { return false; } // check, if exits any element with "toggle" class for (i = 0; i < anch.length; i++) { if (anch[i].href !== null) { ids = anch[i].href.split("#"); targetURL = document.getElementById(ids[1]); if (!hasClass(targetURL, "hide")) { addClass(targetURL, "hide"); } anch[i].onclick = toggle_element; } } } // **** CSS functions **** // Check if object have class name function hasClass(e, name) { return (!e || !e.className) ? false : new RegExp('\\b' + name + '\\b') .test(e.className); } // Remove class name from object function delClass(e, name) { return e && (e.className = e.className.replace(new RegExp('^' + name + '\\b\\s*|\\s*\\b' + name + '\\b', 'g'), '')); } // Add class name to object function addClass(e, name) { delClass(e, name); return e && (e.className += (e.className ? ' ' : '') + name); } // Swap class name in object function replaceClass(e, class1, class2) { if (typeof e == 'string') { e = document.getElementById(e); } if (hasClass(e, class1)) { delClass(e, class1); addClass(e, class2); return true; } else { return false; } } addEvent(window, 'load', function() { toggle_init(); // toggle class on elements });