/*  
*/
var smtsymconfig = new Object();


//===================  GLOBAL TOOLTIP CONFIGURATION  =========================//
var smtsymtt_Debug	= false		// false or true - recommended: false once you release your page to the public
var smtsymtt_Enabled	= true		// Allows to (temporarily) suppress tooltips, e.g. by providing the user with a button that sets this global variable to false
var smtsymTagsToTip	= false		// false or true - if true, HTML elements to be converted to tooltips via TagToTip() are automatically hidden;
				// if false, you should hide those HTML elements yourself

// For each of the following config variables there exists a command, which is
// just the variablename in uppercase, to be passed to Tip() or TagToTip() to
// configure tooltips individually. Individual commands override global
// configuration. Order of commands is arbitrary.
// Example: onmouseover="Tip('Tooltip text', LEFT, true, BGCOLOR, '#FF9900', FADEIN, 400)"



smtsymconfig. smtsymAbove			= false		// false or true - tooltip above mousepointer
smtsymconfig. smtsymBgColor			= '#E2E7FF'	// Background colour (HTML colour value, in quotes)
smtsymconfig. smtsymBgImg			= ''		// Path to background image, none if empty string ''
smtsymconfig. smtsymBorderColor		= '#003099'
smtsymconfig. smtsymBorderStyle		= 'solid'	// Any permitted CSS value, but I recommend 'solid', 'dotted' or 'dashed'
smtsymconfig. smtsymBorderWidth		= 1
smtsymconfig. smtsymCenterMouse		= false		// false or true - center the tip horizontally below (or above) the mousepointer
smtsymconfig. smtsymClickClose		= false		// false or true - close tooltip if the user clicks somewhere
smtsymconfig. smtsymClickSticky		= false		// false or true - make tooltip sticky if user left-clicks on the hovered element while the tooltip is active
smtsymconfig. smtsymCloseBtn		= false		// false or true - closebutton in titlebar
smtsymconfig. smtsymCloseBtnColors		= ['#000000', '#000000', '#000000', '#000000']	// [Background, text, hovered background, hovered text] - use empty strings '' to inherit title colours
smtsymconfig. smtsymCloseBtnText		= '&nbsp;X&nbsp;'	// Close button text (may also be an image tag)
smtsymconfig. smtsymCopyContent		= true		// When converting a HTML element to a tooltip, copy only the element's content, rather than converting the element by its own
smtsymconfig. smtsymDelay			= 200		// Time span in ms until tooltip shows up
smtsymconfig. smtsymDuration		= 0			// Time span in ms after which the tooltip disappears; 0 for infinite duration, < 0 for delay in ms _after_ the onmouseout until the tooltip disappears
smtsymconfig. smtsymExclusive		= false		// false or true - no other tooltip can appear until the current one has actively been closed
smtsymconfig. smtsymFadeIn			= 0		// Fade-in duration in ms, e.g. 400; 0 for no animation
smtsymconfig. smtsymFadeOut			= 0
smtsymconfig. smtsymFadeInterval		= 0		// Duration of each fade step in ms (recommended: 30) - shorter is smoother but causes more CPU-load
smtsymconfig. smtsymFixXY			= null		// Fixated position, two modes. Mode 1: x- an y-coordinates in brackets, e.g. [210, 480]. Mode 2: Show tooltip at a position related to an HTML element: [ID of HTML element, x-offset, y-offset from HTML element], e.g. ['SomeID', 10, 30]. Value null (default) for no fixated positioning.
smtsymconfig. smtsymFix			= null		// Fixated position, two modes. Mode 1: x- an y-coordinates in brackets, e.g. [210, 480]. Mode 2: Show tooltip at a position related to an HTML element: [ID of HTML element, x-offset, y-offset from HTML element], e.g. ['SomeID', 10, 30]. Value null (default) for no fixated positioning.
smtsymconfig. smtsymFollowMouse		= false		// false or true - tooltip follows the mouse
smtsymconfig. smtsymFontColor		= '#000044'
smtsymconfig. smtsymFontFace		= 'Verdana,Geneva,sans-serif'
smtsymconfig. smtsymFontSize		= '8pt'		// E.g. '9pt' or '12px' - unit is mandatory
smtsymconfig. smtsymFontWeight		= 'normal'	// 'normal' or 'bold';
smtsymconfig. smtsymHeight			= 0			// Tooltip height; 0 for automatic adaption to tooltip content, < 0 (e.g. -100) for a maximum for automatic adaption
smtsymconfig. smtsymJumpHorz		= false 	// *****false or true - jump horizontally to other side of mouse if tooltip would extend past clientarea boundary
smtsymconfig. smtsymJumpVert		= false		// false or true - jump vertically		"
smtsymconfig. smtsymLeft			= false		// false or true - tooltip on the left of the mouse
smtsymconfig. smtsymOffsetX			= 0		// Horizontal offset of left-top corner from mousepointer
smtsymconfig. smtsymOffsetY			= 0			// Vertical offset
smtsymconfig. smtsymOpacity			= 100		// Integer between 0 and 100 - opacity of tooltip in percent
smtsymconfig. smtsymPadding			= 1			// Spacing between border and content
smtsymconfig. smtsymShadow			= false		// false or true
smtsymconfig. smtsymShadowColor		= '#C0C0C0'
smtsymconfig. smtsymShadowWidth		= 20
smtsymconfig. smtsymSticky			= true		// false or true - fixate tip, ie. don't follow the mouse and don't hide on mouseout
smtsymconfig. smtsymTextAlign		= 'left'	// 'left', 'right' or 'justify'
smtsymconfig. smtsymTitle			= ''		// Default title text applied to all tips (no default title: empty string '')
smtsymconfig. smtsymTitleAlign		= 'left'	// 'left' or 'right' - text alignment inside the title bar
smtsymconfig. smtsymTitleBgColor	= ''		// If empty string '', BorderColor will be used
smtsymconfig. smtsymTitleFontColor	= '#FFFFFF'	// Color of title text - if '', BgColor (of tooltip body) will be used
smtsymconfig. smtsymTitleFontFace	= ''		// If '' use FontFace (boldified)
smtsymconfig. smtsymTitleFontSize	= ''		// If '' use FontSize
smtsymconfig. smtsymTitlePadding	= 2
smtsymconfig. smtsymWidth			= 0			// Tooltip width; 0 for automatic adaption to tooltip content; < -1 (e.g. -240) for a maximum width for that automatic adaption;
smtsymconfig. smtsymPopLeft		= false
smtsymconfig. smtsymPopTop		= false;
smtsymconfig. smtsymPopRight	= false;
smtsymconfig. smtsymPopBottom	= false;

//=======  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW  ==============//									// -1: tooltip width confined to the width required for the titlebar

//=====================  PUBLIC  =============================================//
function SSTip()
{
	smtsymtt_SSTip(arguments, null);
}
function SSTagToTip()
{
	var t2t = smtsymtt_GetElt(arguments[0]);
	if(t2t)
		smtsymtt_SSTip(arguments, t2t);
}
function SSUnTip()
{
	smtsymtt_OpReHref();
	if(smtsymtt_aV[SMTSYMDURATION] < 0 && (smtsymtt_iState & 0x2))
		smtsymtt_tDurt.Timer("smtsymtt_HideInit()", -smtsymtt_aV[SMTSYMDURATION], true);
	else if(!(smtsymtt_aV[SMTSYMSTICKY] && (smtsymtt_iState & 0x2)))
		smtsymtt_HideInit();
	else if((smtsymtt_aV[SMTSYMSTICKY] && (smtsymtt_iState & 0x2)))
		smtsymtt_MouseTracker = smtsymtt_MouseInTransition;			// mouse outside parent box who initiated the popup

}

//==================  PUBLIC PLUGIN API	 =====================================//
// Extension eventhandlers currently supported:
// OnLoadConfig, OnCreateContentString, OnSubDivsCreated, OnShow, OnMoveBefore,
// OnMoveAfter, OnHideInit, OnHide, OnKill

var smtsymtt_aElt = new Array(10), // Container DIV, outer title & body DIVs, inner title & body TDs, closebutton SPAN, shadow DIVs, and IFRAME to cover windowed elements in IE
smtsymtt_aV = new Array(),	// Caches and enumerates config data for currently active tooltip
smtsymtt_sContent,			// Inner tooltip text or HTML
smtsymtt_PureContent,
smtsymtt_t2t, smtsymtt_t2tDad,		// Tag converted to tip, and its DOM parent element
smtsymtt_musX, smtsymtt_musY,
smtsymtt_over,
smtsymtt_x, smtsymtt_y, smtsymtt_w, smtsymtt_h; // Position, width and height of currently displayed tooltip
smtsymtt_measure_height = 0; 		// size of current div
smtsymtt_measure_width = 0; 		// size of current div
smtsymtt_MouseInParent = 3;
smtsymtt_MouseInTransition = 2;
smtsymtt_MouseInPopup = 1;
smtsymtt_CheckMouse = 0;
smtsymtt_MouseTracker = 3;

function smtsymtt_Extension()
{
	smtsymtt_ExtCmdEnum();
	smtsymtt_aExt[smtsymtt_aExt.length] = this;
	return this;
}

function smtsymtt_SetTipPos(x, y)
{
	var css = smtsymtt_aElt[0].style;

	smtsymtt_x = x;
	smtsymtt_y = y;

	css.left = x + "px";
	css.top = y + "px";

	if(smtsymtt_ie56)
	{
		var ifrm = smtsymtt_aElt[smtsymtt_aElt.length - 1];
		if(ifrm)
		{
			ifrm.style.left = css.left;
			ifrm.style.top = css.top;
		}
	}
}

