// ------------------------------------------------------------------- // Switch Content Script- By Dynamic Drive, available at: http://www.dynamicdrive.com // Created: Jan 5th, 2007 // April 5th, 07: Added ability to persist content states by x days versus just session only // March 27th, 08': Added ability for certain headers to get its contents remotely from an external file via Ajax (2 variables below to customize) // ------------------------------------------------------------------- var switchcontent_ajax_msg='Loading Ajax content...' //Customize message to show while fetching Ajax content (if applicable) var switchcontent_ajax_bustcache=true //Bust cache and refresh fetched Ajax contents when page is reloaded/ viewed again? function switchcontent(className, filtertag){ this.className=className this.collapsePrev=false //Default: Collapse previous content each time this.persistType="none" //Default: Disable persistence //Limit type of element to scan for on page for switch contents if 2nd function parameter is defined, for efficiency sake (ie: "div") this.filter_content_tag=(typeof filtertag!="undefined")? filtertag.toLowerCase() : "" this.ajaxheaders={} //object to hold path to ajax content for corresponding header (ie: ajaxheaders["header1"]='external.htm') } switchcontent.prototype.setStatus=function(openHTML, closeHTML){ //PUBLIC: Set open/ closing HTML indicator. Optional this.statusOpen=openHTML this.statusClosed=closeHTML } switchcontent.prototype.setColor=function(openColor, closeColor){ //PUBLIC: Set open/ closing color of switch header. Optional this.colorOpen=openColor this.colorClosed=closeColor } switchcontent.prototype.setPersist=function(bool, days){ //PUBLIC: Enable/ disable persistence. Default is false. if (bool==true){ //if enable persistence if (typeof days=="undefined") //if session only this.persistType="session" else{ //else if non session persistent this.persistType="days" this.persistDays=parseInt(days) } } else this.persistType="none" } switchcontent.prototype.collapsePrevious=function(bool){ //PUBLIC: Enable/ disable collapse previous content. Default is false. this.collapsePrev=bool } switchcontent.prototype.setContent=function(index, filepath){ //PUBLIC: Set path to ajax content for corresponding header based on header index this.ajaxheaders["header"+index]=filepath } switchcontent.prototype.sweepToggle=function(setting){ //PUBLIC: Expand/ contract all contents method. (Values: "contract"|"expand") if (typeof this.headers!="undefined" && this.headers.length>0){ //if there are switch contents defined on the page for (var i=0; i1) //If there exists open content to be persisted opencontents.shift() //Boot the "none" value from the array, so all it contains are the ids of the open contents if (typeof this.statusOpen!="undefined") this.statusOpen=this.statusClosed=null //Cleanup code if (this.persistType=="session") //if session only cookie set switchcontent.setCookie(this.className, opencontents.join(",")) //populate cookie with indices of open contents: classname=1,2,3,etc else if (this.persistType=="days" && typeof this.persistDays=="number"){ //if persistent cookie set instead switchcontent.setCookie(this.className+"_d", opencontents.join(","), this.persistDays) //populate cookie with indices of open contents switchcontent.setCookie(this.className+"_dtrack", this.persistDays, this.persistDays) //also remember number of days to persist (int) } } // ------------------------------------------------------------------- // A few utility functions below: // ------------------------------------------------------------------- switchcontent.dotask=function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload) var tasktype=(window.addEventListener)? tasktype : "on"+tasktype if (target.addEventListener) target.addEventListener(tasktype, functionref, false) else if (target.attachEvent) target.attachEvent(tasktype, functionref) } switchcontent.connect=function(pageurl, header){ var page_request = false var bustcacheparameter="" if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) try { page_request = new ActiveXObject("Msxml2.XMLHTTP") } catch (e){ try{ page_request = new ActiveXObject("Microsoft.XMLHTTP") } catch (e){} } } else if (window.XMLHttpRequest) // if Mozilla, Safari etc page_request = new XMLHttpRequest() else return false page_request.onreadystatechange=function(){switchcontent.loadpage(page_request, header)} if (switchcontent_ajax_bustcache) //if bust caching of external page bustcacheparameter=(pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime() page_request.open('GET', pageurl+bustcacheparameter, true) page_request.send(null) } switchcontent.loadpage=function(page_request, header){ var innercontent=document.getElementById(header.id.replace("-title", "")) //Reference content container for this header innercontent.innerHTML=switchcontent_ajax_msg //Display "fetching page message" if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){ innercontent.innerHTML=page_request.responseText header.ajaxstatus="loaded" } } switchcontent.getCookie=function(Name){ var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair if (document.cookie.match(re)) //if cookie found return document.cookie.match(re)[0].split("=")[1] //return its value return "" } switchcontent.setCookie=function(name, value, days){ if (typeof days!="undefined"){ //if set persistent cookie var expireDate = new Date() var expstring=expireDate.setDate(expireDate.getDate()+days) document.cookie = name+"="+value+"; expires="+expireDate.toGMTString() } else //else if this is a session only cookie document.cookie = name+"="+value }