summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorMax Kremmel <xing@synapse.plus.com>2005-06-19 21:54:53 +0000
committerMax Kremmel <xing@synapse.plus.com>2005-06-19 21:54:53 +0000
commitdb4ad3c4b3a873e3169291d31796bff392200f1b (patch)
tree7689177858b2ea14e5703c487114d730ca278861 /js
parentcb8de906aeb7b55e561449aab664d60ec6cfdbba (diff)
downloadthemes-db4ad3c4b3a873e3169291d31796bff392200f1b.tar.gz
themes-db4ad3c4b3a873e3169291d31796bff392200f1b.tar.bz2
themes-db4ad3c4b3a873e3169291d31796bff392200f1b.zip
moved js files in themes/ to common folder
Diffstat (limited to 'js')
-rw-r--r--js/hoverfix.js30
-rw-r--r--js/overlib.js337
-rw-r--r--js/pngfix.js29
-rw-r--r--js/tabs/listener.js86
-rw-r--r--js/tabs/tabpane.js332
-rw-r--r--js/tabs/tabs.css1
-rw-r--r--js/tabs/tabs.js404
-rw-r--r--js/tabs/tabs_load.js32
8 files changed, 1251 insertions, 0 deletions
diff --git a/js/hoverfix.js b/js/hoverfix.js
new file mode 100644
index 0000000..d8af8fe
--- /dev/null
+++ b/js/hoverfix.js
@@ -0,0 +1,30 @@
+/** JavaScript for MSIE **/
+function verifyIds(idList) {
+ var ret = new Array();
+ for(var i=0;i<idList.length;i++){
+ var id = document.getElementById(idList[i]);
+ if(id && (id.className == 'menu ver' || id.className == 'menu hor' || idList[i] == 'nav')) {ret.push(idList[i]);}
+ }
+ return ret;
+}
+ieHover = function() {
+ ieIDs = verifyIds(nexusMenus);
+ for (k=0;k<ieIDs.length;k++) {
+ var ieULs = document.getElementById(ieIDs[k]).getElementsByTagName('ul');
+ /** IE script to cover <select> elements with <iframe>s **/
+ for (j=0; j<ieULs.length; j++) {
+ ieULs[j].innerHTML = ('<iframe src="about:blank" scrolling="no" frameborder="0"></iframe>' + ieULs[j].innerHTML);
+ var ieMat = ieULs[j].firstChild;
+ ieMat.style.width=ieULs[j].offsetWidth+"px";
+ ieMat.style.height=ieULs[j].offsetHeight+"px";
+ ieULs[j].style.zIndex="1000000";
+ }
+ /** IE script to change class on mouseover **/
+ var ieLIs = document.getElementById(ieIDs[k]).getElementsByTagName('li');
+ for (var i=0; i<ieLIs.length; i++) if (ieLIs[i]) {
+ ieLIs[i].onmouseover=function() {this.className+=" ieHover";}
+ ieLIs[i].onmouseout=function() {this.className=this.className.replace(' ieHover', '');}
+ }
+ }
+}
+if (window.attachEvent) window.attachEvent('onload', ieHover);
diff --git a/js/overlib.js b/js/overlib.js
new file mode 100644
index 0000000..6afb273
--- /dev/null
+++ b/js/overlib.js
@@ -0,0 +1,337 @@
+//\/////
+//\ overLIB 4.06 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2004. All rights reserved.
+//\
+//\ Contributors are listed on the homepage.
+//\ This file might be old, always check for the latest version at:
+//\ http://www.bosrup.com/web/overlib/
+//\
+//\ Please read the license agreement (available through the link above)
+//\ before using overLIB. Direct any licensing questions to erik@bosrup.com.
+//\
+//\ Do not sell this as your own work or remove this copyright notice.
+//\ For full details on copying or changing this script please read the
+//\ license agreement at the link above. Please give credit on sites that
+//\ use overLIB and submit changes of the script so other people can use
+//\ them as well.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+var olLoaded=0;var pmStart=10000000; var pmUpper=10001000; var pmCount=pmStart+1; var pms=new Array(); var olInfo=new Info('4.06', 1);var FREPLACE=0; var FBEFORE=1; var FAFTER=2; var FALTERNATE=3;var olHideForm=0;registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');
+if (typeof ol_fgcolor=='undefined') var ol_fgcolor="#CCCCFF";if (typeof ol_bgcolor=='undefined') var ol_bgcolor="#333399";if (typeof ol_textcolor=='undefined') var ol_textcolor="#000000";if (typeof ol_capcolor=='undefined') var ol_capcolor="#FFFFFF";if (typeof ol_closecolor=='undefined') var ol_closecolor="#9999FF";if (typeof ol_textfont=='undefined') var ol_textfont="Verdana,Arial,Helvetica";if (typeof ol_captionfont=='undefined') var ol_captionfont="Verdana,Arial,Helvetica";if (typeof ol_closefont=='undefined') var ol_closefont="Verdana,Arial,Helvetica";if (typeof ol_textsize=='undefined') var ol_textsize="1";if (typeof ol_captionsize=='undefined') var ol_captionsize="1";if (typeof ol_closesize=='undefined') var ol_closesize="1";if (typeof ol_width=='undefined') var ol_width="200";if (typeof ol_border=='undefined') var ol_border="1";if (typeof ol_cellpad=='undefined') var ol_cellpad=2;if (typeof ol_offsetx=='undefined') var ol_offsetx=10;if (typeof ol_offsety=='undefined') var ol_offsety=10;if (typeof ol_text=='undefined') var ol_text="Default Text";if (typeof ol_cap=='undefined') var ol_cap="";if (typeof ol_sticky=='undefined') var ol_sticky=0;if (typeof ol_background=='undefined') var ol_background="";if (typeof ol_close=='undefined') var ol_close="Close";if (typeof ol_hpos=='undefined') var ol_hpos=RIGHT;if (typeof ol_status=='undefined') var ol_status="";if (typeof ol_autostatus=='undefined') var ol_autostatus=0;if (typeof ol_height=='undefined') var ol_height=-1;if (typeof ol_snapx=='undefined') var ol_snapx=0;if (typeof ol_snapy=='undefined') var ol_snapy=0;if (typeof ol_fixx=='undefined') var ol_fixx=-1;if (typeof ol_fixy=='undefined') var ol_fixy=-1;if (typeof ol_relx=='undefined') var ol_relx=null;if (typeof ol_rely=='undefined') var ol_rely=null;if (typeof ol_fgbackground=='undefined') var ol_fgbackground="";if (typeof ol_bgbackground=='undefined') var ol_bgbackground="";if (typeof ol_padxl=='undefined') var ol_padxl=1;if (typeof ol_padxr=='undefined') var ol_padxr=1;if (typeof ol_padyt=='undefined') var ol_padyt=1;if (typeof ol_padyb=='undefined') var ol_padyb=1;if (typeof ol_fullhtml=='undefined') var ol_fullhtml=0;if (typeof ol_vpos=='undefined') var ol_vpos=BELOW;if (typeof ol_aboveheight=='undefined') var ol_aboveheight=0;if (typeof ol_capicon=='undefined') var ol_capicon="";if (typeof ol_frame=='undefined') var ol_frame=self;if (typeof ol_timeout=='undefined') var ol_timeout=0;if (typeof ol_function=='undefined') var ol_function=null;if (typeof ol_delay=='undefined') var ol_delay=0;if (typeof ol_hauto=='undefined') var ol_hauto=0;if (typeof ol_vauto=='undefined') var ol_vauto=0;if (typeof ol_closeclick=='undefined') var ol_closeclick=0;if (typeof ol_wrap=='undefined') var ol_wrap=0;if (typeof ol_followmouse=='undefined') var ol_followmouse=1;if (typeof ol_mouseoff=='undefined') var ol_mouseoff=0;if (typeof ol_closetitle=='undefined') var ol_closetitle='Close';if (typeof ol_compatmode=='undefined') var ol_compatmode=0;if (typeof ol_css=='undefined') var ol_css=CSSOFF;if (typeof ol_fgclass=='undefined') var ol_fgclass="";if (typeof ol_bgclass=='undefined') var ol_bgclass="";if (typeof ol_textfontclass=='undefined') var ol_textfontclass="";if (typeof ol_captionfontclass=='undefined') var ol_captionfontclass="";if (typeof ol_closefontclass=='undefined') var ol_closefontclass="";
+if (typeof ol_texts=='undefined') var ol_texts=new Array("Text 0", "Text 1");if (typeof ol_caps=='undefined') var ol_caps=new Array("Caption 0", "Caption 1");
+var o3_text="";var o3_cap="";var o3_sticky=0;var o3_background="";var o3_close="Close";var o3_hpos=RIGHT;var o3_offsetx=2;var o3_offsety=2;var o3_fgcolor="";var o3_bgcolor="";var o3_textcolor="";var o3_capcolor="";var o3_closecolor="";var o3_width=100;var o3_border=1;var o3_cellpad=2;var o3_status="";var o3_autostatus=0;var o3_height=-1;var o3_snapx=0;var o3_snapy=0;var o3_fixx=-1;var o3_fixy=-1;var o3_relx=null;var o3_rely=null;var o3_fgbackground="";var o3_bgbackground="";var o3_padxl=0;var o3_padxr=0;var o3_padyt=0;var o3_padyb=0;var o3_fullhtml=0;var o3_vpos=BELOW;var o3_aboveheight=0;var o3_capicon="";var o3_textfont="Verdana,Arial,Helvetica";var o3_captionfont="Verdana,Arial,Helvetica";var o3_closefont="Verdana,Arial,Helvetica";var o3_textsize="1";var o3_captionsize="1";var o3_closesize="1";var o3_frame=self;var o3_timeout=0;var o3_timerid=0;var o3_allowmove=0;var o3_function=null;var o3_delay=0;var o3_delayid=0;var o3_hauto=0;var o3_vauto=0;var o3_closeclick=0;var o3_wrap=0;var o3_followmouse=1;var o3_mouseoff=0;var o3_closetitle='';var o3_compatmode=0;var o3_css=CSSOFF;var o3_fgclass="";var o3_bgclass="";var o3_textfontclass="";var o3_captionfontclass="";var o3_closefontclass="";
+var o3_x=0;var o3_y=0;var o3_showingsticky=0;var o3_removecounter=0;
+var over=null;var fnRef, hoveringSwitch=false;
+var isMac=(navigator.userAgent.indexOf("Mac")!=-1);var olOp=(navigator.userAgent.toLowerCase().indexOf('opera')>-1&&document.createTextNode);var olNs4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4);var olNs6=(document.getElementById)?true:false;var olIe4=(document.all)?true:false;var olIe5=false;var olIe55=false;var docRoot='document.body';
+if (olNs4) {var oW=window.innerWidth;var oH=window.innerHeight;window.onresize=function() { if (oW!=window.innerWidth||oH!=window.innerHeight) location.reload(); }
+}
+if (olIe4) {var agent=navigator.userAgent;if (/MSIE/.test(agent)) {var versNum=parseFloat(agent.match(/MSIE (\d\.\d+)\.*/)[1]);if (versNum>=5){olIe5=true;olIe55=(versNum>=5.5&&!olOp)?true:false;if (olNs6) olNs6=false;}
+}
+if (olNs6) olIe4=false;}
+if (document.compatMode&&document.compatMode=='CSS1Compat') {docRoot=((olIe4&&!olOp)?'document.documentElement':docRoot);}
+if(window.addEventListener) window.addEventListener("load",OLonLoad_handler,false);else if (window.attachEvent) window.attachEvent("onload",OLonLoad_handler);
+var olCheckMouseCapture=true;if ((olNs4||olNs6||olIe4)) {olMouseCapture();} else {overlib=no_overlib;nd=no_overlib;ver3fix=true;}
+function overlib() {if (!olLoaded||isExclusive(overlib.arguments)) return true;if (olCheckMouseCapture) olMouseCapture();if (over) cClick();
+o3_text=ol_text;o3_cap=ol_cap;o3_sticky=ol_sticky;o3_background=ol_background;o3_close=ol_close;o3_hpos=ol_hpos;o3_offsetx=ol_offsetx;o3_offsety=ol_offsety;o3_fgcolor=ol_fgcolor;o3_bgcolor=ol_bgcolor;o3_textcolor=ol_textcolor;o3_capcolor=ol_capcolor;o3_closecolor=ol_closecolor;o3_width=ol_width;o3_border=ol_border;o3_cellpad=ol_cellpad;o3_status=ol_status;o3_autostatus=ol_autostatus;o3_height=ol_height;o3_snapx=ol_snapx;o3_snapy=ol_snapy;o3_fixx=ol_fixx;o3_fixy=ol_fixy;o3_relx=ol_relx;o3_rely=ol_rely;o3_fgbackground=ol_fgbackground;o3_bgbackground=ol_bgbackground;o3_padxl=ol_padxl;o3_padxr=ol_padxr;o3_padyt=ol_padyt;o3_padyb=ol_padyb;o3_fullhtml=ol_fullhtml;o3_vpos=ol_vpos;o3_aboveheight=ol_aboveheight;o3_capicon=ol_capicon;o3_textfont=ol_textfont;o3_captionfont=ol_captionfont;o3_closefont=ol_closefont;o3_textsize=ol_textsize;o3_captionsize=ol_captionsize;o3_closesize=ol_closesize;o3_timeout=ol_timeout;o3_function=ol_function;o3_delay=ol_delay;o3_hauto=ol_hauto;o3_vauto=ol_vauto;o3_closeclick=ol_closeclick;o3_wrap=ol_wrap;o3_followmouse=ol_followmouse;o3_mouseoff=ol_mouseoff;o3_closetitle=ol_closetitle;o3_css=ol_css;o3_compatmode=ol_compatmode;o3_fgclass=ol_fgclass;o3_bgclass=ol_bgclass;o3_textfontclass=ol_textfontclass;o3_captionfontclass=ol_captionfontclass;o3_closefontclass=ol_closefontclass;
+setRunTimeVariables();
+fnRef='';
+o3_frame=ol_frame;
+if (olNs4) {over=o3_frame.document.layers['overDiv'];} else if (document.all) {over=o3_frame.document.all['overDiv'];} else if (document.getElementById) {over=o3_frame.document.getElementById("overDiv");}
+parseTokens('o3_', overlib.arguments);if (!postParseChecks()) return false;
+if (o3_delay==0) {return runHook("olMain", FREPLACE);} else {o3_delayid=setTimeout("runHook('olMain', FREPLACE)", o3_delay);return false;}
+}
+function nd(time) {if (olLoaded&&!isExclusive()) {if (time&&!o3_delay) {if (o3_timerid>0) clearTimeout(o3_timerid);
+o3_timerid=setTimeout("cClick()",(o3_timeout=time));}
+if (o3_removecounter>=1) { o3_showingsticky=0 };
+if (o3_showingsticky==0) {o3_allowmove=0;if (over!=null&&o3_timerid==0) runHook("hideObject", FREPLACE, over);} else {o3_removecounter++;}
+}
+return true;}
+function cClick() {if (olLoaded) {runHook("hideObject", FREPLACE, over);o3_showingsticky=0;}
+return false;}
+function overlib_pagedefaults() {parseTokens('ol_', overlib_pagedefaults.arguments);}
+function olMain() {var layerhtml, styleType;runHook("olMain", FBEFORE);
+if (o3_background!=""||o3_fullhtml) {
+layerhtml=runHook('ol_content_background', FALTERNATE, o3_css, o3_text, o3_background, o3_fullhtml);} else {
+styleType=(pms[o3_css-1-pmStart]=="cssoff"||pms[o3_css-1-pmStart]=="cssclass");
+if (o3_fgbackground!="") o3_fgbackground="background=\""+o3_fgbackground+"\"";if (o3_bgbackground!="") o3_bgbackground=(styleType?"background=\""+o3_bgbackground+"\"":o3_bgbackground);
+if (o3_fgcolor!="") o3_fgcolor=(styleType?"bgcolor=\""+o3_fgcolor+"\"":o3_fgcolor);if (o3_bgcolor!="") o3_bgcolor=(styleType?"bgcolor=\""+o3_bgcolor+"\"":o3_bgcolor);
+if (o3_height>0) o3_height=(styleType?"height=\""+o3_height+"\"":o3_height);else o3_height="";
+if (o3_cap=="") {
+layerhtml=runHook('ol_content_simple', FALTERNATE, o3_css, o3_text);} else {
+if (o3_sticky) {
+layerhtml=runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, o3_close);} else {
+layerhtml=runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, "");}
+}
+}
+if (o3_sticky) {if (o3_timerid>0) {clearTimeout(o3_timerid);o3_timerid=0;}
+o3_showingsticky=1;o3_removecounter=0;}
+if (!runHook("createPopup", FREPLACE, layerhtml)) return false;
+if (o3_autostatus>0) {o3_status=o3_text;if (o3_autostatus>1) o3_status=o3_cap;}
+o3_allowmove=0;
+if (o3_timeout>0) {if (o3_timerid>0) clearTimeout(o3_timerid);o3_timerid=setTimeout("cClick()", o3_timeout);}
+runHook("disp", FREPLACE, o3_status);runHook("olMain", FAFTER);
+return (olOp&&event&&event.type=='mouseover'&&!o3_status)?'':(o3_status!='');}
+function ol_content_simple(text) {txt='<table width="'+o3_width+'" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass?'class="'+o3_bgclass+'"':o3_bgcolor+' '+o3_height)+'><tr><td><table width="100%" border="0" cellpadding="'+o3_cellpad+'" cellspacing="0" '+(o3_fgclass?'class="'+o3_fgclass+'"':o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass?' class="'+o3_textfontclass+'">':'>')+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
+set_background("");return txt;}
+function ol_content_caption(text,title,close) {var nameId;closing="";closeevent="onmouseover";if (o3_closeclick==1) closeevent=(o3_closetitle?"title='"+o3_closetitle+"'":"")+" onclick";if (o3_capicon!="") {nameId=' hspace=\"5\"'+' align=\"middle\" alt=\"\"';if (typeof o3_dragimg!='undefined'&&o3_dragimg) nameId=' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';o3_capicon='<img src=\"'+o3_capicon+'\"'+nameId+' />';}
+if (close!="")
+closing='<td '+(!o3_compatmode&&o3_closefontclass?'class="'+o3_closefontclass:'align="RIGHT')+'"><a href="javascript:return '+fnRef+'cClick();"'+((o3_compatmode&&o3_closefontclass)?' class="'+o3_closefontclass+'" ':' ')+closeevent+'="return '+fnRef+'cClick();">'+(o3_closefontclass?'':wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass?'':wrapStr(1,o3_closesize,'close'))+'</a></td>';txt='<table width="'+o3_width+'" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass?'class="'+o3_bgclass+'"':o3_bgcolor+' '+o3_bgbackground+' '+o3_height)+'><tr><td><table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td'+(o3_captionfontclass?' class="'+o3_captionfontclass+'">':'>')+(o3_captionfontclass?'':'<b>'+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass?'':wrapStr(1,o3_captionsize)+'</b>')+'</td>'+closing+'</tr></table><table width="100%" border="0" cellpadding="'+o3_cellpad+'" cellspacing="0" '+(o3_fgclass?'class="'+o3_fgclass+'"':o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass?' class="'+o3_textfontclass+'">' :'>')+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
+set_background("");return txt;}
+function ol_content_background(text,picture,hasfullhtml) {if (hasfullhtml) {txt=text;} else {txt='<table width="'+o3_width+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="TOP" width="'+(o3_width-o3_padxl-o3_padxr)+(o3_textfontclass?'" class="'+o3_textfontclass:'')+'">'+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';}
+set_background(picture);return txt;}
+function set_background(pic) {if (pic=="") {if (olNs4) {over.background.src=null;} else if (over.style) {over.style.backgroundImage="none";}
+} else {if (olNs4) {over.background.src=pic;} else if (over.style) {over.style.backgroundImage="url("+pic+")";}
+}
+}
+var olShowId=-1;
+function disp(statustext) {runHook("disp", FBEFORE);
+if (o3_allowmove==0) {runHook("placeLayer", FREPLACE);(olNs6&&olShowId<0)?olShowId=setTimeout("runHook('showObject', FREPLACE, over)", 1):runHook("showObject", FREPLACE, over);o3_allowmove=(o3_sticky||o3_followmouse==0)?0:1;}
+runHook("disp", FAFTER);
+if (statustext!="") self.status=statustext;}
+function createPopup(lyrContent){runHook("createPopup", FBEFORE);
+if (o3_wrap&&!(olNs4||olOp)) {if (olIe4) {over.style.pixelWidth=0;} else if (olNs6) {repositionTo(over, 0,-over.offsetHeight);}
+}
+layerWrite(lyrContent);
+if (o3_wrap) o3_width=(olNs4?over.clip.width:over.offsetWidth);
+runHook("createPopup", FAFTER, lyrContent);
+return true;}
+function placeLayer() {var placeX, placeY, widthFix=0;
+if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth')) {iwidth=eval('o3_frame.'+docRoot+'.clientWidth');} else if (typeof(o3_frame.innerWidth)=='number') {widthFix=Math.ceil(1.2*(o3_frame.outerWidth-o3_frame.innerWidth));iwidth=o3_frame.innerWidth;}
+winoffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollLeft'):o3_frame.pageXOffset;var parsedWidth=parseInt(o3_width);
+if (o3_fixx>-1||o3_relx!=null) {
+placeX=(o3_relx!=null?( o3_relx<0?winoffset+o3_relx+iwidth-parsedWidth-widthFix:winoffset+o3_relx):o3_fixx);} else {
+if (o3_hauto==1) {if ((o3_x-winoffset)>(iwidth/2)) {o3_hpos=LEFT;} else {o3_hpos=RIGHT;}
+}
+if (o3_hpos==CENTER) {placeX=o3_x+o3_offsetx-(parsedWidth/2);
+if (placeX<winoffset) placeX=winoffset;}
+if (o3_hpos==RIGHT) {placeX=o3_x+o3_offsetx;
+if ((placeX+parsedWidth)>(winoffset+iwidth-widthFix)) {placeX=iwidth+winoffset-parsedWidth-widthFix;if (placeX<0) placeX=0;}
+}
+if (o3_hpos==LEFT) {placeX=o3_x-o3_offsetx-parsedWidth;if (placeX<winoffset) placeX=winoffset;}
+if (o3_snapx>1) {var snapping=placeX % o3_snapx;
+if (o3_hpos==LEFT) {placeX=placeX-(o3_snapx+snapping);} else {
+placeX=placeX+(o3_snapx-snapping);}
+if (placeX<winoffset) placeX=winoffset;}
+}
+if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')) {iheight=eval('o3_frame.'+docRoot+'.clientHeight');} else if (typeof(o3_frame.innerHeight)=='number') {iheight=o3_frame.innerHeight;}
+scrolloffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollTop'):o3_frame.pageYOffset;var parsedHeight=(o3_aboveheight?parseInt(o3_aboveheight):(olNs4?over.clip.height:over.offsetHeight));
+if (o3_fixy>-1||o3_rely!=null) {
+placeY=(o3_rely!=null?(o3_rely<0?scrolloffset+o3_rely+iheight-parsedHeight:scrolloffset+o3_rely):o3_fixy);} else {
+if (o3_vauto==1) {if ((o3_y-scrolloffset)>(iheight/2)) {o3_vpos=ABOVE;} else {o3_vpos=BELOW;}
+}
+if (o3_vpos==ABOVE) {if (o3_aboveheight==0) o3_aboveheight=parsedHeight;
+placeY=o3_y-(o3_aboveheight+o3_offsety);if (placeY<scrolloffset) placeY=scrolloffset;} else {
+placeY=o3_y+o3_offsety;}
+if (o3_snapy>1) {var snapping=placeY % o3_snapy;
+if (o3_aboveheight>0&&o3_vpos==ABOVE) {placeY=placeY-(o3_snapy+snapping);} else {placeY=placeY+(o3_snapy-snapping);}
+if (placeY<scrolloffset) placeY=scrolloffset;}
+}
+repositionTo(over, placeX, placeY);}
+function olMouseMove(e) {var e=(e)?e:event;
+if (e.pageX) {o3_x=e.pageX;o3_y=e.pageY;} else if (e.clientX) {o3_x=eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft');o3_y=eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');}
+if (o3_allowmove==1) runHook("placeLayer", FREPLACE);
+if (hoveringSwitch&&!olNs4&&runHook("cursorOff", FREPLACE)) {cClick();hoveringSwitch=!hoveringSwitch;}
+}
+function no_overlib() { return ver3fix; }
+function olMouseCapture() {capExtent=document;var fN, mseHandler=olMouseMove;var re=/function[ ]+(\w+)\(/;
+if (document.onmousemove||(!olIe4&&window.onmousemove)) {if (window.onmousemove) capExtent=window;fN=capExtent.onmousemove.toString().match(re);
+if (fN||fN[1]=='anonymous'||fN[1]=='olMouseMove') {olCheckMouseCapture=false;return;}
+var str=fN[1]+'(e); '+'olMouseMove(e); ';mseHandler=new Function('e', str);}
+capExtent.onmousemove=mseHandler;if (olNs4) capExtent.captureEvents(Event.MOUSEMOVE);}
+function parseTokens(pf, ar) {
+var v, mode=-1, par=(pf!='ol_');var fnMark=(par&&!ar.length?1:0);
+for (i=0; i<ar.length; i++) {if (mode<0) {
+if (typeof ar[i]=='number'&&ar[i]>pmStart&&ar[i]<pmUpper) {fnMark=(par?1:0);i--;} else {switch(pf) {case 'ol_':
+ol_text=ar[i].toString();break;default:
+o3_text=ar[i].toString();}
+}
+mode=0;} else {
+if (ar[i]>=pmCount||ar[i]==DONOTHING) { continue; }
+if (ar[i]==INARRAY) { fnMark=0; eval(pf+'text=ol_texts['+ar[++i]+'].toString()'); continue; }
+if (ar[i]==CAPARRAY) { eval(pf+'cap=ol_caps['+ar[++i]+'].toString()'); continue; }
+if (ar[i]==STICKY) { if (pf!='ol_') eval(pf+'sticky=1'); continue; }
+if (ar[i]==BACKGROUND) { eval(pf+'background="'+ar[++i]+'"'); continue; }
+if (ar[i]==NOCLOSE) { if (pf!='ol_') opt_NOCLOSE(); continue; }
+if (ar[i]==CAPTION) { eval(pf+"cap='"+escSglQuote(ar[++i])+"'"); continue; }
+if (ar[i]==CENTER||ar[i]==LEFT||ar[i]==RIGHT) { eval(pf+'hpos='+ar[i]); continue; }
+if (ar[i]==OFFSETX) { eval(pf+'offsetx='+ar[++i]); continue; }
+if (ar[i]==OFFSETY) { eval(pf+'offsety='+ar[++i]); continue; }
+if (ar[i]==FGCOLOR) { eval(pf+'fgcolor="'+ar[++i]+'"'); continue; }
+if (ar[i]==BGCOLOR) { eval(pf+'bgcolor="'+ar[++i]+'"'); continue; }
+if (ar[i]==TEXTCOLOR) { eval(pf+'textcolor="'+ar[++i]+'"'); continue; }
+if (ar[i]==CAPCOLOR) { eval(pf+'capcolor="'+ar[++i]+'"'); continue; }
+if (ar[i]==CLOSECOLOR) { eval(pf+'closecolor="'+ar[++i]+'"'); continue; }
+if (ar[i]==WIDTH) { eval(pf+'width='+ar[++i]); continue; }
+if (ar[i]==BORDER) { eval(pf+'border='+ar[++i]); continue; }
+if (ar[i]==CELLPAD) { i=opt_MULTIPLEARGS(++i,ar,(pf+'cellpad')); continue; }
+if (ar[i]==STATUS) { eval(pf+"status='"+escSglQuote(ar[++i])+"'"); continue; }
+if (ar[i]==AUTOSTATUS) { eval(pf+'autostatus=('+pf+'autostatus==1)?0:1'); continue; }
+if (ar[i]==AUTOSTATUSCAP) { eval(pf+'autostatus=('+pf+'autostatus==2)?0:2'); continue; }
+if (ar[i]==HEIGHT) { eval(pf+'height='+pf+'aboveheight='+ar[++i]); continue; }
+if (ar[i]==CLOSETEXT) { eval(pf+"close='"+escSglQuote(ar[++i])+"'"); continue; }
+if (ar[i]==SNAPX) { eval(pf+'snapx='+ar[++i]); continue; }
+if (ar[i]==SNAPY) { eval(pf+'snapy='+ar[++i]); continue; }
+if (ar[i]==FIXX) { eval(pf+'fixx='+ar[++i]); continue; }
+if (ar[i]==FIXY) { eval(pf+'fixy='+ar[++i]); continue; }
+if (ar[i]==RELX) { eval(pf+'relx='+ar[++i]); continue; }
+if (ar[i]==RELY) { eval(pf+'rely='+ar[++i]); continue; }
+if (ar[i]==FGBACKGROUND) { eval(pf+'fgbackground="'+ar[++i]+'"'); continue; }
+if (ar[i]==BGBACKGROUND) { eval(pf+'bgbackground="'+ar[++i]+'"'); continue; }
+if (ar[i]==PADX) { eval(pf+'padxl='+ar[++i]); eval(pf+'padxr='+ar[++i]); continue; }
+if (ar[i]==PADY) { eval(pf+'padyt='+ar[++i]); eval(pf+'padyb='+ar[++i]); continue; }
+if (ar[i]==FULLHTML) { if (pf!='ol_') eval(pf+'fullhtml=1'); continue; }
+if (ar[i]==BELOW||ar[i]==ABOVE) { eval(pf+'vpos='+ar[i]); continue; }
+if (ar[i]==CAPICON) { eval(pf+'capicon="'+ar[++i]+'"'); continue; }
+if (ar[i]==TEXTFONT) { eval(pf+"textfont='"+escSglQuote(ar[++i])+"'"); continue; }
+if (ar[i]==CAPTIONFONT) { eval(pf+"captionfont='"+escSglQuote(ar[++i])+"'"); continue; }
+if (ar[i]==CLOSEFONT) { eval(pf+"closefont='"+escSglQuote(ar[++i])+"'"); continue; }
+if (ar[i]==TEXTSIZE) { eval(pf+'textsize="'+ar[++i]+'"'); continue; }
+if (ar[i]==CAPTIONSIZE) { eval(pf+'captionsize="'+ar[++i]+'"'); continue; }
+if (ar[i]==CLOSESIZE) { eval(pf+'closesize="'+ar[++i]+'"'); continue; }
+if (ar[i]==TIMEOUT) { eval(pf+'timeout='+ar[++i]); continue; }
+if (ar[i]==FUNCTION) { if (pf=='ol_') { if (typeof ar[i+1]!='number') { v=ar[++i]; ol_function=(typeof v=='function'?v:null); }} else {fnMark=0; v=null; if (typeof ar[i+1]!='number') v=ar[++i]; opt_FUNCTION(v); } continue; }
+if (ar[i]==DELAY) { eval(pf+'delay='+ar[++i]); continue; }
+if (ar[i]==HAUTO) { eval(pf+'hauto=('+pf+'hauto==0)?1:0'); continue; }
+if (ar[i]==VAUTO) { eval(pf+'vauto=('+pf+'vauto==0)?1:0'); continue; }
+if (ar[i]==CLOSECLICK) { eval(pf+'closeclick=('+pf+'closeclick==0)?1:0'); continue; }
+if (ar[i]==WRAP) { eval(pf+'wrap=('+pf+'wrap==0)?1:0'); continue; }
+if (ar[i]==FOLLOWMOUSE) { eval(pf+'followmouse=('+pf+'followmouse==1)?0:1'); continue; }
+if (ar[i]==MOUSEOFF) { eval(pf+'mouseoff=('+pf+'mouseoff==0)?1:0'); continue; }
+if (ar[i]==CLOSETITLE) { eval(pf+"closetitle='"+escSglQuote(ar[++i])+"'"); continue; }
+if (ar[i]==CSSOFF||ar[i]==CSSCLASS) { eval(pf+'css='+ar[i]); continue; }
+if (ar[i]==COMPATMODE) { eval(pf+'compatmode=('+pf+'compatmode==0)?1:0'); continue; }
+if (ar[i]==FGCLASS) { eval(pf+'fgclass="'+ar[++i]+'"'); continue; }
+if (ar[i]==BGCLASS) { eval(pf+'bgclass="'+ar[++i]+'"'); continue; }
+if (ar[i]==TEXTFONTCLASS) { eval(pf+'textfontclass="'+ar[++i]+'"'); continue; }
+if (ar[i]==CAPTIONFONTCLASS) { eval(pf+'captionfontclass="'+ar[++i]+'"'); continue; }
+if (ar[i]==CLOSEFONTCLASS) { eval(pf+'closefontclass="'+ar[++i]+'"'); continue; }
+i=parseCmdLine(pf, i, ar);}
+}
+if (fnMark&&o3_function) o3_text=o3_function();
+if ((pf=='o3_')&&o3_wrap) {o3_width=0;
+if (olOp||(olIe4&&isMac)) {var tReg=/<.*\n*>/ig;if (!tReg.test(o3_text)) o3_text=o3_text.replace(/[ ]+/g, '&nbsp;');if (!tReg.test(o3_cap))o3_cap=o3_cap.replace(/[ ]+/g, '&nbsp;');}
+}
+if ((pf=='o3_')&&o3_sticky) {if (!o3_close&&(o3_frame!=ol_frame)) o3_close=ol_close;if (o3_mouseoff&&(o3_frame==ol_frame)) opt_NOCLOSE(' ');}
+}
+function layerWrite(txt) {txt+="\n";if (olNs4) {var lyr=o3_frame.document.overDiv.document
+lyr.write(txt)
+lyr.close()
+} else if (typeof over.innerHTML!='undefined') {if (olIe5&&isMac) over.innerHTML='';over.innerHTML=txt;} else {range=o3_frame.document.createRange();range.setStartAfter(over);domfrag=range.createContextualFragment(txt);
+while (over.hasChildNodes()) {over.removeChild(over.lastChild);}
+over.appendChild(domfrag);}
+}
+function showObject(obj) {runHook("showObject", FBEFORE);
+var theObj=(olNs4?obj:obj.style);theObj.visibility='visible';
+runHook("showObject", FAFTER);}
+function hideObject(obj) {runHook("hideObject", FBEFORE);
+var theObj=(olNs4?obj:obj.style);if (olNs6&&olShowId>0) { clearTimeout(olShowId); olShowId=0; }
+theObj.visibility='hidden';
+if (o3_timerid>0) clearTimeout(o3_timerid);if (o3_delayid>0) clearTimeout(o3_delayid);
+o3_timerid=0;o3_delayid=0;self.status="";
+if (over.onmouseout||over.onmouseover) {if (olNs4) over.releaseEvents(Event.MOUSEOUT||Event.MOUSEOVER);over.onmouseout=over.onmouseover=null;}
+runHook("hideObject", FAFTER);}
+function repositionTo(obj, xL, yL) {var theObj=(olNs4?obj:obj.style);theObj.left=xL+(!olNs4?'px':0);theObj.top=yL+(!olNs4?'px':0);}
+function cursorOff() {var left=parseInt(over.style.left);var top=parseInt(over.style.top);var right=left+(over.offsetWidth>=parseInt(o3_width)?over.offsetWidth:parseInt(o3_width));var bottom=top+(over.offsetHeight>=o3_aboveheight?over.offsetHeight:o3_aboveheight);
+if (o3_x<left||o3_x>right||o3_y<top||o3_y>bottom) return true;
+return false;}
+function opt_FUNCTION(callme) {o3_text=(callme?(typeof callme=='string'?(/.+\(.*\)/.test(callme)?eval(callme):callme):callme()):(o3_function?o3_function():'No Function'));
+return 0;}
+function opt_NOCLOSE(unused) {if (!unused) o3_close="";
+if (olNs4) {over.captureEvents(Event.MOUSEOUT||Event.MOUSEOVER);over.onmouseover=function () { if (o3_timerid>0) { clearTimeout(o3_timerid); o3_timerid=0; } }
+over.onmouseout=cClick;} else {over.onmouseover=function () {hoveringSwitch=true; if (o3_timerid>0) { clearTimeout(o3_timerid); o3_timerid=0; } }
+}
+return 0;}
+function opt_MULTIPLEARGS(i, args, parameter) {var k=i, l, re, pV, str='';
+for(k=i; k<args.length; k++) {str+=args[k]+',';if(typeof args[k]=='number'&&args[k]>pmStart) break;}
+if(k>=args.length) l=str.length-1;else {re=eval('/,'+args[k]+'/');l=str.search(re);}
+k--;str=str.substring(0, l);pV=(olNs4&&/cellpad/i.test(parameter))?str.split(',')[0]:str;eval(parameter+'="'+pV+'"');
+return k;}
+function nbspCleanup() {if (o3_wrap&&(olOp||(olIe4&&isMac))) {o3_text=o3_text.replace(/\&nbsp;/g, ' ');o3_cap=o3_cap.replace(/\&nbsp;/g, ' ');}
+}
+function escSglQuote(str) {return str.toString().replace(/'/g,"\\'");}
+function OLonLoad_handler(e) {var re=/\w+\(.*\)[;\s]+/g, olre=/overlib\(|nd\(|cClick\(/, fn, l, i;
+if(!olLoaded) olLoaded=1;
+if(window.removeEventListener&&e.eventPhase==3) window.removeEventListener("load",OLonLoad_handler,false);else if(window.detachEvent) {window.detachEvent("onload",OLonLoad_handler);var fN=document.body.getAttribute('onload');if (fN) {fN=fN.toString().match(re);if (fN&&fN.length) {for (i=0; i<fN.length; i++) {if (/anonymous/.test(fN[i])) continue;while((l=fN[i].search(/\)[;\s]+/))!=-1) {fn=fN[i].substring(0,l+1);fN[i]=fN[i].substring(l+2);if (olre.test(fn)) eval(fn);}
+}
+}
+}
+}
+}
+function wrapStr(endWrap,fontSizeStr,whichString) {var fontStr, fontColor, isClose=((whichString=='close')?1:0), hasDims=/[%\-a-z]+$/.test(fontSizeStr);fontSizeStr=(olNs4)?(!hasDims?fontSizeStr:'1'):fontSizeStr;if (endWrap) return (hasDims&&!olNs4)?(isClose?'</span>':'</div>'):'</font>';else {fontStr='o3_'+whichString+'font';fontColor='o3_'+((whichString=='caption')? 'cap':whichString)+'color';return (hasDims&&!olNs4)?(isClose?'<span style="font-family: '+quoteMultiNameFonts(eval(fontStr))+'; color: '+eval(fontColor)+'; font-size: '+fontSizeStr+';">':'<div style="font-family: '+quoteMultiNameFonts(eval(fontStr))+'; color: '+eval(fontColor)+'; font-size: '+fontSizeStr+';">'):'<font face="'+eval(fontStr)+'" color="'+eval(fontColor)+'" size="'+(parseInt(fontSizeStr)>7?'7':fontSizeStr)+'">';}
+}
+function quoteMultiNameFonts(theFont) {var v, pM=theFont.split(',');for (var i=0; i<pM.length; i++) {v=pM[i];v=v.replace(/^\s+/,'').replace(/\s+$/,'');if(/\s/.test(v)&&!/['"]/.test(v)) {v="\'"+v+"\'";pM[i]=v;}
+}
+return pM.join();}
+function isExclusive(args) {return false;}
+function setRunTimeVariables(){if (typeof runTime!='undefined'&&runTime.length) {for (var k=0; k<runTime.length; k++) {runTime[k]();}
+}
+}
+function parseCmdLine(pf, i, args) {if (typeof cmdLine!='undefined'&&cmdLine.length) {for (var k=0; k<cmdLine.length; k++) {var j=cmdLine[k](pf, i, args);if (j >-1) {i=j;break;}
+}
+}
+return i;}
+function postParseChecks(){if (typeof postParse!='undefined'&&postParse.length) {for (var k=0; k<postParse.length; k++) {if (postParse[k]()) continue;return false;}
+}
+return true;}
+function registerCommands(cmdStr) {if (typeof cmdStr!='string') return;
+var pM=cmdStr.split(',');pms=pms.concat(pM);
+for (var i=0; i< pM.length; i++) {eval(pM[i].toUpperCase()+'='+pmCount++);}
+}
+function registerHook(fnHookTo, fnRef, hookType, optPm) {var hookPt, last=typeof optPm;
+if (fnHookTo=='plgIn'||fnHookTo=='postParse') return;if (typeof hookPts=='undefined') hookPts=new Array();if (typeof hookPts[fnHookTo]=='undefined') hookPts[fnHookTo]=new FunctionReference();
+hookPt=hookPts[fnHookTo];
+if (hookType!=null) {if (hookType==FREPLACE) {hookPt.ovload=fnRef;if (fnHookTo.indexOf('ol_content_')>-1) hookPt.alt[pms[CSSOFF-1-pmStart]]=fnRef;
+} else if (hookType==FBEFORE||hookType==FAFTER) {var hookPt=(hookType==1?hookPt.before:hookPt.after);
+if (typeof fnRef=='object') {hookPt=hookPt.concat(fnRef);} else {hookPt[hookPt.length++]=fnRef;}
+if (optPm) hookPt=reOrder(hookPt, fnRef, optPm);
+} else if (hookType==FALTERNATE) {if (last=='number') hookPt.alt[pms[optPm-1-pmStart]]=fnRef;}
+return;}
+}
+function registerRunTimeFunction(fn) {if (isFunction(fn)) {if (typeof runTime=='undefined') runTime=new Array();if (typeof fn=='object') {runTime=runTime.concat(fn);} else {runTime[runTime.length++]=fn;}
+}
+}
+function registerCmdLineFunction(fn){if (isFunction(fn)) {if (typeof cmdLine=='undefined') cmdLine=new Array();if (typeof fn=='object') {cmdLine=cmdLine.concat(fn);} else {cmdLine[cmdLine.length++]=fn;}
+}
+}
+function registerPostParseFunction(fn){if (isFunction(fn)) {if (typeof postParse=='undefined') postParse=new Array();if (typeof fn=='object') {postParse=postParse.concat(fn);} else {postParse[postParse.length++]=fn;}
+}
+}
+function runHook(fnHookTo, hookType) {var l=hookPts[fnHookTo], optPm, arS, ar=runHook.arguments;
+if (hookType==FREPLACE) {arS=argToString(ar, 2);
+if (typeof l=='undefined'||!(l=l.ovload)) return eval(fnHookTo+'('+arS+')');else return eval('l('+arS+')');
+} else if (hookType==FBEFORE||hookType==FAFTER) {if (typeof l=='undefined') return;l=(hookType==1?l.before:l.after);
+if (!l.length) return;
+arS=argToString(ar, 2);for (var k=0; k<l.length; k++) eval('l[k]('+arS+')');
+} else if (hookType==FALTERNATE) {optPm=ar[2];arS=argToString(ar, 3);
+if (typeof l=='undefined'||(l=l.alt[pms[optPm-1-pmStart]])=='undefined') {return eval(fnHookTo+'('+arS+')');} else {return eval('l('+arS+')');}
+}
+}
+function isFunction(fnRef) {var rtn=true;
+if (typeof fnRef=='object') {for (var i=0; i<fnRef.length; i++) {if (typeof fnRef[i]=='function') continue;rtn=false;break;}
+} else if (typeof fnRef!='function') {rtn=false;}
+return rtn;}
+function argToString(array, strtInd, argName) {var jS=strtInd, aS='', ar=array;argName=(argName?argName:'ar');
+if (ar.length>jS) {for (var k=jS; k<ar.length; k++) aS+=argName+'['+k+'], ';aS=aS.substring(0, aS.length-2);}
+return aS;}
+function reOrder(hookPt, fnRef, order) {if (!order||typeof order=='undefined'||typeof order=='number') return;
+var newPt=new Array(), match;
+if (typeof order=='function') {if (typeof fnRef=='object') {newPt=newPt.concat(fnRef);} else {newPt[newPt.length++]=fnRef;}
+for (var i=0; i<hookPt.length; i++) {match=false;if (typeof fnRef=='function'&&hookPt[i]==fnRef) {continue;} else {for(var j=0; j<fnRef.length; j++) if (hookPt[i]==fnRef[j]) {match=true;break;}
+}
+if (!match) newPt[newPt.length++]=hookPt[i];}
+newPt[newPt.length++]=order;
+} else if (typeof order=='object') {if (typeof fnRef=='object') {newPt=newPt.concat(fnRef);} else {newPt[newPt.length++]=fnRef;}
+for (var j=0; j<hookPt.length; j++) {match=false;if (typeof fnRef=='function'&&hookPt[j]==fnRef) {continue;} else {for (var i=0; i<fnRef.length; i++) if (hookPt[j]==fnRef[i]) {match=true;break;}
+}
+if (!match) newPt[newPt.length++]=hookPt[j];}
+for (i=0; i<newPt.length; i++) hookPt[i]=newPt[i];newPt.length=0;
+for (var j=0; j<hookPt.length; j++) {match=false;for (var i=0; i<order.length; i++) {if (hookPt[j]==order[i]) {match=true;break;}
+}
+if (!match) newPt[newPt.length++]=hookPt[j];}
+newPt=newPt.concat(order);}
+for(i=0; i<newPt.length; i++) hookPt[i]=newPt[i];
+return hookPt;}
+function FunctionReference() {this.ovload=null;this.before=new Array();this.after=new Array();this.alt=new Array();}
+function Info(version, prerelease) {this.version=version;this.prerelease=prerelease;
+this.simpleversion=Math.round(this.version*100);this.major=parseInt(this.simpleversion/100);this.minor=parseInt(this.simpleversion/10)-this.major * 10;this.revision=parseInt(this.simpleversion)-this.major * 100-this.minor * 10;}
+registerHook("ol_content_simple", ol_content_simple, FALTERNATE, CSSOFF);registerHook("ol_content_caption", ol_content_caption, FALTERNATE, CSSOFF);registerHook("ol_content_background", ol_content_background, FALTERNATE, CSSOFF);registerHook("ol_content_simple", ol_content_simple, FALTERNATE, CSSCLASS);registerHook("ol_content_caption", ol_content_caption, FALTERNATE, CSSCLASS);registerHook("ol_content_background", ol_content_background, FALTERNATE, CSSCLASS);registerHook("hideObject", nbspCleanup, FAFTER);if(olNs4) olLoaded=1;
diff --git a/js/pngfix.js b/js/pngfix.js
new file mode 100644
index 0000000..ecd0f95
--- /dev/null
+++ b/js/pngfix.js
@@ -0,0 +1,29 @@
+
+// Correctly handle PNG transparency in Win IE 5.5 or higher.
+// http://homepage.ntlworld.com/bobosola. Updated 02-March-2004
+
+function correctPNG()
+ {
+ for(var i=0; i<document.images.length; i++)
+ {
+ var img = document.images[i]
+ var imgName = img.src.toUpperCase()
+ if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
+ {
+ var imgID = (img.id) ? "id='" + img.id + "' " : ""
+ var imgClass = (img.className) ? "class='" + img.className + "' " : ""
+ var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
+ var imgStyle = "display:inline-block;" + img.style.cssText
+ if (img.align == "left") imgStyle = "float:left;" + imgStyle
+ if (img.align == "right") imgStyle = "float:right;" + imgStyle
+ if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
+ var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ + "(src=\'" + img.src + "\', sizingMethod='image');\"></span>"
+ img.outerHTML = strNewHTML
+ i = i-1
+ }
+ }
+ }
+window.attachEvent("onload", correctPNG); \ No newline at end of file
diff --git a/js/tabs/listener.js b/js/tabs/listener.js
new file mode 100644
index 0000000..5105285
--- /dev/null
+++ b/js/tabs/listener.js
@@ -0,0 +1,86 @@
+/* =================================================================================================
+ * Listener - by Aaron Boodman
+ * 5/23/2002; Queens, NY.
+ * http://www.youngpup.net/projects/dhtml/listener/
+ */
+function Listener(fp, scope, removing) {
+ this.fp = fp;
+ this.scope = scope;
+ this.removeing = removing;
+}
+
+Listener.add = function(oSource, sEvent, fpDest, oScope, bRunOnce) {
+ if (!oSource[sEvent] || oSource[sEvent] == null || !oSource[sEvent]._listeners) {
+ oSource[sEvent] = function() { Listener.fire(oSource, sEvent, arguments) };
+ oSource[sEvent]._listeners = new Array();
+ }
+
+ var idx = this.findForEvent(oSource[sEvent], fpDest, oScope);
+ if (idx == -1) idx = oSource[sEvent]._listeners.length;
+
+ oSource[sEvent]._listeners[idx] = new Listener(fpDest, oScope, bRunOnce);
+}
+
+Listener.remove = function(oSource, sEvent, fpDest, oScope) {
+ var idx = this.findForEvent(oSource[sEvent], fpDest, oScope);
+ if (idx != -1) {
+ var iLast = oSource[sEvent]._listeners.length - 1;
+ oSource[sEvent]._listeners[idx] = oSource[sEvent]._listeners[iLast];
+ oSource[sEvent]._listeners.length--;
+ }
+}
+
+Listener.findForEvent = function(fpEvent, fpDest, oScope) {
+ if (fpEvent._listeners) {
+ for (var i = 0; i < fpEvent._listeners.length; i++) {
+ if (fpEvent._listeners[i].scope == oScope && fpEvent._listeners[i].fp == fpDest) {
+ return i;
+ }
+ }
+ }
+ return -1;
+}
+
+Listener.fire = function(oSourceObj, sEvent, args) {
+
+ if(oSourceObj&&oSourceObj[sEvent]&&oSourceObj[sEvent]._listeners) { // TRS
+
+ var lstnr, fp;
+ var last = oSourceObj[sEvent]._listeners.length - 1;
+
+ // must loop in reverse, because we might be removing elements as we go.
+
+ for (var i = last; i >= 0; i--) {
+ lstnr = oSourceObj[sEvent]._listeners[i];
+ fp = lstnr.fp;
+
+ fp.apply(lstnr.scope, args);
+
+ if (lstnr.remove) Listener.remove(oSourceObj, sEvent, lstnr.fp, lstnr.scope);
+ }
+ }
+
+ return(-1)
+}
+
+// impliment function apply for browsers which don't support it natively
+if (!Function.prototype.apply) {
+ Function.prototype.apply = function(oScope, args) {
+ var sarg = [];
+ var rtrn, call;
+
+ if (!oScope) oScope = window;
+ if (!args) args = [];
+
+ for (var i = 0; i < args.length; i++) {
+ sarg[i] = "args["+i+"]";
+ }
+
+ call = "oScope.__applyTemp__(" + sarg.join(",") + ");";
+
+ oScope.__applyTemp__ = this;
+ rtrn = eval(call);
+ delete oScope.__applyTemp__;
+ return rtrn;
+ }
+} \ No newline at end of file
diff --git a/js/tabs/tabpane.js b/js/tabs/tabpane.js
new file mode 100644
index 0000000..59e4d78
--- /dev/null
+++ b/js/tabs/tabpane.js
@@ -0,0 +1,332 @@
+/*----------------------------------------------------------------------------\
+| Tab Pane 1.02 |
+|-----------------------------------------------------------------------------|
+| Created by Erik Arvidsson |
+| (http://webfx.eae.net/contact.html#erik) |
+| For WebFX (http://webfx.eae.net/) |
+|-----------------------------------------------------------------------------|
+| Copyright (c) 1998 - 2003 Erik Arvidsson |
+\----------------------------------------------------------------------------*/
+
+// This function is used to define if the browser supports the needed
+// features
+function hasSupport() {
+
+ if (typeof hasSupport.support != "undefined")
+ return hasSupport.support;
+
+ var ie55 = /msie 5\.[56789]/i.test( navigator.userAgent );
+
+ hasSupport.support = ( typeof document.implementation != "undefined" &&
+ document.implementation.hasFeature( "html", "1.0" ) || ie55 )
+
+ // IE55 has a serious DOM1 bug... Patch it!
+ if ( ie55 ) {
+ document._getElementsByTagName = document.getElementsByTagName;
+ document.getElementsByTagName = function ( sTagName ) {
+ if ( sTagName == "*" )
+ return document.all;
+ else
+ return document._getElementsByTagName( sTagName );
+ };
+ }
+
+ return hasSupport.support;
+}
+
+
+// The constructor for tab panes
+// el : HTMLElement The html element used to represent the tab pane
+// bUseCookie : Boolean Optional. Default is true. Used to determine whether to us
+// persistance using cookies or not
+
+function WebFXTabPane( el, bUseCookie ) {
+ if ( !hasSupport() || el == null ) return;
+
+ this.element = el;
+ this.element.tabPane = this;
+ this.pages = [];
+ this.selectedIndex = null;
+
+ // <--- quick hack to set persistence only on pages where referrer == location
+ var ref = document.referrer.split( "?" );
+
+ if( document.location != ref[0] ) {
+ WebFXTabPane.setCookie( "webfxtab_" + this.element.id, 0 );
+ }
+ // end quick hack - xing --->
+
+ this.useCookie = bUseCookie != null ? bUseCookie : true;
+
+ // add class name tag to class name
+ this.element.className = this.classNameTag + " " + this.element.className;
+
+ // add tab row
+ this.tabRow = document.createElement( "div" );
+ this.tabRow.className = "tabcontainer";
+ el.insertBefore( this.tabRow, el.firstChild );
+
+ var tabIndex = 0;
+ if ( this.useCookie ) {
+ tabIndex = Number( WebFXTabPane.getCookie( "webfxtab_" + this.element.id ) );
+ if ( isNaN( tabIndex ) )
+ tabIndex = 0;
+ }
+ this.selectedIndex = tabIndex;
+
+ // loop through child nodes and add them
+ var cs = el.childNodes;
+ var n;
+ for (var i = 0; i < cs.length; i++) {
+ if (cs[i].nodeType == 1 && cs[i].className == "tabpage") {
+ this.addTabPage( cs[i] );
+ }
+ }
+}
+
+WebFXTabPane.prototype.classNameTag = "tabsystem";
+
+WebFXTabPane.prototype.setSelectedIndex = function ( n ) {
+ if (this.selectedIndex != n) {
+ if (this.selectedIndex != null && this.pages[ this.selectedIndex ] != null )
+ this.pages[ this.selectedIndex ].hide();
+ this.selectedIndex = n;
+ this.pages[ this.selectedIndex ].show();
+
+ if ( this.useCookie )
+ WebFXTabPane.setCookie( "webfxtab_" + this.element.id, n ); // session cookie
+ }
+};
+
+WebFXTabPane.prototype.getSelectedIndex = function () {
+ return this.selectedIndex;
+};
+
+WebFXTabPane.prototype.addTabPage = function ( oElement ) {
+ if ( !hasSupport() ) return;
+
+ if ( oElement.tabPage == this ) // already added
+ return oElement.tabPage;
+
+ var n = this.pages.length;
+ var tp = this.pages[n] = new WebFXTabPage( oElement, this, n );
+ tp.tabPane = this;
+
+ // move the tab out of the box
+ this.tabRow.appendChild( tp.tab );
+
+ if ( n == this.selectedIndex )
+ tp.show();
+ else
+ tp.hide();
+
+ return tp;
+};
+
+WebFXTabPane.prototype.dispose = function () {
+ this.element.tabPane = null;
+ this.element = null;
+ this.tabRow = null;
+
+ for (var i = 0; i < this.pages.length; i++) {
+ this.pages[i].dispose();
+ this.pages[i] = null;
+ }
+ this.pages = null;
+};
+
+
+
+// Cookie handling
+WebFXTabPane.setCookie = function ( sName, sValue, nDays ) {
+ var expires = "";
+ if ( nDays ) {
+ var d = new Date();
+ d.setTime( d.getTime() + nDays * 24 * 60 * 60 * 1000 );
+ expires = "; expires=" + d.toGMTString();
+ }
+
+ document.cookie = sName + "=" + sValue + expires + "; path=/";
+};
+
+WebFXTabPane.getCookie = function (sName) {
+ var re = new RegExp( "(\;|^)[^;]*(" + sName + ")\=([^;]*)(;|$)" );
+ var res = re.exec( document.cookie );
+ return res != null ? res[3] : null;
+};
+
+WebFXTabPane.removeCookie = function ( name ) {
+ setCookie( name, "", -1 );
+};
+
+
+// The constructor for tab pages. This one should not be used.
+// Use WebFXTabPage.addTabPage instead
+// el : HTMLElement The html element used to represent the tab pane
+// tabPane : WebFXTabPane The parent tab pane
+// nindex : Number The index of the page in the parent pane page array
+
+function WebFXTabPage( el, tabPane, nIndex ) {
+ if ( !hasSupport() || el == null ) return;
+
+ this.element = el;
+ this.element.tabPage = this;
+ this.index = nIndex;
+
+ var cs = el.childNodes;
+ for (var i = 0; i < cs.length; i++) {
+ if (cs[i].nodeType == 1 && cs[i].className == "tab") {
+ this.tab = cs[i];
+ break;
+ }
+ }
+
+ // insert a tag around content to support keyboard navigation
+
+
+ var a = document.createElement( "A" );
+ this.aElement = a;
+ a.href = "#";
+ a.onclick = function () { return false; };
+ while ( this.tab.hasChildNodes() )
+ a.appendChild( this.tab.firstChild );
+ this.tab.appendChild( a );
+
+
+ // hook up events, using DOM0
+ var oThis = this;
+ this.tab.onclick = function () { oThis.select(); };
+ this.tab.onmouseover = function () { WebFXTabPage.tabOver( oThis ); };
+ this.tab.onmouseout = function () { WebFXTabPage.tabOut( oThis ); };
+}
+
+WebFXTabPage.prototype.show = function () {
+ var el = this.tab;
+ var s = el.className + " tab-active";
+ s = s.replace(/ +/g, " ");
+ el.className = s;
+
+ this.element.style.display = "block";
+};
+
+WebFXTabPage.prototype.hide = function () {
+ var el = this.tab;
+ var s = el.className;
+ s = s.replace(/ tab\-active/g, "");
+ el.className = s;
+
+ this.element.style.display = "none";
+};
+
+WebFXTabPage.prototype.select = function () {
+ this.tabPane.setSelectedIndex( this.index );
+};
+
+WebFXTabPage.prototype.dispose = function () {
+ this.aElement.onclick = null;
+ this.aElement = null;
+ this.element.tabPage = null;
+ this.tab.onclick = null;
+ this.tab.onmouseover = null;
+ this.tab.onmouseout = null;
+ this.tab = null;
+ this.tabPane = null;
+ this.element = null;
+};
+
+WebFXTabPage.tabOver = function ( tabpage ) {
+ var el = tabpage.tab;
+ var s = el.className + " tab-hover";
+ s = s.replace(/ +/g, " ");
+ el.className = s;
+};
+
+WebFXTabPage.tabOut = function ( tabpage ) {
+ var el = tabpage.tab;
+ var s = el.className;
+ s = s.replace(/ tab\-hover/g, "");
+ el.className = s;
+};
+
+
+// This function initializes all uninitialized tab panes and tab pages
+function setupAllTabs() {
+ if ( !hasSupport() ) return;
+
+ var all = document.getElementsByTagName( "*" );
+ var l = all.length;
+ var tabPaneRe = /tabpane/;
+ var tabPageRe = /tabpage/;
+ var cn, el;
+ var parentTabPane;
+
+ for ( var i = 0; i < l; i++ ) {
+ el = all[i]
+ cn = el.className;
+
+ // no className
+ if ( cn == "" ) continue;
+
+ // uninitiated tab pane
+ if ( tabPaneRe.test( cn ) && !el.tabPane )
+ new WebFXTabPane( el );
+
+ // unitiated tab page wit a valid tab pane parent
+ else if ( tabPageRe.test( cn ) && !el.tabPage &&
+ tabPaneRe.test( el.parentNode.className ) ) {
+ el.parentNode.tabPane.addTabPage( el );
+ }
+ }
+}
+
+function disposeAllTabs() {
+ if ( !hasSupport() ) return;
+
+ var all = document.getElementsByTagName( "*" );
+ var l = all.length;
+ var tabPaneRe = /tabpane/;
+ var cn, el;
+ var tabPanes = [];
+
+ for ( var i = 0; i < l; i++ ) {
+ el = all[i]
+ cn = el.className;
+
+ // no className
+ if ( cn == "" ) continue;
+
+ // tab pane
+ if ( tabPaneRe.test( cn ) && el.tabPane )
+ tabPanes[tabPanes.length] = el.tabPane;
+ }
+
+ for (var i = tabPanes.length - 1; i >= 0; i--) {
+ tabPanes[i].dispose();
+ tabPanes[i] = null;
+ }
+}
+
+
+// initialization hook up
+
+// DOM2
+if ( typeof window.addEventListener != "undefined" )
+ window.addEventListener( "load", setupAllTabs, false );
+
+// IE
+else if ( typeof window.attachEvent != "undefined" ) {
+ window.attachEvent( "onload", setupAllTabs );
+ window.attachEvent( "onunload", disposeAllTabs );
+}
+
+else {
+ if ( window.onload != null ) {
+ var oldOnload = window.onload;
+ window.onload = function ( e ) {
+ oldOnload( e );
+ setupAllTabs();
+ };
+ }
+ else
+ window.onload = setupAllTabs;
+}
diff --git a/js/tabs/tabs.css b/js/tabs/tabs.css
new file mode 100644
index 0000000..4ec3438
--- /dev/null
+++ b/js/tabs/tabs.css
@@ -0,0 +1 @@
+/* dummy css file to prevent rendering errors */ \ No newline at end of file
diff --git a/js/tabs/tabs.js b/js/tabs/tabs.js
new file mode 100644
index 0000000..c39fe36
--- /dev/null
+++ b/js/tabs/tabs.js
@@ -0,0 +1,404 @@
+//==================================================
+//=
+//= xhtml degrabable tabs origionally for tsh (thestandardhack.com)
+//= by tim scarfe, developer-x.com / tim@developer-x.com
+//= started - 14:00 22/12/2001 / updated - 2:39 PM 6/21/2002
+//= time spent - 30 hours
+//=
+//= The purpose of this script is the "emphasize" the heading structure of a document if the UA supports enough standards.
+//= Headings will be turned into tabs and nested according to underlying HTML structure.
+//=
+//= Many thanks to Aaron Boodman (www.youngpup.net), who presented this challenge to me last year.
+//= This was one of the early examples of DHTML being built as an optional layer of behaviour on top of structured HTML.
+//=
+//= Copyright:
+//=
+//= You may use this for anything on anything and change it as you will. Leave this and everything alove this intact.
+//= You may remove the updates info and bugs below if you want to save space. Please show me your implementations of this,
+//= as that is what interests me the most. It should be so easy to hook this up to an XML-RPC system and goodness knows what else!
+//==================================================
+//= Non-Global Code Starts
+//==================================================
+tabSystem.makeGlobalProps=function( e ) {
+ // These are the generic "Catch-All" properties for tabsystems. You may also create custom tab sets.
+ tabSystem.classTrigger="tabsystem";
+ tabSystem.tabPageClass="tabpage";
+ tabSystem.activeTabClass="tab-active";
+ tabSystem.hoverTabClass="tab-hover";
+ tabSystem.normalTabClass="tab";
+ tabSystem.startIndex=0;
+ tabSystem.removeHeadings=true;
+ tabSystem.styleSheetUri=tikiRootUrl+"themes/tabs/tabs.css";
+ tabSystem.tabContainerClass="tabcontainer";
+ tabSystem.tabSelectedKeyword="tdefault";
+ tabSystem.invertOrder=0;
+ tabSystem.firstHeadingClass="firstHeading";
+ tabSystem.firstHeadingKeepTrigger="keepheading";
+ // GLOBAL ONLY (Custom Event Listeners)
+ tabSystem.style_changeEvent="onstylechange";
+ tabSystem.buildEvent="onbuild";
+ tabSystem.unbuildEvent="onunbuild";
+ tabSystem.tab_mouseoverEvent="onmouseover";
+ tabSystem.tab_mouseoutEvent="onmouseout";
+ tabSystem.tab_clickEvent="onclick";
+ tabSystem.onloadEvent="onload";
+ tabSystem.Dependancies=( document
+ && document.getElementById
+ && document.getElementsByTagName
+ && document.createElement
+ && document.getElementsByClassName // this is an extension component
+ && window )?1:0;
+ // global sig/slot event handling
+ tabSystem.addEventHandler=function _glo_tabSystem_addEventHandler_( evt, fn, obj, once ) { Listener.add( ((obj)?obj:tabSystem), evt, fn, this, once ) };
+ tabSystem.removeEventHandler=function _glo_tabSystem_removeEventHandler_( evt, fn, obj ) { Listener.remove( ((obj)?obj:tabSystem), evt, fn, this ) };
+ tabSystem.fireEventHandler=function _glo_tabSystem_fireEventHandler_( evt, obj, args ) { if( ((obj)?obj:this)[evt] )((obj)?obj:tabSystem)[evt](args) };
+}
+tabSystem.takeOutOfMemory=function _tabSystem_takeOutOfMemory_( e ) {
+ for(var x=0;x<tabSystem.instances.length;x++) {
+ tabSystem.instances[x].takeOutOfMemory( );
+ }
+}
+tabSystem.construct=function tabSystem_construct_( e ) { // render generic "catch-all" tabsets
+ var ts=document.getElementsByClassName(
+ document, tabSystem.classTrigger
+ )
+
+ for(var x=0;x<ts[ tabSystem.classTrigger ].length;x++) {
+ var el=ts[ tabSystem.classTrigger ][ x ];
+ tabSystem.instances.push( new tabSystem( el, true ) );
+ }
+ tabSystem.fireEventHandler( tabSystem.onloadEvent );
+}
+tabSystem.genericStyleSheet=function tabSystem_genericStyleSheet_( e ) { // "catch-all" tabset style sheets
+ if(!tabSystem.styleSheet) {
+ var head=document.getElementsByTagName("head").item( 0 );
+ var s=document.createElement("link");
+ s.rel="stylesheet";
+ s.type="text/css";
+ s.media="screen";
+ head.appendChild( s );
+ tabSystem.styleSheet=s;
+ }
+ tabSystem.styleSheet.href=((e)?e:tabSystem.styleSheetUri);
+}
+tabSystem.getTabsetByDivision=function _tabSystem_getTabsetByDivision_( el ) {
+ for(var x=0;x<tabSystem.instances.length;x++) {
+ if(tabSystem.instances[x].el==el) return( tabSystem.instances[x] )
+ }
+}
+//==================================================
+//= Tab Object Constructor
+//==================================================
+tabSystem.tab=function _tabSystem_tab_( member ) {
+ this.ts=member;
+ this.index=null;
+ this.tabPage=null;
+ this.hClone=null;
+ this.event={};
+ this.heading=null;
+ // tab level sig/slot event handling
+ this.addEventHandler=function _tab_addEventHandler_( evt, fn, obj, once ) { Listener.add( ((obj)?obj:this), evt, fn, this, once ) };
+ this.removeEventHandler=function _tab_removeEventHandler_( evt, fn, obj ) { Listener.remove( ((obj)?obj:this), evt, fn, this ) };
+ this.fireEventHandler=function _tab_fireEventHandler_( evt, obj, args ) { if( ((obj)?obj:this)[evt] )((obj)?obj:this)[evt](args) };
+ this.notReady="Like the Grolsh, we only let you drink it... when it's ready. This tab is not (ready that is)."
+ this.readyStateCheck=function _tabSystem_tab_readyStateCheck_( e ) {
+ return (this.hClone&&this.tabPage&&this.ts) ?1:0;
+ }
+ this.addTabPage=function _tabSystem_tab_addTabPage_( e ) { this.tabPage=e; }
+ this.createListItem=function _tabSystem_tab_createListItem_( e ) {
+ if(this.hClone) {
+ this.li=document.createElement("li");
+ this.li.appendChild( this.hClone );
+ } //else throw new Error(this.notReady);
+ }
+
+ this.addHeading=function _tabSystem_tab_addHeading_( dom_node ) {
+ this.hClone=dom_node;
+ if(this.hClone.style.display=="none") this.hClone.style.display="block";
+ }
+ this.styletab=function _tabSystem_tab_styletab_( e ) {
+ if( this.readyStateCheck( ) ) {
+ this.hClone.style.cursor=document.all?"hand":"pointer";
+ this.hClone.className=this.ts.normalTabClass+" "+this.ts.backupClassName||this.ts.className;
+ } //else throw new Error( this.notReady );
+ }
+ this.removeEvents=function _tabSystem_tab_removeEvents_( tab ) {
+ if( this.readyStateCheck( ) ) {
+ this.removeEventHandler( "onmouseout", this.event._mou_, this.hClone );
+ this.removeEventHandler( "onclick", this.event._click_, this.hClone );
+ this.removeEventHandler( "onmouseover", this.event._mov_, this.hClone );
+
+ } //else throw new Error(this.notReady);
+ }
+ this.addEvents=function _tabSystem_addevents_( tab ) {
+ if( this.readyStateCheck( ) ) {
+ this.backupClassName=this.hClone.className;
+ var index=this.index, obj=this.ts;
+ this.event._mov_=function ( e ) {
+ obj.tabs[ index ].hClone.className+=" "+obj.hoverTabClass;
+ obj.fireEventHandler( tabSystem.tab_mouseoverEvent, obj.tabs[ index ] );
+ }
+ this.event._mou_=function ( e ) {
+ obj.tabs[ index ].hClone.className=obj.tabs[ index ].backupClassName;
+ obj.fireEventHandler( tabSystem.tab_mouseoutEvent, obj.tabs[ index ] );
+ }
+ this.event._click_=function( e ) {
+ obj.switchtab( index );
+ obj.fireEventHandler( tabSystem.tab_clickEvent, obj.tabs[ index ] );
+ }
+ this.addEventHandler( "onmouseout", this.event._mou_, this.hClone );
+ this.addEventHandler( "onclick", this.event._click_, this.hClone);
+ this.addEventHandler( "onmouseover", this.event._mov_, this.hClone );
+ }
+ //else throw new Error(this.notReady);
+ }
+ this.remove=function _tabSystem_removePage_( ) {
+ if( this.readyStateCheck( ) ) {
+ this.tabPage.parentNode.removeChild( this.tabPage );
+ this.ts.rebuild( );
+ }// else throw new Error(this.notReady);
+ }
+}
+//==================================================
+//= TabSystem Object Constructor
+//==================================================
+function tabSystem( el, genericCapture ) {
+ if(!genericCapture)tabSystem.instances.push(this);
+ this.classTrigger=tabSystem.classTrigger;
+ this.tabPageClass=tabSystem.tabPageClass;
+ this.activeTabClass=tabSystem.activeTabClass;
+ this.tabContainerClass=tabSystem.tabContainerClass;
+ this.hoverTabClass=tabSystem.hoverTabClass;
+ this.normalTabClass=tabSystem.normalTabClass;
+ this.startIndex=tabSystem.startIndex;
+ this.genericCapture=genericCapture;
+ this.removeHeadings=tabSystem.removeHeadings;
+ this.styleSheetUri=tabSystem.styleSheetUri;
+ this.tabSelectedKeyword=tabSystem.tabSelectedKeyword;
+ this.invertOrder=tabSystem.invertOrder;
+ this.firstHeadingClass=tabSystem.firstHeadingClass;
+ this.firstHeadingKeepTrigger=tabSystem.firstHeadingKeepTrigger;
+ this.el=el;
+ this.tabs=[];
+ this.id=this.el.getAttribute("id");
+ this.getTabIndexByTab=function _tabSystem_getTabIndexByTab_( e ) {
+ for(var x=0;x<this.tabs.length;x++)if (this.tabs[x]==e) return(x)
+ }
+ // instance sig/slot event handling
+ this.addEventHandler=function _tabSystem_addEventHandler_( evt, fn, obj, once ) { Listener.add( ((obj)?obj:this), evt, fn, this, once ) };
+ this.removeEventHandler=function _tabSystem_removeEventHandler_( evt, fn, obj ) { Listener.remove( ((obj)?obj:this), evt, fn, this ) };
+ this.fireEventHandler=function _tabSystem_fireEventHandler_( evt, obj, args ) { if( ((obj)?obj:this)[evt] )((obj)?obj:this)[evt](args) };
+ this.rebuild=function _tabSystem_rebuild_( e ) {
+ // this basically just collapses and re-constructs the tab system
+ // doing this would obviously pick up on any new tabs that have been added.
+ // need to add a more efficient way of doing this at some point (hence this tier level)
+ var si=this.selected.index;
+ this.deconstruct( );
+ this.build( );
+ this.switchtab(si);
+ }
+ // add a tab dynamically
+ this.addTab=function _tabSystem_addTab_( div, insertBefore ) {
+ // please supply a division dom node with a first child of a heading element;
+ // i'm not going to wipe your arse for you, if you fuck it up, it's your problem :)
+ div.className=this.tabPageClass;
+ this.el.insertBefore( div, (insertBefore)?insertBefore:this.tabs[0].tabPage );
+ this.rebuild();
+ }
+ // ie6 memory
+ this.takeOutOfMemory=function _tabSystem_takeOutOfMemory_( e ) { // ie6..s
+ for(x in this) {try{this[x]=null}catch(ex){;;;}}
+ }
+ this.addStyleSheet=function _tabSystem_addStyleSheet_( stURI ) {
+
+ if(!this.genericCapture) { // if called on a generic level, bubbles up to global level
+ if(!this.styleSheet) {
+ var head=document.getElementsByTagName("head").item( 0 );
+ this.styleSheet=document.createElement("link");
+ this.styleSheet.rel="stylesheet";
+ this.styleSheet.type="text/css";
+ this.styleSheet.media="screen";
+ this.styleSheet.href=stURI;
+ head.appendChild( this.styleSheet );
+ }
+ else {
+ this.styleSheet.disabled=0;
+ this.styleSheet.href=stURI;
+ }
+ }
+ else tabSystem.genericStyleSheet( stURI );
+ this.fireEventHandler( tabSystem.style_changeEvent );
+ }
+ this.backup=function _tabSystem_backup_( e ) {
+ // this will backup any nested tab sets too, you have been warned
+ this.bDocFrag=this.el.cloneNode( 1 );
+ }
+ this.deconstruct=function _tabSystem_restore_( e ) {
+ if(this.rendered==0) throw new Error("This tab set is not built.");
+ // hide the tab container
+ this.tabContainer.style.display="none";
+ // we have a very nasty sitation here: nested tabsets will still take style down from parents
+ // because ie only recognises the "any decendants of.." css space thingy. not direct children; ">".
+ // the way to get around it is to have another class name for the tab pages on the nested tabset, but
+ // this wont be caught by generics. What a pain the arse!
+ for(var x=0;x<this.tabs.length;x++) {
+ // we make all tab page divisions visible
+ this.tabs[x].tabPage.style.display="block";
+ // if first headings had been hidden, we make them viewable ;)
+ if( this.removeHeadings ) this.tabs[x].heading.style.display="block";
+ }
+ // we do misc stuff and fire events off etc
+ this.rendered=0;
+ this.fireEventHandler( tabSystem.unbuildEvent );
+ var s=this.styleSheet||tabSystem.styleSheet;
+ if(s)s.disabled=1;
+ }
+
+ this.build=function _tabSystem_build_( e ) { // division the structure..
+ if(this.rendered==1) throw new Error("This tab set is already built.");
+ // memory cleanup
+ if(this.tabs.lengh>0) for(var x=0;x<this.tabs.length;x++) {
+ for(x in this.tabs[x]) if(this.tabs[x]!=this) this.tabs[x]=null;
+ }
+ // reset tabs copllection
+ this.tabs=[];
+ //this.backup( );
+ this.addStyleSheet( this.styleSheetUri );
+ if( !this.hasBeenBuiltOnce &&
+ this.el.className.search(
+ new RegExp( this.firstHeadingKeepTrigger ) )!=-1) this.removeHeadings=0;
+ // insert a division at the beginnning of the main div to hold tabs.
+ this.tabContainer=document.createElement("div");
+ this.el.insertBefore( this.tabContainer, this.el.firstChild );
+ this.tabContainer.style.display="block";
+ this.tabContainer.className=this.tabContainerClass;
+ // create a structured list in the container for the tabs to sit in, (good for no css support).
+ this.ul=document.createElement( "ul" );
+ this.tabContainer.appendChild( this.ul );
+ // itterate through the tab-pages in the tab division..
+ var d=this.el.getElementsByTagName("div");var z=0;
+
+ for(var x=0;x<d.length;x++) {
+
+ if(d[x].className.search(this.tabPageClass)!=-1 && d[x].parentNode==this.el) {
+ var t=new tabSystem.tab( this );
+ t.index=z;
+ // check to see if user has requested a default selection on tab
+ if( !this.hasBeenBuiltOnce
+ && d[x].className .search( this.tabSelectedKeyword ) != -1 )
+ this.startIndex=z;
+ // first we take out the first child of the tab page
+ // we clone the node for later use.
+ var h=d.item( x ).firstChild.style?d.item( x ).firstChild:d.item( x ).childNodes.item( 1 );
+ if( this.removeHeadings ) {
+ // now we take out the heading from the tab-page.
+ h.style.display="none";
+ } else h.style.display="block";
+ // add heading/page to tab
+ t.addTabPage( d[x] );
+ t.addHeading( h.cloneNode( 1 ) );
+ // style the heading
+ h.className=this.firstHeadingClass +=" "+h.className;
+
+ // re-style the old heading
+ t.styletab( );
+
+ // insert the tab into the structured list in the container.
+
+ t.createListItem( );
+ // by default tabs will look the wrong way around
+ if( this.invertOrder && this.ul.firstChild ) this.ul.insertBefore( t.li, this.ul.firstChild );
+ else this.ul.appendChild( t.li );
+
+ // reference to the origional heading
+ t.heading=h;
+ // add events to the tab
+ t.addEvents( );
+ // add tab to main obj array;
+ this.tabs[ z ]=t;
+ z++ // this is the counter to keep track of tabs.
+ }
+ }
+ // all tabs rendered, now switch to the default first index
+ this.switchtab( this.startIndex, 1 );
+ this.rendered=1;
+ this.hasBeenBuiltOnce=1;
+ this.fireEventHandler( tabSystem.buildEvent );
+ }
+ this.switchTabToId=function _tabSystem_switchtab_( id ) { // maybe test this? ;)
+ for(var x=0;x<this.tabs.length;x++) {
+ if( this.tabs[x].hClone.id && this.tabs[x].hClone.id==id ) {
+ this.switchtab( this.tabs[x].index );
+ }
+ }
+ }
+ this.switchtab=function _tabSystem_switchtab_( e, firstTime ) { // switches on tab INDEX not tab
+ if(!this.tabs[e]) throw new Error("tab does not exist..");
+ var t=this.tabs[e]; // NOT hClone!
+ if( this.selected ) {
+ this.selected.styletab( );
+ this.selected.addEvents( );
+
+ this.selected.tabPage.style.display="none";
+ }
+ if( firstTime ) { // hide all tab-pages first time
+ for(var x=0;x<this.tabs.length;x++) {
+ this.tabs[x].tabPage.style.display="none";
+ }
+ }
+ t.hClone.className +=" "+ this.activeTabClass;
+ t.removeEvents( );
+ t.tabPage.style.display="block";
+ this.selected=null; this.selected=t;
+ }
+ if ( this.genericCapture ) this.build( );
+ this.addEventHandler( "onunload", this.takeOutOfMemory, 0, 1 );
+}
+//==================================================
+//= Patch in a couple of things we need
+//==================================================
+if(document.all || document.getElementsByTagName) {
+ document.getElementsByClassName=function (el) {
+ var searchObj, nodeList;
+ // initialize
+ searchObj=n=new Object();
+ for (var i=1; i < arguments.length; i++) {
+ searchObj[arguments[i]]=new Array();
+ }
+ nodeList=el.all || el.getElementsByTagName("*");
+ // loop over all descendant elements (c)
+ for (var i=0, c=null, cn; (el.all ? c=nodeList(i) : c=nodeList.item(i)); i++) {
+ if (c.nodeType == 1) {
+ cn=c.className.split(" ");
+ for (j=0; j < cn.length; j++) {
+ // if the current cn element is defined in searchObj,
+ // then it must be one we're searching for. add it.
+ if (searchObj[cn[j]]) {
+ searchObj[cn[j]][searchObj[cn[j]].length]=c;
+ }
+ }
+ }
+ }
+ return ( searchObj );
+ }
+}
+if(!Array.prototype.push) {
+ Array.prototype.push= function( e ) {
+ var i;
+ for(i=0; j=arguments[i]; i++) this[this.length]=j;
+ return ( this.length );
+ }
+}
+if(!window.Error) { // some browsers dont have this, and i dont want to throw strings in ie5..
+ function Error( message ) {
+ this.message=message;
+ this.name=new String;
+ }
+}
+//==================================================
+//= Global Code Starts
+//==================================================
+tabSystem.instances=[ ];
+tabSystem.makeGlobalProps( );
+if( window && tabSystem.Dependancies && Listener) Listener.add( window, "onload", tabSystem.construct, tabSystem, 1 )
+ else window.status="Standards-Check failed for tab system";
diff --git a/js/tabs/tabs_load.js b/js/tabs/tabs_load.js
new file mode 100644
index 0000000..ba2abba
--- /dev/null
+++ b/js/tabs/tabs_load.js
@@ -0,0 +1,32 @@
+if( tabSystem && tabSystem.addEventHandler && window && window.unescape ) {
+ tabSystem.prototype.switchTabByHeadingText = function ( HeadingString ) {
+ // beware that if two tabs share same name, first will get favour
+ String.prototype.removeHTML=function( e ) { // nested funcs are good
+ return this.replace(/(<.+>)/g,"");
+ }
+
+ var HeadingString=window.unescape(HeadingString); // remove %x
+
+ for(var x=0;x<this.tabs.length;x++) {
+ // loop through all tabs
+ if( this.tabs[x].hClone.innerHTML.removeHTML()==HeadingString) {
+
+ // got one
+ this.switchtab( x );
+ return; // stick with first match
+ }
+ }
+ }
+ tabSystem.addEventHandler( "onload", function( e ) {
+ if( window && window.location ) {
+ function getIdentifyerFromURL( e ) { // get the #id
+ var m=window.location.href.match(/#(.+)$/);
+ if( m && m.length && m.length>0 ) return m[1];
+ }
+
+ var id=getIdentifyerFromURL();
+ // switch the *first* instance to this text (you can modify this)
+ if( this.instances[0] ) this.instances[0].switchTabByHeadingText( id );
+ }
+ }, tabSystem );
+}