function smtsymtt_HideInit()
{
	if(smtsymtt_iState)
	{
		smtsymtt_ExtCallFncs(0, "HideInit");
		smtsymtt_iState &= ~(0x4 | 0x8);
		if(smtsymtt_flagOpa && smtsymtt_aV[SMTSYMFADEOUT])
		{
			smtsymtt_tFade.EndTimer();
			if(smtsymtt_opa)
			{
				var n = Math.round(smtsymtt_aV[SMTSYMFADEOUT] / (smtsymtt_aV[SMTSYMFADEINTERVAL] * (smtsymtt_aV[SMTSYMOPACITY] / smtsymtt_opa)));
				smtsymtt_Fade(smtsymtt_opa, smtsymtt_opa, 0, n);
				return;
			}
		}
		smtsymtt_tHide.Timer("smtsymtt_Hide();", 1, false);
	}
}
function smtsymtt_Hide()
{
	if(smtsymtt_db && smtsymtt_iState)
	{

		smtsymtt_OpReHref();
		if(smtsymtt_iState & 0x2)
		{
			smtsymtt_setcursor(smtsymtt_t2t.getAttribute('id'),smtsymtt_start_time);
			smtsymtt_aElt[0].style.visibility = "hidden";
			smtsymtt_ExtCallFncs(0, "Hide");
		}
		smtsymtt_tShow.EndTimer();
		smtsymtt_tHide.EndTimer();
		smtsymtt_tDurt.EndTimer();
		smtsymtt_tFade.EndTimer();
		if(!smtsymtt_op && !smtsymtt_ie)
		{
			smtsymtt_tWaitMov.EndTimer();
			smtsymtt_bWait = false;
		}
		if(smtsymtt_aV[SMTSYMCLICKCLOSE] || smtsymtt_aV[SMTSYMCLICKSTICKY])
			smtsymtt_RemEvtFnc(document, "mouseup", smtsymtt_OnLClick);
		smtsymtt_ExtCallFncs(0, "Kill");
		// In case of a TagToTip tip, hide converted DOM node and
		// re-insert it into DOM
		if(smtsymtt_t2t && !smtsymtt_aV[SMTSYMCOPYCONTENT])
			smtsymtt_UnEl2Tip();
		smtsymtt_iState = 0;
		smtsymtt_over = null;
		smtsymtt_ResetMainDiv();
		if(smtsymtt_aElt[smtsymtt_aElt.length - 1])
			smtsymtt_aElt[smtsymtt_aElt.length - 1].style.display = "none";
	}
}
function smtsymtt_GetElt(id)
{
	return(document.getElementById ? document.getElementById(id)
			: document.all ? document.all[id]
			: null);
}
function smtsymtt_GetDivW(el)
{
	return(el ? (el.offsetWidth || el.style.pixelWidth || 0) : 0);
}
function smtsymtt_GetDivH(el)
{
	return(el ? (el.offsetHeight || el.style.pixelHeight || 0) : 0);
}
function smtsymtt_GetScrollX()
{
	return(window.pageXOffset || (smtsymtt_db ? (smtsymtt_db.scrollLeft || 0) : 0));
}
function smtsymtt_GetScrollY()
{
	return(window.pageYOffset || (smtsymtt_db ? (smtsymtt_db.scrollTop || 0) : 0));
}
function smtsymtt_GetClientW()
{
	return smtsymtt_GetWndCliSiz("Width");
}
function smtsymtt_GetClientH()
{
	return smtsymtt_GetWndCliSiz("Height");
}
function smtsymtt_GetEvtX(e)
{
	return (e ? ((typeof(e.pageX) != smtsymtt_u) ? e.pageX : (e.clientX + smtsymtt_GetScrollX())) : 0);
}
function smtsymtt_GetEvtY(e)
{
	return (e ? ((typeof(e.pageY) != smtsymtt_u) ? e.pageY : (e.clientY + smtsymtt_GetScrollY())) : 0);
}
function smtsymtt_AddEvtFnc(el, sEvt, PFnc)
{
	if(el)
	{
		if(el.addEventListener)
			el.addEventListener(sEvt, PFnc, false);
		else
			el.attachEvent("on" + sEvt, PFnc);
	}
}
function smtsymtt_RemEvtFnc(el, sEvt, PFnc)
{
	if(el)
	{
		if(el.removeEventListener)
			el.removeEventListener(sEvt, PFnc, false);
		else
			el.detachEvent("on" + sEvt, PFnc);
	}
}
function smtsymtt_GetDad(el)
{
	return(el.parentNode || el.parentElement || el.offsetParent);
}


function smtsymtt_MovDomNode(el, dadFrom, dadTo)
{
	if(dadFrom)
		dadFrom.removeChild(el);
	if(dadTo) 
		dadTo.appendChild(el);
}

//======================  PRIVATE  ===========================================//
var smtsymtt_aExt = new Array(),	// Array of extension objects

smtsymtt_db, smtsymtt_op, smtsymtt_ie, smtsymtt_ie56, smtsymtt_bBoxOld,	// Browser flags
smtsymtt_body,
smtsymtt_ovr_,				// HTML element the mouse is currently over
smtsymtt_flagOpa,				// Opacity support: 1=IE, 2=Khtml, 3=KHTML, 4=Moz, 5=W3C
smtsymtt_maxPosX, smtsymtt_maxPosY,
smtsymtt_iState = 0,			// Tooltip active |= 1, shown |= 2, move with mouse |= 4, exclusive |= 8
smtsymtt_opa,					// Currently applied opacity
smtsymtt_bJmpVert, smtsymtt_bJmpHorz,// Tip temporarily on other side of mouse
smtsymtt_elDeHref,			// The tag from which we've removed the href attribute
// Timer
smtsymtt_tShow = new Number(0), smtsymtt_tHide = new Number(0), smtsymtt_tDurt = new Number(0),
smtsymtt_tFade = new Number(0), smtsymtt_tWaitMov = new Number(0),
smtsymtt_bWait = false,
smtsymtt_u = "undefined";



