var PANEL_NORMAL_CLASS = "panel"; var PANEL_COLLAPSED_CLASS = "panelcollapsed"; var PANEL_HEADING_TAG = "h2"; var PANEL_CONTENT_CLASS = "panelcontent"; var PANEL_COOKIE_NAME = "panels"; var PANEL_ANIMATION_DELAY = 20; /*ms*/ var PANEL_ANIMATION_STEPS = 10; function setUpPanels() { loadSettings(); // get all headings var headingTags = document.getElementsByTagName(PANEL_HEADING_TAG); // go through all tags for (var i=0; i0) ? iteration : 10 - iteration) * stepHeight) +"px"; iteration++; setTimeout(function(){ animateStep(panelContent,iteration,stepHeight,direction)}, PANEL_ANIMATION_DELAY); }else{ // set class for the panel panelContent.parentNode.className = (direction<0) ? PANEL_COLLAPSED_CLASS : PANEL_NORMAL_CLASS; // clear inline styles panelContent.style.display = panelContent.style.height = ""; }} // ----------------------------------------------------------------------------------------------- // Load-Save // ----------------------------------------------------------------------------------------------- /** * Reads the "panels" cookie if exists, expects data formatted as key:value|key:value... puts in panelsStatus object */ function loadSettings(){ // prepare the object that will keep the panel statuses panelsStatus = {}; // find the cookie name var start = document.cookie.indexOf(PANEL_COOKIE_NAME + "="); if (start == -1) return; // starting point of the value start += PANEL_COOKIE_NAME.length+1; // find end point of the value var end = document.cookie.indexOf(";", start); if (end == -1) end = document.cookie.length; // get the value, split into key:value pairs var cookieValue = unescape(document.cookie.substring(start, end)); var panelsData = cookieValue.split("|"); // split each key:value pair and put in object for (var i=0; i< panelsData.length; i++) { var pair = panelsData[i].split(":"); panelsStatus[pair[0]] = pair[1]; }} /** * Takes data from the panelsStatus object, formats as key:value|key:value... and puts in cookie valid for 365 days * @param key key name to save * @paeam value key value */ function saveSettings(key, value){ // put the new value in the object panelsStatus[key] = value; // create an array that will keep the key:value pairs var panelsData = []; for (var key in panelsStatus) panelsData.push(key+":"+panelsStatus[key]); // set the cookie expiration date 1 year from now var today = new Date(); var expirationDate = new Date(today.getTime() + 365 * 1000 * 60 * 60 * 24); // write the cookie document.cookie = PANEL_COOKIE_NAME + "=" + escape(panelsData.join("|")) + ";expires=" + expirationDate.toGMTString(); } // ----------------------------------------------------------------------------------------------- // Register setUpPanels to be executed on load if (window.addEventListener) { // the "proper" way window.addEventListener("load", setUpPanels, false); }else if (window.attachEvent){ // the IE way window.attachEvent("onload", setUpPanels); }