/*

TIPSTER v3.1 RC (c) 2001-2004 Angus Turnbull, http://www.twinhelix.com
Altering this notice or redistributing this file is prohibited.

*/

var isDOM=document.getElementById?1:0,isIE=document.all?1:0,isNS4=navigator.appName=='Netscape'&&!isDOM?1:0,isOp=self.opera?1:0,isDyn=isDOM||isIE||isNS4;function getRef(i,p){p=!p?document:p.navigator?p.document:p;return isIE?p.all[i]:isDOM?(p.getElementById?p:p.ownerDocument).getElementById(i):isNS4?p.layers[i]:null};function getSty(i,p){var r=getRef(i,p);return r?isNS4?r:r.style:null};if(!self.LayerObj)var LayerObj=new Function('i','p','this.ref=getRef(i,p);this.sty=getSty(i,p);return this');function getLyr(i,p){return new LayerObj(i,p)};function LyrFn(n,f){LayerObj.prototype[n]=new Function('var a=arguments,p=a[0],px=isNS4||isOp?0:"px";with(this){'+f+'}')};LyrFn('x','if(!isNaN(p))sty.left=p+px;else return parseInt(sty.left)');LyrFn('y','if(!isNaN(p))sty.top=p+px;else return parseInt(sty.top)');LyrFn('w','if(p)(isNS4?sty.clip:sty).width=p+px;else return(isNS4?ref.document.width:ref.offsetWidth)');LyrFn('h','if(p)(isNS4?sty.clip:sty).height=p+px;else return(isNS4?ref.document.height:ref.offsetHeight)');LyrFn('vis','sty.visibility=p');LyrFn('write','if(isNS4)with(ref.document){write(p);close()}else ref.innerHTML=p');LyrFn('alpha','var f=ref.filters,d=(p==null),o=d?"inherit":p/100;if(f){if(!d&&sty.filter.indexOf("alpha")==-1)sty.filter+=" alpha(opacity="+p+")";else if(f.length&&f.alpha)with(f.alpha){if(d)enabled=false;else{opacity=p;enabled=true}}}else if(isDOM)sty.opacity=sty.MozOpacity=o');if(!self.page)var page={win:self,minW:0,minH:0,MS:isIE&&!isOp};page.db=function(p){with(this.win.document)return(isDOM?documentElement[p]:0)||body[p]||0};page.winW=function(){with(this)return Math.max(minW,MS?db('clientWidth'):win.innerWidth)};page.winH=function(){with(this)return Math.max(minH,MS?db('clientHeight'):win.innerHeight)};page.scrollX=function(){with(this)return MS?db('scrollLeft'):win.pageXOffset};page.scrollY=function(){with(this)return MS?db('scrollTop'):win.pageYOffset};function TipObj(myName){this.myName=myName;this.template='';this.tips=new Array();this.parentObj=null;this.div=null;this.actTip='';this.showTip=false;this.xPos=this.yPos=this.sX=this.sY=this.mX=this.mY=0;this.trackTimer=this.fadeTimer=0;this.alpha=0;this.doFades=true;this.minAlpha=0;this.maxAlpha=100;this.fadeInSpeed=20;this.fadeOutSpeed=20;this.tipStick=1;this.showDelay=50;this.hideDelay=250;this.IESelectBoxFix=0;TipObj.list[myName]=this};TipObj.list=[];var ToPt=TipObj.prototype;ToPt.track=function(evt){with(this){if(!isIE||document.body){evt=evt||window.event;sX=page.scrollX();sY=page.scrollY();mX=evt.pageX||sX+evt.clientX||0;mY=evt.pageY||sY+evt.clientY||0;if(tipStick==1)position()}}};ToPt.position=function(forcePos){with(this){if(!actTip)return;var wW=page.winW(),wH=page.winH();if(!isIE||isOp){wW-=16;wH-=16}var t=tips[actTip],tipX=eval(t[0]),tipY=eval(t[1]),tipW=div.w(),tipH=div.h(),adjY=1;if(typeof(t[0])=='number')tipX+=mX;if(typeof(t[1])=='number')tipY+=mY;if(tipX+tipW+5>sX+wW)tipX=sX+wW-tipW-5;if(tipY+tipH+5>sY+wH)tipY=sY+wH-tipH-5;if(tipX<sX+5)tipX=sX+5;if(tipY<sY+5)tipY=sY+5;if((!showTip&&(doFades?!alpha:true))||forcePos){xPos=tipX;yPos=tipY}xPos+=(tipX-xPos)*tipStick;yPos+=(tipY-yPos)*tipStick;div.x(xPos);div.y(yPos);return}};ToPt.replaceContent=function(tipN){with(this){actTip=tipN;if(tipStick==parseInt(tipStick)){var rE='';if(isNS4){div.ref.captureEvents(Event.MOUSEOVER|Event.MOUSEOUT);rE=';return this.routeEvent(evt)'}div.ref.onmouseover=new Function('evt',myName+'.show("'+tipN+'"'+(parentObj?','+parentObj.myName:'')+')'+rE);div.ref.onmouseout=new Function('evt',myName+'.hide()'+rE)}var str=template;for(var i=0;i<tips[tipN].length;i++)str=str.replace(new RegExp('%'+i+'%','g'),tips[tipN][i]);if(window.createPopup&&IESelectBoxFix){var filt='filter:progid:DXImageTransform.Microsoft.Alpha(opacity=';str+='<iframe src="about:blank" style="position:absolute;left:0px;top:0px;height:expression('+myName+'.div.h());z-index:1;border:none;'+filt+'0)"></iframe><div style="position:absolute;left:0px;top:0px;z-index:2;'+filt+'100)">'+str+'</div>'}if(isDOM&&!isOp)div.sty.width='auto';div.write(str+(isIE&&!isOp&&!window.external?'<small><br/></small>':''));position(true)}};ToPt.show=function(tipN,par){with(this){if(!isDyn)return;clearTimeout(fadeTimer);parentObj=par;if(par)par.show(par.actTip,par.parentObj);if(!div)div=getLyr(myName+'Layer');if(!div)return;clearInterval(trackTimer);if(tipStick!=parseInt(tipStick))trackTimer=setInterval(myName+'.position()',50);var showStr='with('+myName+'){showTip=true;'+(actTip!=tipN?'replaceContent("'+tipN+'");':'')+'fade()}';if(showDelay&&!actTip)fadeTimer=setTimeout(showStr,showDelay);else eval(showStr)}};ToPt.newTip=function(tName){with(this){if(!tips[tName])tips[tName]=[];for(var i=1;i<arguments.length;i++)tips[tName][i-1]=arguments[i];show(tName);return}};ToPt.hide=function(){with(this){clearTimeout(fadeTimer);if(!isDyn||!actTip||!div)return;if(isNS4&&tipStick==0&&xPos<=mX&&mX<=xPos+div.w()&&yPos<=mY&&mY<=yPos+div.h())return;with(tips[actTip])if(parentObj)parentObj.hide();fadeTimer=setTimeout('with('+myName+'){showTip=false;fade()}',hideDelay);return}};ToPt.fade=function(){with(this){clearTimeout(fadeTimer);if(showTip){div.vis('visible');if(doFades){alpha+=fadeInSpeed;if(alpha>maxAlpha)alpha=maxAlpha;div.alpha(alpha);if(alpha<maxAlpha)fadeTimer=setTimeout(myName+'.fade()',75)}}else{if(doFades&&alpha>minAlpha){alpha-=fadeOutSpeed;if(alpha<minAlpha)alpha=minAlpha;div.alpha(alpha);fadeTimer=setTimeout(myName+'.fade()',75);return}div.vis('hidden');actTip='';clearInterval(trackTimer)}}};var tipOR=window.onresize,nsWinW=window.innerWidth,nsWinH=window.innerHeight;document.tipMM=document.onmousemove;if(isNS4)document.captureEvents(Event.MOUSEMOVE);document.onmousemove=function(evt){for(var t in TipObj.list)TipObj.list[t].track(evt);return document.tipMM?document.tipMM(evt):(isNS4?document.routeEvent(evt):true)};window.onresize=function(){if(tipOR)tipOR();if(isNS4&&(nsWinW!=innerWidth||nsWinH!=innerHeight))location.reload()};