function smtsymtt_Init()
{
	smtsymtt_MkCmdEnum();
	// Send old browsers instantly to hell
	if(!smtsymtt_Browser() || !smtsymtt_MkMainDiv())
		return;
	smtsymtt_IsW3cBox();
	smtsymtt_OpaSupport();
	smtsymtt_AddEvtFnc(document, "mousemove", smtsymtt_Move);
	// In Debug mode we search for TagToTip() calls in order to notify
	// the user if they've forgotten to set the TagsToTip config flag
	if(smtsymTagsToTip || smtsymtt_Debug)
		smtsymtt_SetOnloadFnc();
	// Ensure the tip be hidden when the page unloads
	smtsymtt_AddEvtFnc(window, "unload", smtsymtt_Hide);
}
// Creates command names by translating config variable names to upper case
function smtsymtt_MkCmdEnum()
{
	var n = 0;
	for(var i in smtsymconfig)
		eval("window." + i.toString().toUpperCase() + " = " + n++);
	smtsymtt_aV.length = n;
}
function smtsymtt_Browser()
{
	var n, nv, n6, w3c;

	n = navigator.userAgent.toLowerCase(),
	nv = navigator.appVersion;
	smtsymtt_op = (document.defaultView && typeof(eval("w" + "indow" + "." + "o" + "p" + "er" + "a")) != smtsymtt_u);
	smtsymtt_ie = n.indexOf("msie") != -1 && document.all && !smtsymtt_op;
	if(smtsymtt_ie)
	{
		var ieOld = (!document.compatMode || document.compatMode == "BackCompat");
		smtsymtt_db = !ieOld ? document.documentElement : (document.body || null);
		if(smtsymtt_db)
			smtsymtt_ie56 = parseFloat(nv.substring(nv.indexOf("MSIE") + 5)) >= 5.5
					&& typeof document.body.style.maxHeight == smtsymtt_u;
	}
	else
	{
		smtsymtt_db = document.documentElement || document.body ||
				(document.getElementsByTagName ? document.getElementsByTagName("body")[0]
				: null);
		if(!smtsymtt_op)
		{
			n6 = document.defaultView && typeof document.defaultView.getComputedStyle != smtsymtt_u;
			w3c = !n6 && document.getElementById;
		}
	}
	smtsymtt_body = (document.getElementsByTagName ? document.getElementsByTagName("body")[0]
				: (document.body || null));
	if(smtsymtt_ie || n6 || smtsymtt_op || w3c)
	{

		if(smtsymtt_body && smtsymtt_db)
		{
			if(document.attachEvent || document.addEventListener)
				return true;
		}
		else
// 12/03/2009 CG- disable to allow entry into blog widget
			smtsymtt_Err("If installing SmartSymbols, then installation is complete.  A browser restart is required.  Otherwise, contact SmartSymbols for assistance.", false);

// 12/03/2009 CG- disable to allow entry into blog widget
//			smtsymtt_Err("wz_tooltip.js must be included INSIDE the body section,"
//					+ " immediately after the opening <body> tag.", false);
	}
	smtsymtt_db = null;
	return false;
}
function smtsymtt_MkMainDiv()
{
	// Create the tooltip DIV
	if (!smtsymtt_GetElt("SmartSymbolsPopUpDiv") && !smtsymtt_GetElt("SmartSymbolsIFrame"))	{
		if(smtsymtt_body.insertAdjacentHTML)
			smtsymtt_body.insertAdjacentHTML("afterBegin", smtsymtt_MkMainDivHtm());
		else if(typeof smtsymtt_body.innerHTML != smtsymtt_u && document.createElement && smtsymtt_body.appendChild)
			smtsymtt_body.appendChild(smtsymtt_MkMainDivDom());
	}
	
	if(window.smtsymtt_GetMainDivRefs /* FireFox Alzheimer */ && smtsymtt_GetMainDivRefs())
		return true;
	smtsymtt_db = null;
	return false;
}
function smtsymtt_MkMainDivHtm()
{
	return(
		'<div id="SmartSymbolsPopUpDiv" ></div>' +
		(smtsymtt_ie56 ? ('<iframe id="SmartSymbolsIFrame" src="javascript:false" scrolling="no" frameborder="0" style="filter:Alpha(opacity=0);position:absolute;top:0px;left:0px;display:none;"></iframe>')
		: '')
	);
}
function smtsymtt_MkMainDivDom()
{
	var el = document.createElement("div");
	if(el)
		el.id = "SmartSymbolsPopUpDiv";
	return el;
}
function smtsymtt_GetMainDivRefs()
{
	smtsymtt_aElt[0] = smtsymtt_GetElt("SmartSymbolsPopUpDiv");
	if(smtsymtt_ie56 && smtsymtt_aElt[0])
	{
		smtsymtt_aElt[smtsymtt_aElt.length - 1] = smtsymtt_GetElt("SmartSymbolsIFrame");
		if(!smtsymtt_aElt[smtsymtt_aElt.length - 1])
			smtsymtt_aElt[0] = null;
	}
	if(smtsymtt_aElt[0])
	{
		var css = smtsymtt_aElt[0].style;

		css.visibility = "hidden";
		css.position = "absolute";
		css.overflow = "hidden";
		return true;
	}
	return false;
}
function smtsymtt_ResetMainDiv()
{
	smtsymtt_SetTipPos(0, 0);
	smtsymtt_aElt[0].innerHTML = "";
	smtsymtt_aElt[0].style.width = "0px";
	smtsymtt_h = 0;
        smtsymtt_w = 0;
}
function smtsymtt_IsW3cBox()
{
	var css = smtsymtt_aElt[0].style;

	css.padding = "10px";
	css.width = "40px";
	smtsymtt_bBoxOld = (smtsymtt_GetDivW(smtsymtt_aElt[0]) == 40);
	css.padding = "0px";
	smtsymtt_ResetMainDiv();
}
function smtsymtt_OpaSupport()
{
	var css = smtsymtt_body.style;

	smtsymtt_flagOpa = (typeof(css.KhtmlOpacity) != smtsymtt_u) ? 2
				: (typeof(css.KHTMLOpacity) != smtsymtt_u) ? 3
				: (typeof(css.MozOpacity) != smtsymtt_u) ? 4
				: (typeof(css.opacity) != smtsymtt_u) ? 5
				: (typeof(css.filter) != smtsymtt_u) ? 1
				: 0;
}
// Ported from http://dean.edwards.name/weblog/2006/06/again/
// (Dean Edwards et al.)
function smtsymtt_SetOnloadFnc()
{
	smtsymtt_AddEvtFnc(document, "DOMContentLoaded", smtsymtt_HideSrcTags);
	smtsymtt_AddEvtFnc(window, "load", smtsymtt_HideSrcTags);
	if(smtsymtt_body.attachEvent)
		smtsymtt_body.attachEvent("onreadystatechange",
			function() {
				if(smtsymtt_body.readyState == "complete")
					smtsymtt_HideSrcTags();
			} );
	if(/WebKit|KHTML/i.test(navigator.userAgent))
	{
		var t = setInterval(function() {
					if(/loaded|complete/.test(document.readyState))
					{
						clearInterval(t);
						smtsymtt_HideSrcTags();
					}
				}, 10);
	}
}
function smtsymtt_HideSrcTags()
{
	if(!window.smtsymtt_HideSrcTags || window.smtsymtt_HideSrcTags.done)
		return;
	window.smtsymtt_HideSrcTags.done = true;
	if(!smtsymtt_HideSrcTagsRecurs(smtsymtt_body))
		smtsymtt_Err("There are HTML elements to be converted to sstooltips.\nIf you"
				+ " want these HTML elements to be automatically hidden, you"
				+ " must edit sstooltip.js, and set TagsToTip in the global"
				+ " tooltip configuration to true.", true);
}
function smtsymtt_HideSrcTagsRecurs(dad)
{
	var ovr, asT2t;
	// Walk the DOM tree for tags that have an onmouseover or onclick attribute
	// containing a TagToTip('...') call.
	// (.childNodes first since .children is bugous in Safari)
	var a = dad.childNodes || dad.children || null;

	for(var i = a ? a.length : 0; i;)
	{--i;
		if(!smtsymtt_HideSrcTagsRecurs(a[i]))
			return false;
		ovr = a[i].getAttribute ? (a[i].getAttribute("onmouseover") || a[i].getAttribute("onclick"))
				: (typeof a[i].onmouseover == "function") ? (a[i].onmouseover || a[i].onclick)
				: null;
		if(ovr)
		{
			asT2t = ovr.toString().match(/TagToTip\s*\(\s*'[^'.]+'\s*[\),]/);
			if(asT2t && asT2t.length)
			{
				if(!smtsymtt_HideSrcTag(asT2t[0]))
					return false;
			}
		}
	}
	return true;
}
function smtsymtt_HideSrcTag(sT2t)
{
	var id, el;

	// The ID passed to the found SSTagToTip() call identifies an HTML element
	// to be converted to a tooltip, so hide that element
	id = sT2t.replace(/.+'([^'.]+)'.+/, "$1");
	el = smtsymtt_GetElt(id);
	if(el)
	{
		if(smtsymtt_Debug && !smtsymTagsToTip)
			return false;
		else
			el.style.display = "none";
	}
	else
		smtsymtt_Err("Invalid ID\n'" + id + "'\npassed to TagToTip()."
				+ " There exists no HTML element with that ID.", true);
	return true;
}
function smtsymtt_SSTip(arg, t2t)
{

	smtsymtt_bJmpVert = false;
	smtsymtt_bJmpHorz = false;

	if(!smtsymtt_db || (smtsymtt_iState & 0x8))
		return;
	if(smtsymtt_iState)
		smtsymtt_Hide();
	if(!smtsymtt_Enabled)
		return;
	smtsymtt_t2t = t2t;
	if(!smtsymtt_ReadCmds(arg))
		return;

	smtsymtt_iState = 0x1 | 0x4;
	smtsymtt_AdaptConfig1();
	smtsymtt_MkTipContent(arg);
	smtsymtt_MkTipSubDivs();
	smtsymtt_FormatTip();


	smtsymtt_maxPosX = smtsymtt_GetClientW() + smtsymtt_GetScrollX() - smtsymtt_w - 1;
	smtsymtt_maxPosY = smtsymtt_GetClientH() + smtsymtt_GetScrollY() - smtsymtt_h - 1;

	smtsymtt_measure_width = 0;

	smtsymtt_AdaptConfig2();
	// Ensure the tip be shown and positioned before the first onmousemove
	smtsymtt_OverInit();
	smtsymtt_ShowInit();
	smtsymtt_Move();
}
function smtsymtt_ReadCmds(a)
{
	var i;

	// First load the global config values, to initialize also values
	// for which no command is passed
	i = 0;
	for(var j in smtsymconfig)
		smtsymtt_aV[i++] = smtsymconfig[j];
	// Then replace each cached config value for which a command is
	// passed (ensure the # of command args plus value args be even)
	if(a.length & 1)
	{
		for(i = a.length - 1; i > 0; i -= 2)
			smtsymtt_aV[a[i - 1]] = a[i];
		return true;
	}
	smtsymtt_Err("Incorrect call of Tip() or TagToTip().\n"
			+ "Each command must be followed by a value.", true);
	return false;
}
function smtsymtt_AdaptConfig1()
{
	smtsymtt_ExtCallFncs(0, "LoadConfig");
	// Inherit unspecified title formattings from body
	if(!smtsymtt_aV[SMTSYMTITLEBGCOLOR].length)
		smtsymtt_aV[SMTSYMTITLEBGCOLOR] = smtsymtt_aV[SMTSYMBORDERCOLOR];
	if(!smtsymtt_aV[SMTSYMTITLEFONTCOLOR].length)
		smtsymtt_aV[SMTSYMTITLEFONTCOLOR] = smtsymtt_aV[SMTSYMBGCOLOR];
	if(!smtsymtt_aV[SMTSYMTITLEFONTFACE].length)
		smtsymtt_aV[SMTSYMTITLEFONTFACE] = smtsymtt_aV[SMTSYMFONTFACE];
	if(!smtsymtt_aV[SMTSYMTITLEFONTSIZE].length)
		smtsymtt_aV[SMTSYMTITLEFONTSIZE] = smtsymtt_aV[SMTSYMFONTSIZE];
	if(smtsymtt_aV[SMTSYMCLOSEBTN])
	{
		// Use title colours for non-specified closebutton colours
		if(!smtsymtt_aV[SMTSYMCLOSEBTNCOLORS])
			smtsymtt_aV[SMTSYMCLOSEBTNCOLORS] = new Array("", "", "", "");
		for(var i = 4; i;)
		{--i;
			if(!smtsymtt_aV[SMTSYMCLOSEBTNCOLORS][i].length)
				smtsymtt_aV[SMTSYMCLOSEBTNCOLORS][i] = (i & 1) ? smtsymtt_aV[SMTSYMTITLEFONTCOLOR] : smtsymtt_aV[SMTSYMTITLEBGCOLOR];
		}
		// Enforce titlebar be shown
		if(!smtsymtt_aV[SMTSYMTITLE].length)
			smtsymtt_aV[SMTSYMTITLE] = " ";
	}
	// Circumvents broken display of images and fade-in flicker in Geckos < 1.8
	if(smtsymtt_aV[SMTSYMOPACITY] == 100 && typeof smtsymtt_aElt[0].style.MozOpacity != smtsymtt_u && !Array.every)
		smtsymtt_aV[SMTSYMOPACITY] = 99;
	// Smartly shorten the delay for fade-in tooltips
	if(smtsymtt_aV[SMTSYMFADEIN] && smtsymtt_flagOpa && smtsymtt_aV[SMTSYMDELAY] > 100)
		smtsymtt_aV[SMTSYMDELAY] = Math.max(smtsymtt_aV[SMTSYMDELAY] - smtsymtt_aV[SMTSYMFADEIN], 100);
}
function smtsymtt_AdaptConfig2()
{
	if(smtsymtt_aV[SMTSYMCENTERMOUSE])
	{
		smtsymtt_aV[SMTSYMOFFSETX] -= ((smtsymtt_w - (smtsymtt_aV[SMTSYMSHADOW] ? smtsymtt_aV[SMTSYMSHADOWWIDTH] : 0)) >> 1);
		smtsymtt_aV[SMTSYMJUMPHORZ] = false;
	}
}
// Expose content globally so extensions can modify it
function smtsymtt_MkTipContent(a)
{
	if(smtsymtt_t2t)
	{
		if(smtsymtt_aV[SMTSYMCOPYCONTENT]){
			smtsymtt_sContent = (smtsymtt_t2t.innerHTML.replace(/<!--/g,"")).replace(/-->/g,"");
			smtsymtt_sContent = (smtsymtt_sContent.replace(/<smartsymboldashes>/g,"--"));		
			smtsymtt_PureContent = smtsymtt_sContent;

//			smtsymtt_sContent = smtsymtt_t2t.innerHTML;
		} else
			smtsymtt_sContent = "";
	}
	else
		smtsymtt_sContent = a[0];
	smtsymtt_ExtCallFncs(0, "CreateContentString");
}
function smtsymtt_MkTipSubDivs()
{
	var sCss = 'position:relative;margin:0px;padding:0px;border-width:0px;left:0px;top:0px;line-height:normal;width:auto;',
	sTbTrTd = ' cellspacing="0" cellpadding="0" border="0" style="' + sCss + '"><tbody style="' + sCss + '"><tr><td ';

	smtsymtt_aElt[0].style.width = smtsymtt_GetClientW() + "px";
	smtsymtt_aElt[0].innerHTML =
		(''
		+ (smtsymtt_aV[SMTSYMTITLE].length ?
			('<div id="SmartSymbolsTiTl" style="position:relative;z-index:1;">'
			+ '<table id="SmartSymbolsTiTlTb"' + sTbTrTd + 'id="SmartSymbolsTiTlI" style="' + sCss + '">'
			+ smtsymtt_aV[SMTSYMTITLE]
			+ '</td>'
			+ (smtsymtt_aV[SMTSYMCLOSEBTN] ?
				('<td align="right" style="' + sCss
				+ 'text-align:right;">'
				+ '<span id="SmartSymbolsClOsE" style="position:relative;left:2px;padding-left:2px;padding-right:2px;'
				+ 'cursor:' + (smtsymtt_ie ? 'hand' : 'pointer')
				+ ';" onmouseover="smtsymtt_OnCloseBtnOver(1)" onmouseout="smtsymtt_OnCloseBtnOver(0)" onclick="smtsymtt_HideInit()">'
				+ smtsymtt_aV[SMTSYMCLOSEBTNTEXT]
				+ '</span></td>')
				: '')
			+ '</tr></tbody></table></div>')
			: '')
		+ '<div id="SmartSymbolsBoDy" onmouseout="smtsymtt_mouseout()" onmouseover="smtsymtt_mousein()" style="position:relative;z-index:0;">'
		+ '<table' + sTbTrTd + 'id="SmartSymbolsBoDyI"   style="' + sCss + '">'
		+ smtsymtt_sContent
		+ '</td></tr></tbody></table></div>'
		+ (smtsymtt_aV[SMTSYMSHADOW]
			? ('<div id="SmartSymbolsTtShDwR" style="position:absolute;overflow:hidden;"></div>'
				+ '<div id="SmartSymbolsTtShDwB" style="position:relative;overflow:hidden;"></div>')
			: '')
		 );
	smtsymtt_GetSubDivRefs();
	// Convert DOM node to tip
	if(smtsymtt_t2t && !smtsymtt_aV[SMTSYMCOPYCONTENT])
		smtsymtt_El2Tip();
	smtsymtt_ExtCallFncs(0, "SubDivsCreated");
}

