diff options
| author | Max Kremmel <xing@synapse.plus.com> | 2005-06-19 21:54:53 +0000 |
|---|---|---|
| committer | Max Kremmel <xing@synapse.plus.com> | 2005-06-19 21:54:53 +0000 |
| commit | db4ad3c4b3a873e3169291d31796bff392200f1b (patch) | |
| tree | 7689177858b2ea14e5703c487114d730ca278861 /js | |
| parent | cb8de906aeb7b55e561449aab664d60ec6cfdbba (diff) | |
| download | themes-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.js | 30 | ||||
| -rw-r--r-- | js/overlib.js | 337 | ||||
| -rw-r--r-- | js/pngfix.js | 29 | ||||
| -rw-r--r-- | js/tabs/listener.js | 86 | ||||
| -rw-r--r-- | js/tabs/tabpane.js | 332 | ||||
| -rw-r--r-- | js/tabs/tabs.css | 1 | ||||
| -rw-r--r-- | js/tabs/tabs.js | 404 | ||||
| -rw-r--r-- | js/tabs/tabs_load.js | 32 |
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, ' ');if (!tReg.test(o3_cap))o3_cap=o3_cap.replace(/[ ]+/g, ' ');} +} +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(/\ /g, ' ');o3_cap=o3_cap.replace(/\ /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 ); +} |