// Welcome to Tipster! Before you start, make sure you've read and agree to the
// "Conditions of Use" in the HTML document below.


// This script is object orientated.
// It works by creating "tip objects", each of which corresponds to a DIV in the page below.
// Each object contains a 'template' used for formatting tips, and settings for that object.
// Here are some examples to get you started:


// First, create a new tip object, and pass it its own name so it can reference itself.
var docTips = new TipObj('docTips');
with (docTips)
{
 // Next, we set the appearance and style of the tips displayed by this tip object.
 // Each tip object must have a string called 'template' that contains some specially-formatted
 // HTML to write to its DIV. This example has two nested tables, a border and a background.
 // The special bits are the %2%, %3% and so on halfway through. These correspond to values we
 // set in the tips.tipName arrays later: %0% is the X value, %1% is Y, and %2% onwards are
 // whatever other info we have in there (width, text etc...). This example sets the width %2%
 // of the table, and inserts some content which is the text %3%.
 // You might want to put extra information in the tip arrays, and use %4%, %5% onwards in the
 // template for tip headers, footers, customisable colours etc... see the next tip object for
 // another example.

 template = '<table bgcolor="#000000" cellpadding="1" cellspacing="0" width="%2%" border="0">' +
  '<tr><td><table bgcolor="#EFEFEF" cellpadding="3" cellspacing="0" width="100%" border="0">' +
  '<tr><td class="tipclass">%3%</td></tr></table></td></tr></table>';

 // Next, you can list one or more named tips to call later on in your page. This is useful if
 // you want to show the same tip several times in the page, or on several pages.
 //
 // We organise tips in arrays like so: tips.tipName = new Array(X, Y, width, text, ....);
 // The first two parameters, X and Y, are the distances of the tip from the mouse cursor position
 // if they're set as numbers. If they're strings ('in quotes'), the script calculates them as
 // expressions and ignores the mouse position. They are the only compulsory parameters.
 // You can also use the 'page' object included with this script for fancy positioning
 // effects. Functions include 'page.winW()' and 'page.winH()' to get the window area dimensions,
 // and 'page.scrollX()' and 'page.scrollY()' for the current scroll position, so you can align
 // your tips however you want... see the examples below.
 //
 // Alternatively, you can also create tips inline later in the page like so:
 // <tag onmouseover="tipObjectName.newTip('tipName', X, Y, ....and so on....)">
 // This automatically creates and shows a new tip (just give them random names).
 // Make sure you don't use HTML formatting inside HTML tag event handlers for your tip text.
 //
 // And if you don't want to do *that*, see below for an optional function that can convert
 // TITLE="..." attributes into tips automatically.


 // This 'mysite' tip will show 75px left of the cursor and 15px below. As you can see %2% is
 // a width of 150px, and %3% is a text string, according to our template above.
 tips.mysite = new Array(5, 15, 185, 'Click to return to Home Page...');

 // Finally, you can set some optional properties to customise the behavious of this object.
 //
 // How much of a delay do you want between pointing and action? Defaults are:
showDelay = 0;
hideDelay = 0;
 //
 // False will hide tips instantaneously. Fading only works under IE/Win and NS6+.
doFades = false;
 // You can change the minimum and maximum opacity percentages, defaults:
minAlpha = 50;
maxAlpha = 50;
 //
 // How fast the transparency changes (between 1 and 100), higher means faster fades.
fadeInSpeed = 100;
fadeOutSpeed = 100;
 //
 // Tip stickiness, from 0 to 1, defines how readily the tip follows the cursor. 1 means it
 // follows it perfectly (the default), 0 is a static tip, and decimals are 'floating' tips.
 //tipStick = 0.2;
 //
 // IE 5.5+ select box fix. This will enable tips to appear over <SELECT> elements in the page.
 //IESelectBoxFix = true;
}