function smtsymtt_mouseout()
{
	smtsymtt_MouseTracker = smtsymtt_CheckMouse; 	// MouseLeave
}


function smtsymtt_mousein()
{
	smtsymtt_MouseTracker = smtsymtt_MouseInPopup;	// Mousein

}


function smtsymtt_GetSubDivRefs()
{
	var aId = new Array("SmartSymbolsTiTl", "SmartSymbolsTiTlTb", "SmartSymbolsTiTlI", "SmartSymbolsClOsE", "SmartSymbolsBoDy", "SmartSymbolsBoDyI", "SmartSymbolsTtShDwB", "SmartSymbolsTtShDwR");

	for(var i = aId.length; i; --i)
		smtsymtt_aElt[i] = smtsymtt_GetElt(aId[i - 1]);
}
function smtsymtt_FormatTip()
{
	var css, w, h, pad = smtsymtt_aV[SMTSYMPADDING], padT, wBrd = smtsymtt_aV[SMTSYMBORDERWIDTH],
	iOffY, iOffSh, iAdd = (pad + wBrd) << 1;

	//--------- Title DIV ----------
	if(smtsymtt_aV[SMTSYMTITLE].length)
	{
		padT = smtsymtt_aV[SMTSYMTITLEPADDING];
		css = smtsymtt_aElt[1].style;
		css.background = smtsymtt_aV[SMTSYMTITLEBGCOLOR];
		css.paddingTop = css.paddingBottom = padT + "px";
		css.paddingLeft = css.paddingRight = (padT + 2) + "px";
		css = smtsymtt_aElt[3].style;
		css.color = smtsymtt_aV[SMTSYMTITLEFONTCOLOR];
		if(smtsymtt_aV[SMTSYMWIDTH] == -1)
			css.whiteSpace = "nowrap";
		css.fontFamily = smtsymtt_aV[SMTSYMTITLEFONTFACE];
		css.fontSize = smtsymtt_aV[SMTSYMTITLEFONTSIZE];
		css.fontWeight = "bold";
		css.textAlign = smtsymtt_aV[SMTSYMTITLEALIGN];
		// Close button DIV
		if(smtsymtt_aElt[4])
		{
			css = smtsymtt_aElt[4].style;
			css.background = smtsymtt_aV[SMTSYMCLOSEBTNCOLORS][0];
			css.color = smtsymtt_aV[SMTSYMCLOSEBTNCOLORS][1];
			css.fontFamily = smtsymtt_aV[SMTSYMTITLEFONTFACE];
			css.fontSize = smtsymtt_aV[SMTSYMTITLEFONTSIZE];
			css.fontWeight = "bold";
		}
		if(smtsymtt_aV[SMTSYMWIDTH] > 0)
			smtsymtt_w = smtsymtt_aV[SMTSYMWIDTH];
		else
		{
			smtsymtt_w = smtsymtt_GetDivW(smtsymtt_aElt[3]) + smtsymtt_GetDivW(smtsymtt_aElt[4]);
			// Some spacing between title DIV and closebutton
			if(smtsymtt_aElt[4])
				smtsymtt_w += pad;
			// Restrict auto width to max width
			if(smtsymtt_aV[SMTSYMWIDTH] < -1 && smtsymtt_w > -smtsymtt_aV[SMTSYMWIDTH])
				smtsymtt_w = -smtsymtt_aV[SMTSYMWIDTH];
		}
		// Ensure the top border of the body DIV be covered by the title DIV
		iOffY = -wBrd;
	}
	else
	{
		smtsymtt_w = 0;
		iOffY = 0;
	}

	//-------- Body DIV ------------
	css = smtsymtt_aElt[5].style;
	css.top = iOffY + "px";
	if(wBrd)
	{
		css.borderColor = smtsymtt_aV[SMTSYMBORDERCOLOR];
		css.borderStyle = smtsymtt_aV[SMTSYMBORDERSTYLE];
		css.borderWidth = wBrd + "px";
	}
	if(smtsymtt_aV[SMTSYMBGCOLOR].length)
		css.background = smtsymtt_aV[SMTSYMBGCOLOR];
	if(smtsymtt_aV[SMTSYMBGIMG].length)
		css.backgroundImage = "url(" + smtsymtt_aV[SMTSYMBGIMG] + ")";
	css.padding = pad + "px";
	css.textAlign = smtsymtt_aV[SMTSYMTEXTALIGN];
	if(smtsymtt_aV[SMTSYMHEIGHT])
	{
		css.overflow = "auto";
		if(smtsymtt_aV[SMTSYMHEIGHT] > 0)
			css.height = (smtsymtt_aV[SMTSYMHEIGHT] + iAdd) + "px";
		else
			smtsymtt_h = iAdd - smtsymtt_aV[SMTSYMHEIGHT];
	}
	// TD inside body DIV
	css = smtsymtt_aElt[6].style;
	css.color = smtsymtt_aV[SMTSYMFONTCOLOR];
	css.fontFamily = smtsymtt_aV[SMTSYMFONTFACE];
	css.fontSize = smtsymtt_aV[SMTSYMFONTSIZE];
	css.fontWeight = smtsymtt_aV[SMTSYMFONTWEIGHT];
	css.textAlign = smtsymtt_aV[SMTSYMTEXTALIGN];
	if(smtsymtt_aV[SMTSYMWIDTH] > 0)
		w = smtsymtt_aV[SMTSYMWIDTH];
	// Width like title (if existent)
	else if(smtsymtt_aV[SMTSYMWIDTH] == -1 && smtsymtt_w)
		w = smtsymtt_w;
	else
	{
		// Measure width of the body's inner TD, as some browsers would expand
		// the container and outer body DIV to 100%
		w = smtsymtt_GetDivW(smtsymtt_aElt[6]);
		// Restrict auto width to max width
		if(smtsymtt_aV[SMTSYMWIDTH] < -1 && w > -smtsymtt_aV[SMTSYMWIDTH])
			w = -smtsymtt_aV[SMTSYMWIDTH];
	}
	if(w > smtsymtt_w)
		smtsymtt_w = w;
	smtsymtt_w += iAdd;


	//--------- Shadow DIVs ------------
	if(smtsymtt_aV[SMTSYMSHADOW])
	{
		smtsymtt_w += smtsymtt_aV[SMTSYMSHADOWWIDTH];
		iOffSh = Math.floor((smtsymtt_aV[SMTSYMSHADOWWIDTH] * 4) / 3);
		// Bottom shadow
		css = smtsymtt_aElt[7].style;
		css.top = iOffY + "px";
		css.left = iOffSh + "px";
		css.width = (smtsymtt_w - iOffSh - smtsymtt_aV[SMTSYMSHADOWWIDTH]) + "px";
		css.height = smtsymtt_aV[SMTSYMSHADOWWIDTH] + "px";
		css.background = smtsymtt_aV[SMTSYMSHADOWCOLOR];
		// Right shadow
		css = smtsymtt_aElt[8].style;
		css.top = iOffSh + "px";
		css.left = (smtsymtt_w - smtsymtt_aV[SMTSYMSHADOWWIDTH]) + "px";
		css.width = smtsymtt_aV[SMTSYMSHADOWWIDTH] + "px";
		css.background = smtsymtt_aV[SMTSYMSHADOWCOLOR];
	}
	else
		iOffSh = 0;

	//-------- Container DIV -------
	smtsymtt_SetTipOpa(smtsymtt_aV[SMTSYMFADEIN] ? 0 : smtsymtt_aV[SMTSYMOPACITY]);
	smtsymtt_FixSize(iOffY, iOffSh);
}