// Later in the document, use this syntax to show tips from links or other HTML tags:
// <a href="file.html" onmouseover="tipObjName.show('tipName')" onmouseout="tipObjName.hide()">




// Here's a second demo tip object. Feel free to delete it if you're not using it!
// I've included a tip header here in this template, %3% is the header text and %4% is
// now the main text. As you can see you can basically format your tips any way you want.
// This tip also includes mouse event handlers to show a second-level tip, just like in
// the body of the page below, so you can nest tips within tips, and a 'tipStick' of 0 so
// it never follows the mouse.
var staticTip = new TipObj('staticTip');
with (staticTip)
{
 // I'm using tables here for legacy NS4 support, but feel free to use styled DIVs.
 template = '<table bgcolor="#000000" cellpadding="0" cellspacing="0" width="%2%" border="0">' +
  '<tr><td><table cellpadding="3" cellspacing="1" width="100%" border="0">' +
  '<tr><td bgcolor="#336666" align="center" height="18" class="tipClass">%3%</td></tr>' +
  '<tr><td bgcolor="#009999" align="center" height="*" class="tipClass">%4%</td></tr>' +
  '</table></td></tr></table>';

 // HIERARCHIAL TIPS: To call one tip object from within another tip object, make sure you
 // pass the a reference to the current object as the second parameter to the show() function.
 tips.links = new Array(5, 5, 100, 'Extra Links',
  '- <a href="javascript:alert(\'Useful indeed...\')">Section 1</a> -<br />' +
  '- <a href="#" name="nest1trig" onmouseover="nestTip.show(\'nest1\', staticTip)" ' +
   'onmouseout="nestTip.hide()">NESTED TIP 1 &gt;</a> -<br />' +
  '- <a href="#" name="nest2trig" onmouseover="nestTip.show(\'nest2\', staticTip)" ' +
   'onmouseout="nestTip.hide()">NESTED TIP 2 &gt;</a> -<br />');

 tipStick = 0;
}