// Fixate the size so it can't dynamically change while the tooltip is moving.
function smtsymtt_FixSize(iOffY, iOffSh)
{
	var wIn, wOut, h, add, pad = smtsymtt_aV[SMTSYMPADDING], wBrd = smtsymtt_aV[SMTSYMBORDERWIDTH], i;

	smtsymtt_aElt[0].style.width = smtsymtt_w + "px";
	smtsymtt_aElt[0].style.pixelWidth = smtsymtt_w;
	wOut = smtsymtt_w - ((smtsymtt_aV[SMTSYMSHADOW]) ? smtsymtt_aV[SMTSYMSHADOWWIDTH] : 0);
	// Body
	wIn = wOut;
	if(!smtsymtt_bBoxOld)
		wIn -= (pad + wBrd) << 1;
	smtsymtt_aElt[5].style.width = wIn + "px";
	// Title
	if(smtsymtt_aElt[1])
	{
		wIn = wOut - ((smtsymtt_aV[SMTSYMTITLEPADDING] + 2) << 1);
		if(!smtsymtt_bBoxOld)
			wOut = wIn;
		smtsymtt_aElt[1].style.width = wOut + "px";
		smtsymtt_aElt[2].style.width = wIn + "px";
	}
	// Max height specified
	if(smtsymtt_h)
	{
		h = smtsymtt_GetDivH(smtsymtt_aElt[5]);
		if(h > smtsymtt_h)
		{
			if(!smtsymtt_bBoxOld)
				smtsymtt_h -= (pad + wBrd) << 1;
			smtsymtt_aElt[5].style.height = smtsymtt_h + "px";
		}
	}
	smtsymtt_h = smtsymtt_GetDivH(smtsymtt_aElt[0]) + iOffY;
	// Right shadow
	if(smtsymtt_aElt[8])
		smtsymtt_aElt[8].style.height = (smtsymtt_h - iOffSh) + "px";
	i = smtsymtt_aElt.length - 1;
	if(smtsymtt_aElt[i])
	{
		smtsymtt_aElt[i].style.width = smtsymtt_w + "px";
		smtsymtt_aElt[i].style.height = smtsymtt_h + "px";
	}
}
function smtsymtt_DeAlt(el)
{
	var aKid;

	if(el)
	{
		if(el.alt)
			el.alt = "";
		if(el.title)
			el.title = "";
		aKid = el.childNodes || el.children || null;
		if(aKid)
		{
			for(var i = aKid.length; i;)
				smtsymtt_DeAlt(aKid[--i]);
		}
	}
}
// This hack removes the native tooltips over links in Opera
function smtsymtt_OpDeHref(el)
{
	if(!smtsymtt_op)
		return;
	if(smtsymtt_elDeHref)
		smtsymtt_OpReHref();
	while(el)
	{
		if(el.hasAttribute && el.hasAttribute("href"))
		{
			el.t_href = el.getAttribute("href");
			el.t_stats = window.status;
			el.removeAttribute("href");
			el.style.cursor = "hand";
			smtsymtt_AddEvtFnc(el, "mousedown", smtsymtt_OpReHref);
			window.status = el.t_href;
			smtsymtt_elDeHref = el;
			break;
		}
		el = smtsymtt_GetDad(el);
	}
}
function smtsymtt_OpReHref()
{
	if(smtsymtt_elDeHref)
	{
		smtsymtt_elDeHref.setAttribute("href", smtsymtt_elDeHref.t_href);
		smtsymtt_RemEvtFnc(smtsymtt_elDeHref, "mousedown", smtsymtt_OpReHref);
		window.status = smtsymtt_elDeHref.t_stats;
		smtsymtt_elDeHref = null;
	}
}
function smtsymtt_El2Tip()
{
	var css = smtsymtt_t2t.style;

	// Store previous positioning
	smtsymtt_t2t.t_cp = css.position;
	smtsymtt_t2t.t_cl = css.left;
	smtsymtt_t2t.t_ct = css.top;
	smtsymtt_t2t.t_cd = css.display;
	// Store the tag's parent element so we can restore that DOM branch
	// when the tooltip is being hidden
	smtsymtt_t2tDad = smtsymtt_GetDad(smtsymtt_t2t);
	smtsymtt_MovDomNode(smtsymtt_t2t, smtsymtt_t2tDad, smtsymtt_aElt[6]);
	css.display = "block";
	css.position = "static";
	css.left = css.top = css.marginLeft = css.marginTop = "0px";
}
function smtsymtt_UnEl2Tip()
{
	// Restore positioning and display
	var css = smtsymtt_t2t.style;

	css.display = smtsymtt_t2t.t_cd;
	smtsymtt_MovDomNode(smtsymtt_t2t, smtsymtt_GetDad(smtsymtt_t2t), smtsymtt_t2tDad);
	css.position = smtsymtt_t2t.t_cp;
	css.left = smtsymtt_t2t.t_cl;
	css.top = smtsymtt_t2t.t_ct;
	smtsymtt_t2tDad = null;
}
function smtsymtt_OverInit()
{
	if(window.event)
		smtsymtt_over = window.event.target || window.event.srcElement;
	else
		smtsymtt_over = smtsymtt_ovr_;
	smtsymtt_DeAlt(smtsymtt_over);
	smtsymtt_OpDeHref(smtsymtt_over);
}
function smtsymtt_ShowInit()
{
	smtsymtt_tShow.Timer("smtsymtt_Show()", smtsymtt_aV[SMTSYMDELAY], true);
	if(smtsymtt_aV[SMTSYMCLICKCLOSE] || smtsymtt_aV[SMTSYMCLICKSTICKY])
		smtsymtt_AddEvtFnc(document, "mouseup", smtsymtt_OnLClick);
}
function smtsymtt_Show()
{

	var css = smtsymtt_aElt[0].style;
	smtsymtt_start_time = new Date().getTime();
	// Override the z-index of the topmost wz_dragdrop.js D&D item
	css.zIndex = Math.max((window.dd && dd.z) ? (dd.z + 2) : 0, 1010);
	if(smtsymtt_aV[SMTSYMSTICKY] || !smtsymtt_aV[SMTSYMFOLLOWMOUSE])
		smtsymtt_iState &= ~0x4;
	if(smtsymtt_aV[SMTSYMEXCLUSIVE])
		smtsymtt_iState |= 0x8;
	if(smtsymtt_aV[SMTSYMDURATION] > 0)
		smtsymtt_tDurt.Timer("smtsymtt_HideInit()", smtsymtt_aV[SMTSYMDURATION], true);
	smtsymtt_ExtCallFncs(0, "Show")
	css.visibility = "visible";
	smtsymtt_iState |= 0x2;
	if(smtsymtt_aV[SMTSYMFADEIN])
		smtsymtt_Fade(0, 0, smtsymtt_aV[SMTSYMOPACITY], Math.round(smtsymtt_aV[SMTSYMFADEIN] / smtsymtt_aV[SMTSYMFADEINTERVAL]));
	smtsymtt_ShowIfrm();
}
function smtsymtt_ShowIfrm()
{
	if(smtsymtt_ie56)
	{
		var ifrm = smtsymtt_aElt[smtsymtt_aElt.length - 1];
		if(ifrm)
		{
			var css = ifrm.style;
			css.zIndex = smtsymtt_aElt[0].style.zIndex - 1;
			css.display = "block";
		}
	}
}



function smtsymtt_Move(e)
{
	if(e)
		smtsymtt_ovr_ = e.target || e.srcElement;
	e = e || window.event;
	if(e)
	{
		smtsymtt_musX = smtsymtt_GetEvtX(e);
		smtsymtt_musY = smtsymtt_GetEvtY(e);
	}
	if(smtsymtt_iState & 0x4)
	{
		// Prevent jam of mousemove events
		if(!smtsymtt_op && !smtsymtt_ie)
		{
			if(smtsymtt_bWait)
				return;
			smtsymtt_bWait = true;
			smtsymtt_tWaitMov.Timer("smtsymtt_bWait = false;", 1, true);
		}

		smtsymtt_MouseTracker = smtsymtt_MouseInParent;

		if(smtsymtt_aV[SMTSYMFIXXY])
			smtsymtt_PosFixXY();				// Override current mouse position

		if(smtsymtt_aV[SMTSYMFIX])
		{
			smtsymtt_iState &= ~0x4;
			smtsymtt_PosFix();
		} else if(!smtsymtt_ExtCallFncs(e, "MoveBefore")) {
			smtsymtt_bJmpHorz = false;
			smtsymtt_bJmpVert = false;
								
			if (smtsymtt_aV[SMTSYMPOPRIGHT] || smtsymtt_aV[SMTSYMPOPLEFT]) {
				smtsymtt_aV[SMTSYMJUMPHORZ]	= true;
				smtsymtt_aV[SMTSYMJUMPVERT] = false;
				smtsymtt_aV[SMTSYMOFFSETY] = -1 * (smtsymtt_h * 0.5);		// Half the height of popup
				if (smtsymtt_aV[SMTSYMPOPLEFT]) {
					smtsymtt_aV[SMTSYMOFFSETX] =  (-1 * smtsymtt_w) - smtsymtt_measure_width;		// size of popup + arrow
				} else {
					smtsymtt_aV[SMTSYMOFFSETX] =  0;		// size of popup + arrow
				}
			} else {
				smtsymtt_aV[SMTSYMOFFSETX] =  (-1 * smtsymtt_w/2);	// size of popup + arrow
				smtsymtt_aV[SMTSYMOFFSETY] = 0;			
				smtsymtt_aV[SMTSYMJUMPHORZ]	= false;
				smtsymtt_aV[SMTSYMJUMPVERT] = true;

				if (smtsymtt_aV[SMTSYMPOPTOP]) {
					smtsymtt_aV[SMTSYMABOVE] = false;
				} else
					smtsymtt_aV[SMTSYMABOVE] = false;
			}

			smtsymtt_SetTipPos(smtsymtt_Pos(0), smtsymtt_Pos(1));
		}


		smtsymtt_ExtCallFncs([smtsymtt_musX, smtsymtt_musY], "MoveAfter"); 
	} else if((smtsymtt_aV[SMTSYMSTICKY] && (smtsymtt_iState & 0x2)))						// Popup is displayed, now track mouse out events
	{
		if(smtsymtt_MouseTracker == smtsymtt_MouseInTransition)
			smtsymtt_MouseTracker = smtsymtt_CheckMouse;						// Assume mouse out, let next mouse event decide what happens
		else if(smtsymtt_MouseTracker == smtsymtt_CheckMouse)						// Is mouse in bounds of popup?  Hide popup if not.
		{
			if ((smtsymtt_musX < smtsymtt_x) || (smtsymtt_musX > (smtsymtt_x + smtsymtt_w)) || (smtsymtt_musY < smtsymtt_y) || (smtsymtt_musY > (smtsymtt_y + smtsymtt_h)))
				smtsymtt_HideInit();
		}
	}
}