// Here's the other tip object called by the one above, for hierarchial tips.
var nestTip = new TipObj('nestTip');
with (nestTip)
{
 template = '<table bgcolor="#000000" cellpadding="1" cellspacing="0" width="%2%" border="0">' +
  '<tr><td><table bgcolor="#009999" cellpadding="3" cellspacing="0" width="100%" border="0">' +
  '<tr><td class="tipClass">%3%</td></tr></table></td></tr></table>';

 tips.nest1 = new Array(10, 0, 90,
  '<a href="javascript:alert(\'A regular popup menu...\')">Relative Position</a>');

 // This tip is positioned via formulae based on its parent tip's position...
 tips.nest2 = new Array('staticTip.xPos + 95', 'staticTip.yPos + 50', 120,
  '<a href="javascript:alert(\'Nested tip 2\')">Absolutely positioned static tip...</a>');

 tipStick = 0;
}


// Here's one illustrating a decimal tipStick value so it floats along behind the cursor.
var stickyTip = new TipObj('stickyTip');
with (stickyTip)
{
 template = '<table bgcolor="#000000" cellpadding="1" cellspacing="0" width="%2%" border="0">' +
  '<tr><td><table bgcolor="#339966" cellpadding="4" cellspacing="0" width="100%" border="0">' +
  '<tr><td align="center" class="tipClass">%3%</td></tr></table></td></tr></table>';

 tips.floating = new Array(5, 5, 100, 'Floating tips can have extra effect!');

 tipStick = 0.2;
}



// Finally, here's an optional function that will convert document TITLE="..." attributes into
// tips, in v5+ browsers. This is provided as a base to get you started, so uncomment and enjoy.
// Otherwise this can be deleted, it is entirely optional and just takes up space.

/*

function titlesToTips()
{
 var tags = isDOM ? document.getElementsByTagName('*') : [];
 for (var i = 0; i < tags.length; i++)
 {
  if (tags[i].title)
  {
   // You may wish to do some string processing here, for instance split the TITLE into two
   // strings based on the | character or similar, and use one for a tip heading in a template.
   tags[i].onmouseover = new Function('docTips.newTip("tagTip' + i + '", 5, 5, 100, "' +
    tags[i].title + '")');
   tags[i].onmouseout = new Function('docTips.hide()');
   tags[i].title = '';
  }
 }
};
var tttOL = window.onload;
window.onload = function()
{
 if (tttOL) tttOL();
 titlesToTips();}

*/