function smtsymtt_Pos(iDim)
{
	var iX, bJmpMod, cmdAlt, cmdOff, cx, iMax, iScrl, iMus, bJmp;



	// Map values according to dimension to calculate
	if(iDim)
	{
		bJmpMod = smtsymtt_aV[SMTSYMJUMPVERT];
		cmdAlt = smtsymtt_aV[SMTSYMABOVE];
		cx = smtsymtt_h;
		cmdOff = SMTSYMOFFSETY;
		iMax = smtsymtt_maxPosY;
		iScrl = smtsymtt_GetScrollY();
		iMus = smtsymtt_musY;
		bJmp = smtsymtt_bJmpVert;
	}
	else
	{
		bJmpMod = smtsymtt_aV[SMTSYMJUMPHORZ];
		cmdAlt = smtsymtt_aV[SMTSYMLEFT];
		cx = smtsymtt_w;
		cmdOff = SMTSYMOFFSETX;
		iMax = smtsymtt_maxPosX;
		iScrl = smtsymtt_GetScrollX();
		iMus = smtsymtt_musX;				// mouse location
		bJmp = smtsymtt_bJmpHorz;
	}

	if(bJmpMod)
	{
		if (smtsymtt_aV[SMTSYMPOPLEFT] || smtsymtt_aV[SMTSYMPOPRIGHT]) { 
			if (smtsymtt_aV[SMTSYMPOPLEFT] && !bJmp && smtsymtt_CalcPosDef(iDim) < 1) {  
				iX = smtsymtt_PosAlt(iDim);
// causes bug	smtsymtt_aV[SMTSYMPOPLEFT] = false;
//				smtsymtt_aV[SMTSYMPOPRIGHT] = true;
				smtsymtt_bJmpHorz = true;
			} else if (smtsymtt_aV[SMTSYMPOPRIGHT] && !bJmp && smtsymtt_CalcPosDef(iDim) > iMax) {  
				iX = smtsymtt_PosAlt(iDim);
//				smtsymtt_aV[SMTSYMPOPLEFT] = true;
//				smtsymtt_aV[SMTSYMPOPRIGHT] = false;
				smtsymtt_bJmpHorz = true;
			} else {
				smtsymtt_bJmpHorz = false;
				iX = smtsymtt_PosDef(iDim);
			}
		} else 	if (smtsymtt_aV[SMTSYMPOPTOP] || smtsymtt_aV[SMTSYMPOPBOTTOM]) { 

			if(smtsymtt_aV[SMTSYMPOPTOP] && (!bJmp || smtsymtt_CalcPosAlt(iDim) >= iScrl + 16)) {
				iX = smtsymtt_PosAlt(iDim);
				smtsymtt_aV[SMTSYMPOPTOP] = false;
				smtsymtt_aV[SMTSYMPOPBOTTOM] = true;
				smtsymtt_bJmpVert = true;
			} else if(smtsymtt_aV[SMTSYMPOPBOTTOM] && bJmp && smtsymtt_CalcPosDef(iDim) > iMax - 16) {
				iX = smtsymtt_PosAlt(iDim);
				smtsymtt_aV[SMTSYMPOPTOP] = true;
				smtsymtt_aV[SMTSYMPOPBOTTOM] = false;
				smtsymtt_bJmpVert = true;
			} else {
				smtsymtt_bJmpVert = false;
				iX = smtsymtt_PosDef(iDim);
			}
		} else 	{ 

			if(cmdAlt && (!bJmp || smtsymtt_CalcPosAlt(iDim) >= iScrl + 16)) {
				iX = smtsymtt_PosAlt(iDim);
			} else if(!cmdAlt && bJmp && smtsymtt_CalcPosDef(iDim) > iMax - 16) {
				iX = smtsymtt_PosAlt(iDim);
	
			} else {
				iX = smtsymtt_PosDef(iDim);
			}
		}
	}
	else
	{

		iX = iMus;
		if(cmdAlt)
			iX -= cx + smtsymtt_aV[cmdOff] - (smtsymtt_aV[SMTSYMSHADOW] ? smtsymtt_aV[SMTSYMSHADOWWIDTH] : 0);
		else
			iX += smtsymtt_aV[cmdOff];


	}

	// Prevent tip from extending past clientarea boundary
	if(iX > iMax) {
		iX = bJmpMod ? smtsymtt_PosAlt(iDim) : iMax;
	}
	// In case of insufficient space on both sides, ensure the left/upper part
	// of the tip be visible

	if(iX < iScrl) {
		iX = bJmpMod ? smtsymtt_PosDef(iDim) : iScrl;
	}


	if (smtsymtt_aV[SMTSYMPOPRIGHT] || smtsymtt_aV[SMTSYMPOPLEFT]) {
		if(!iDim && smtsymtt_bJmpHorz) {
			smtsymtt_musX = smtsymtt_musX - smtsymtt_measure_width;
			iX -= smtsymtt_measure_width;
		}
	} else {
		if(iDim && smtsymtt_bJmpVert) {
			smtsymtt_musY = smtsymtt_musY - smtsymtt_measure_height;
		}
	}

	return iX;
}


function smtsymtt_PosDef(iDim)
{
	if(iDim)
		smtsymtt_bJmpVert = smtsymtt_aV[SMTSYMABOVE];
	else
		smtsymtt_bJmpHorz = smtsymtt_aV[SMTSYMLEFT];
	return smtsymtt_CalcPosDef(iDim);
}
function smtsymtt_PosAlt(iDim)
{
	if(iDim)
		smtsymtt_bJmpVert = !smtsymtt_aV[SMTSYMABOVE];
	else
		smtsymtt_bJmpHorz = !smtsymtt_aV[SMTSYMLEFT];

	return smtsymtt_CalcPosAlt(iDim);
}

function smtsymtt_CalcPosDef(iDim)
{
	return iDim ? (smtsymtt_musY + smtsymtt_aV[SMTSYMOFFSETY]) : (smtsymtt_musX + smtsymtt_aV[SMTSYMOFFSETX]);
}

function smtsymtt_CalcPosAlt(iDim)
{
	var cmdOff = iDim ? SMTSYMOFFSETY : SMTSYMOFFSETX;
	var dx = smtsymtt_aV[cmdOff] - (smtsymtt_aV[SMTSYMSHADOW] ? smtsymtt_aV[SMTSYMSHADOWWIDTH] : 0);

	if(smtsymtt_aV[cmdOff] > 0 && dx <= 0)
	dx = 1;
	return((iDim ? ((smtsymtt_musY - smtsymtt_h) - smtsymtt_measure_height) : (smtsymtt_musX - smtsymtt_w)) - dx);
}


function smtsymtt_PosFix()
{
	var iX, iY;

	if(typeof(smtsymtt_aV[SMTSYMFIX][0]) == "number")
	{
		iX = smtsymtt_aV[SMTSYMFIX][0];
		iY = smtsymtt_aV[SMTSYMFIX][1];
	}
	else
	{
		if(typeof(smtsymtt_aV[SMTSYMFIX][0]) == "string")
			el = smtsymtt_GetElt(smtsymtt_aV[SMTSYMFIX][0]);
		// First slot in array is direct reference to HTML element
		else
			el = smtsymtt_aV[SMTSYMFIX][0];
		iX = smtsymtt_aV[SMTSYMFIX][1];
		iY = smtsymtt_aV[SMTSYMFIX][2];
		// By default, vert pos is related to bottom edge of HTML element
		if(!smtsymtt_aV[SMTSYMABOVE] && el)
			iY += smtsymtt_GetDivH(el);
		for(; el; el = el.offsetParent)
		{
			iX += el.offsetLeft || 0;
			iY += el.offsetTop || 0;
		}

		for(; el2; el2 = el2.parentNode)
		{
			iX -= el2.scrollLeft || 0;

		}
	}
	// For a fixed tip positioned above the mouse, use the bottom edge as anchor
	// (recommended by Christophe Rebeschini, 31.1.2008)
	if(smtsymtt_aV[SMTSYMABOVE])
		iY -= smtsymtt_h;
	smtsymtt_SetTipPos(iX, iY);
}

//
//  override mouse position
//


function smtsymtt_PosFixXY()
{
	var iX, iY;

	if(typeof(smtsymtt_aV[SMTSYMFIXXY][0]) == "number")
	{
		iX = smtsymtt_aV[SMTSYMFIXXY][0];
		iY = smtsymtt_aV[SMTSYMFIXXY][1];
	}
	else
	{
		if(typeof(smtsymtt_aV[SMTSYMFIXXY][0]) == "string")
			el = smtsymtt_GetElt(smtsymtt_aV[SMTSYMFIXXY][0]);
		// First slot in array is direct reference to HTML element
		else
			el = smtsymtt_aV[SMTSYMFIXXY][0];

		iX = smtsymtt_aV[SMTSYMFIXXY][1];
		iY = smtsymtt_aV[SMTSYMFIXXY][2];

		smtsymtt_measure_height = smtsymtt_GetDivH(el); 		// size of current div
		smtsymtt_measure_width = smtsymtt_GetDivW(el); 		// size of current div


		if (smtsymtt_aV[SMTSYMPOPRIGHT] || smtsymtt_aV[SMTSYMPOPLEFT]) {
			iY += (smtsymtt_measure_height/2);			// center mouse on middle of div
			iX += smtsymtt_measure_width;				// default location is always side of div
		} else {
			iY += smtsymtt_measure_height;			// default location is always bottom of div
			iX += (smtsymtt_measure_width/2);			// center mouse on middle of div
		}


		for(; el; el = el.offsetParent)				// add top left corner location
		{

			if (el.className.substring(0,27) == "ss_icon_scrolling_container") { //hack to work around IE7 bug
				iX -= el.scrollLeft || 0;			// add scrolling effects
				iY -= el.scrollTop || 0;
			}

			iX += el.offsetLeft || 0;
			iY += el.offsetTop || 0;
		}
	}

	smtsymtt_musX = iX;							// Override mouse location
	smtsymtt_musY = iY;

}



function smtsymtt_Fade(a, now, z, n)
{
	if(n)
	{
		now += Math.round((z - now) / n);
		if((z > a) ? (now >= z) : (now <= z))
			now = z;
		else
			smtsymtt_tFade.Timer(
				"smtsymtt_Fade("
				+ a + "," + now + "," + z + "," + (n - 1)
				+ ")",
				smtsymtt_aV[SMTSYMFADEINTERVAL],
				true
			);
	}
	now ? smtsymtt_SetTipOpa(now) : smtsymtt_Hide();
}
function smtsymtt_SetTipOpa(opa)
{
	// To circumvent the opacity nesting flaws of IE, we set the opacity
	// for each sub-DIV separately, rather than for the container DIV.
	smtsymtt_SetOpa(smtsymtt_aElt[5], opa);
	if(smtsymtt_aElt[1])
		smtsymtt_SetOpa(smtsymtt_aElt[1], opa);
	if(smtsymtt_aV[SMTSYMSHADOW])
	{
		opa = Math.round(opa * 0.8);
		smtsymtt_SetOpa(smtsymtt_aElt[7], opa);
		smtsymtt_SetOpa(smtsymtt_aElt[8], opa);
	}
}
function smtsymtt_OnCloseBtnOver(iOver)
{
	var css = smtsymtt_aElt[4].style;

	iOver <<= 1;
	css.background = smtsymtt_aV[SMTSYMCLOSEBTNCOLORS][iOver];
	css.color = smtsymtt_aV[SMTSYMCLOSEBTNCOLORS][iOver + 1];
}
function smtsymtt_OnLClick(e)
{
	//  Ignore right-clicks
	e = e || window.event;
	if(!((e.button && e.button & 2) || (e.which && e.which == 3)))
	{
		if(smtsymtt_aV[SMTSYMCLICKSTICKY] && (smtsymtt_iState & 0x4))
		{
			smtsymtt_aV[SMTSYMSTICKY] = true;
			smtsymtt_iState &= ~0x4;
		}
		else if(smtsymtt_aV[SMTSYMCLICKCLOSE])
			smtsymtt_HideInit();
	}
}
function smtsymtt_Int(x)
{
	var y;

	return(isNaN(y = parseInt(x)) ? 0 : y);
}
Number.prototype.Timer = function(s, iT, bUrge)
{
	if(!this.value || bUrge)
		this.value = window.setTimeout(s, iT);
}
Number.prototype.EndTimer = function()
{
	if(this.value)
	{
		window.clearTimeout(this.value);
		this.value = 0;
	}
}
function smtsymtt_GetWndCliSiz(s)
{
	var db, y = window["inner" + s], sC = "client" + s, sN = "number";
	if(typeof y == sN)
	{
		var y2;
		return(
			// Gecko or Opera with scrollbar
			// ... quirks mode
			((db = document.body) && typeof(y2 = db[sC]) == sN && y2 &&  y2 <= y) ? y2 
			// ... strict mode
			: ((db = document.documentElement) && typeof(y2 = db[sC]) == sN && y2 && y2 <= y) ? y2
			// No scrollbar, or clientarea size == 0, or other browser (KHTML etc.)
			: y
		);
	}
	// IE
	return(
		// document.documentElement.client+s functional, returns > 0
		((db = document.documentElement) && (y = db[sC])) ? y
		// ... not functional, in which case document.body.client+s 
		// is the clientarea size, fortunately
		: document.body[sC]
	);
}
function smtsymtt_SetOpa(el, opa)
{
	var css = el.style;

	smtsymtt_opa = opa;
	if(smtsymtt_flagOpa == 1)
	{
		if(opa < 100)
		{
			// Hacks for bugs of IE:
			// 1.) Once a CSS filter has been applied, fonts are no longer
			// anti-aliased, so we store the previous 'non-filter' to be
			// able to restore it
			if(typeof(el.filtNo) == smtsymtt_u)
				el.filtNo = css.filter;
			// 2.) A DIV cannot be made visible in a single step if an
			// opacity < 100 has been applied while the DIV was hidden
			var bVis = css.visibility != "hidden";
			// 3.) In IE6, applying an opacity < 100 has no effect if the
			//	   element has no layout (position, size, zoom, ...)
			css.zoom = "100%";
			if(!bVis)
				css.visibility = "visible";
			css.filter = "alpha(opacity=" + opa + ")";
			if(!bVis)
				css.visibility = "hidden";
		}
		else if(typeof(el.filtNo) != smtsymtt_u)
			// Restore 'non-filter'
			css.filter = el.filtNo;
	}
	else
	{
		opa /= 100.0;
		switch(smtsymtt_flagOpa)
		{
		case 2:
			css.KhtmlOpacity = opa; break;
		case 3:
			css.KHTMLOpacity = opa; break;
		case 4:
			css.MozOpacity = opa; break;
		case 5:
			css.opacity = opa; break;
		}
	}
}
function smtsymtt_Err(sErr, bIfDebug)
{
	if(smtsymtt_Debug || !bIfDebug)
		alert("SmartSymbols Message:\n\n" + sErr);
}

//============  EXTENSION (PLUGIN) MANAGER  ===============//
function smtsymtt_ExtCmdEnum()
{
	var s;

	// Add new command(s) to the commands enum
	for(var i in smtsymconfig)
	{
		s = "window." + i.toString().toUpperCase();
		if(eval("typeof(" + s + ") == smtsymtt_u"))
		{
			eval(s + " = " + smtsymtt_aV.length);
			smtsymtt_aV[smtsymtt_aV.length] = null;
		}
	}
}
function smtsymtt_ExtCallFncs(arg, sFnc)
{
	var b = false;
	for(var i = smtsymtt_aExt.length; i;)
	{--i;
		var fnc = smtsymtt_aExt[i]["On" + sFnc];
		// Call the method the extension has defined for this event
		if(fnc && fnc(arg))
			b = true;
	}
	return b;
}
/**********************************************************************************/
//===================  GLOBAL TOOLTIP CONFIGURATION  =========================//
smtsymconfig. smtsymBalloon			= false	// true or false - set to true if you want this to be the default behaviour
smtsymconfig. smtsymBalloonImgPath	= "http://www.smartsymbols.com/.dev/j2g/images/" // Path to images (border, corners, stem), in quotes. Path must be relative to your HTML file.
// Sizes of balloon images
smtsymconfig. smtsymBalloonEdgeSize	= 6		// Integer - sidelength of quadratic corner images
smtsymconfig. smtsymBalloonStemWidth	= 30	// Integer
smtsymconfig. smtsymBalloonStemHeight	= 45	// Integer
smtsymconfig. smtsymBalloonStemOffset	= 0 // Integer - horizontal offset of left stem edge from mouse (recommended: -stemwidth/2 to center the stem above the mouse)
smtsymconfig. smtsymBalloonImgExt		= "gif";// File name extension of default balloon images, e.g. "gif" or "png"
//=======  END OF TOOLTIP CONFIG, DO NOT CHANGE ANYTHING BELOW  ==============//

var smtsymballoon = new smtsymtt_Extension();

// Implement extension eventhandlers on which our extension should react

smtsymballoon.OnLoadConfig = function()
{
	if(smtsymtt_aV[SMTSYMBALLOON])
	{
		// Turn off native style properties which are not appropriate
		smtsymballoon.padding = Math.max(smtsymtt_aV[SMTSYMPADDING] - smtsymtt_aV[SMTSYMBALLOONEDGESIZE], 0);
		smtsymballoon.width = smtsymtt_aV[SMTSYMWIDTH];
		//if(smtsymtt_bBoxOld)
		//	balloon.width += (balloon.padding << 1);
		smtsymtt_aV[SMTSYMBORDERWIDTH] = 0;
		smtsymtt_aV[SMTSYMWIDTH] = 0;
		smtsymtt_aV[SMTSYMPADDING] = 0;
		smtsymtt_aV[SMTSYMBGCOLOR] = "";
		smtsymtt_aV[SMTSYMBGIMG] = "";
		smtsymtt_aV[SMTSYMSHADOW] = false;
		// Append slash to img path if missing
		if(smtsymtt_aV[SMTSYMBALLOONIMGPATH].charAt(smtsymtt_aV[SMTSYMBALLOONIMGPATH].length - 1) != '/')
			smtsymtt_aV[SMTSYMBALLOONIMGPATH] += "/";
		return true;
	}
	return false;
};
smtsymballoon.OnCreateContentString = function()
{
	if(!smtsymtt_aV[SMTSYMBALLOON])
		return false;
		
	var aImg, sImgZ, sCssCrn, sVaT, sVaB, sCss0;

	// Cache balloon images in advance:
	// Either use the pre-cached default images...
	if(smtsymtt_aV[SMTSYMBALLOONIMGPATH] == smtsymconfig.SMTSYMBALLOONIMGPATH)
		aImg = smtsymballoon.aDefImg;
	// ...or load images from different directory
	else
		aImg = smtsymBalloon_CacheImgs(smtsymtt_aV[SMTSYMBALLOONIMGPATH], smtsymtt_aV[SMTSYMBALLOONIMGEXT]);
	sCss0 = 'padding:0;margin:0;border:0;line-height:0;overflow:hidden;';
	sCssCrn = ' style="position:relative;width:' + smtsymtt_aV[SMTSYMBALLOONEDGESIZE] + 'px;' + sCss0 + 'overflow:hidden;';
	sVaT = 'vertical-align:top;" valign="top"';
	sVaB = 'vertical-align:bottom;" valign="bottom"';
	sImgZ = '" style="' + sCss0 + '" />';

	if (smtsymtt_aV[SMTSYMPOPRIGHT] || smtsymtt_aV[SMTSYMPOPLEFT]) {
		sRowSpan ='rowspan="2"';
	} else { 
		sRowSpan  = '';
	}

	if (smtsymtt_aV[SMTSYMPOPRIGHT] || smtsymtt_aV[SMTSYMPOPLEFT] ) {
		smtsymtt_aV[SMTSYMBALLOONSTEMHEIGHT] = 30;
		smtsymtt_aV[SMTSYMBALLOONSTEMWIDTH] = 45;
	smtsymtt_sContent = '<table border="0" cellpadding="0" cellspacing="0" style="width:auto;padding:0;margin:0;left:0;top:0;"><tr>'
		+ '<td valign="top" '+sRowSpan+' style="position:relative;' + sCss0 + '">'
		+ '<img id="smtsymbALlOOnT"  style="position:relative;top:1px;z-index:1;display:none;' + sCss0 + '" src="' + aImg[12].src + '" width="' + smtsymtt_aV[SMTSYMBALLOONSTEMWIDTH] + '" height="' + smtsymtt_aV[SMTSYMBALLOONSTEMHEIGHT] + '" />'
		+ '</td>'
		+ '<td id="smtsymbALlO0nBdY" style="position:relative;line-height:normal;background-repeat:repeat;'
		+ ';background-image:url(' + aImg[0].src + ')'
		+ ';color:' + smtsymtt_aV[SMTSYMFONTCOLOR]
		+ ';font-family:' + smtsymtt_aV[SMTSYMFONTFACE]
		+ ';font-size:' + smtsymtt_aV[SMTSYMFONTSIZE]
		+ ';font-weight:' + smtsymtt_aV[SMTSYMFONTWEIGHT]
		+ ';text-align:' + smtsymtt_aV[SMTSYMTEXTALIGN]
		+ ';padding:' + smtsymballoon.padding + 'px'
		+ ';width:' + ((smtsymballoon.width > 0) ? (smtsymballoon.width + 'px') : 'auto')
		+ ';">' + smtsymtt_sContent + '</td>'
		+ '<td valign="top" '+sRowSpan+' style="position:relative;' + sCss0 + '">'
		+ '<img id="smtsymbALlOOnB" style="position:relative;top:-1px;left:2px;z-index:1;display:none;' + sCss0 + '" src="' + aImg[11].src + '" width="' + smtsymtt_aV[SMTSYMBALLOONSTEMWIDTH] + '" height="' + smtsymtt_aV[SMTSYMBALLOONSTEMHEIGHT] + '" />'
		+ '</td>'
		+ '</tr></table>';//alert(smtsymtt_sContent);
	} else
	smtsymtt_sContent = '<table border="0" cellpadding="0" cellspacing="0" style="width:auto;padding:0;margin:0;left:0;top:0;"><tr>'
		+ '<td valign="bottom" '+sRowSpan+' style="position:relative;' + sCss0 + '">'
		+ '<img id="smtsymbALlOOnT"  style="position:relative;top:1px;z-index:1;display:none;' + sCss0 + '" src="' + aImg[9].src + '" width="' + smtsymtt_aV[SMTSYMBALLOONSTEMWIDTH] + '" height="' + smtsymtt_aV[SMTSYMBALLOONSTEMHEIGHT] + '" />'
		+ '</td>'
		+ '</tr><tr>'
		+ '<td id="bALlO0nBdY" style="position:relative;line-height:normal;background-repeat:repeat;'
		+ ';background-image:url(' + aImg[0].src + ')'
		+ ';color:' + smtsymtt_aV[SMTSYMFONTCOLOR]
		+ ';font-family:' + smtsymtt_aV[SMTSYMFONTFACE]
		+ ';font-size:' + smtsymtt_aV[SMTSYMFONTSIZE]
		+ ';font-weight:' + smtsymtt_aV[SMTSYMFONTWEIGHT]
		+ ';text-align:' + smtsymtt_aV[SMTSYMTEXTALIGN]
		+ ';padding:' + smtsymballoon.padding + 'px'
		+ ';width:' + ((smtsymballoon.width > 0) ? (smtsymballoon.width + 'px') : 'auto')
		+ ';">' + smtsymtt_sContent + '</td>'
		+ '</tr><tr>'
		+ '<td valign="top" '+sRowSpan+' style="position:relative;' + sCss0 + '">'
		+ '<img id="smtsymbALlOOnB" style="position:relative;top:-1px;left:2px;z-index:1;display:none;' + sCss0 + '" src="' + aImg[10].src + '" width="' + smtsymtt_aV[SMTSYMBALLOONSTEMWIDTH] + '" height="' + smtsymtt_aV[SMTSYMBALLOONSTEMHEIGHT] + '" />'
		+ '</td>'
		+ '</tr></table>';//alert(smtsymtt_sContent);
	return true;
};
smtsymballoon.OnSubDivsCreated = function()
{
	if(smtsymtt_aV[SMTSYMBALLOON])
	{
		var bdy = smtsymtt_GetElt("bALlO0nBdY");

		// Insert a TagToTip() HTML element into the central body TD
		if (smtsymtt_t2t && !smtsymtt_aV[SMTSYMCOPYCONTENT] && bdy)
			smtsymtt_MovDomNode(smtsymtt_t2t, smtsymtt_GetDad(smtsymtt_t2t), bdy);
		smtsymballoon.iStem = (smtsymtt_aV[SMTSYMABOVE] * 1) || (smtsymtt_aV[SMTSYMPOPLEFT] * 1);
		smtsymballoon.aStem = [smtsymtt_GetElt("smtsymbALlOOnT"), smtsymtt_GetElt("smtsymbALlOOnB")];
		smtsymballoon.aStem[smtsymballoon.iStem].style.display = "inline";
		if (smtsymballoon.width < -1)
			smtsymBalloon_MaxW(bdy);
		return true;
	}
	return false;
};
// Display the stem appropriately
smtsymballoon.OnMoveAfter = function()
{
	if(smtsymtt_aV[SMTSYMBALLOON])
	{

		var iStem =  ((smtsymtt_aV[SMTSYMABOVE] != smtsymtt_bJmpVert) * 1) || ((smtsymtt_aV[SMTSYMPOPLEFT] != smtsymtt_bJmpHorz) * 1);

		// Tooltip position vertically flipped?
		if(iStem != smtsymballoon.iStem)
		{
			// Display opposite stem
			smtsymballoon.aStem[smtsymballoon.iStem].style.display = "none";
			smtsymballoon.aStem[iStem].style.display = "inline";
			smtsymballoon.iStem = iStem;
		} 
		
		smtsymballoon.aStem[iStem].style.left = smtsymBalloon_CalcStemX() + "px";				// offset for horizontal smartsymbols
		smtsymballoon.aStem[iStem].style.top = smtsymBalloon_CalcStemY() + "px";				// offset for vertical smartsymbols
		return true;
	}
	return false;
};
function smtsymBalloon_CalcStemX()
{
	if (smtsymtt_aV[SMTSYMPOPRIGHT] || smtsymtt_aV[SMTSYMPOPLEFT]) {
		return 0;
	} else {
		var x = smtsymtt_musX - smtsymtt_x + smtsymtt_aV[SMTSYMBALLOONSTEMOFFSET] - smtsymtt_aV[SMTSYMBALLOONEDGESIZE];
		return Math.max(Math.min(x, smtsymtt_w - smtsymtt_aV[SMTSYMBALLOONSTEMWIDTH] - (smtsymtt_aV[SMTSYMBALLOONEDGESIZE] << 1) - 2), 2);
	}
}

function smtsymBalloon_CalcStemY()
{
	if (smtsymtt_aV[SMTSYMPOPRIGHT] || smtsymtt_aV[SMTSYMPOPLEFT]) {
		var y = smtsymtt_musY - smtsymtt_y;
		return y;
	} else {
		return 0;
	}
}

function smtsymBalloon_CacheImgs(sPath, sExt)
{
	var asImg = ["background", "lt", "t", "rt", "r", "rb", "b", "lb", "l", "arrowup2", "darrowdown", "ss_popup_arrow_right", "ss_popup_arrow_left"],
	 n = asImg.length,
	aImg = new Array(n),
	img;

	while(n)
	{--n;
		img = aImg[n] = new Image();
		img.src = sPath + asImg[n] + "." + sExt;
	}
	return aImg;
}
function smtsymBalloon_MaxW(bdy)
{
	if (bdy)
	{
		var iAdd = smtsymtt_bBoxOld ? (smtsymballoon.padding << 1) : 0, w = smtsymtt_GetDivW(bdy);
		if (w > -smtsymballoon.width + iAdd)
			bdy.style.width = (-smtsymballoon.width + iAdd) + "px";
	}
}
// This mechanism pre-caches the default images specified by
// congif.smtsymBalloonImgPath, so, whenever a balloon tip using these default images
// is created, no further server connection is necessary.
function smtsymBalloon_PreCacheDefImgs()
{
	// Append slash to img path if missing
	if(smtsymconfig.smtsymBalloonImgPath.charAt(smtsymconfig.smtsymBalloonImgPath.length - 1) != '/')
		smtsymconfig.smtsymBalloonImgPath += "/";
	// Preload default images into array
	smtsymballoon.aDefImg = smtsymBalloon_CacheImgs(smtsymconfig.smtsymBalloonImgPath, smtsymconfig.SMTSYMBALLOONIMGEXT);
}
/**********************************************************************************/

smtsymtt_Init();
smtsymBalloon_PreCacheDefImgs();

