// JavaScript Document
// class TtipData
// code by Azer Manafov (azerman[at]hotmail[dot]com)

// cursor position trailing
var GLB_CURSOR            =  {x:-1, y:-1};
var HELPER_EVENT_HANDLERS = new Array( );
var FN_WINDOW_ONLOAD      = cursorposinit;

window.onload = cursorposinit;
function cursorposinit()
{	
    if ( window.Event )
	{	document.captureEvents(Event.MOUSEMOVE |  Event.MOUSEDOWN | Event.MOUSEUP | Event.MOUSEOVER | Event.MOUSEOUT );
	}
	document.onmousemove = mouseEventHandler;
	document.onmousedown = mouseEventHandler;
	document.onmouseup   = mouseEventHandler;
	document.onmouseover = mouseEventHandler;
	document.onmouseout  = mouseEventHandler;
//	document.onclick     = mouseEventHandler;
    FN_WINDOW_ONLOAD     = null;//prevent from repeated call

}
function mouseEventHandler(e)
{
	e = e || window.event;
	for( var hlp in HELPER_EVENT_HANDLERS )
	{   if ( HELPER_EVENT_HANDLERS[hlp].onMouseEvent ) 
		     GLB_CURSOR = HELPER_EVENT_HANDLERS[hlp].onMouseEvent(e);
		else HELPER_EVENT_HANDLERS[hlp](e);
	}
}
// end cursor position trailing

//start clsCallbackList -  callback stack class
function clsCallbackList( )
{
    var m_arCallbackFun = new Array( );

	this.addCallback    = function( fun, bAfter,name )
	{   var bAfter = (bAfter != undefined )?bAfter:false;
	    var name   = (name   != undefined )?name:"";
        for ( var i = 0; i < m_arCallbackFun.length; i++ )
		{   if ( m_arCallbackFun[i].callback == fun ) return;
		}
		var ob = new Object( );
		ob.callback = fun;
		ob.name     = name;
		ob.after    = bAfter;
		m_arCallbackFun.push( ob );
	}
	this.remCallback = function ( fun )
	{   for ( var i = 0; i < m_arCallbackFun.length; i++ )
		{   if ( m_arCallbackFun[i].callback == fun )
			{   m_arCallbackFun.splice( i,1);
				return;
			}
		}
	}
	this.call       = function( index )
	{   if ( typeof index == 'string' )
		{   for ( var i = 0; i < m_arCallbackFun.length; i++ )
			{   if ( m_arCallbackFun[i].name == index )
				     return m_arCallbackFun[i].callback();
			}
			return;
		}
	    if ( index > -1 && index < m_arCallbackFun.length )
		     return m_arCallbackFun[index].callback();
	}
	this.count      = function( ) { return m_arCallbackFun.length; }
	this.name       = function( index )
	{   if ( typeof index == 'string' )
		{   for ( var i = 0; i < m_arCallbackFun.length; i++ )
			{   if ( m_arCallbackFun[i].name == index )
				     return i;//return index
			}
			return -1;
		}
	    if ( index > -1 && index < m_arCallbackFun.length )
		     return m_arCallbackFun[index].name;
	}
	this.callAfter  = function( index )
	{   if ( index > -1 && index < m_arCallbackFun.length )
		     return m_arCallbackFun[index].after;
	}
};// end clsCallbackList

function clsTtipData( id, iconWidth, iconHeight, imgW, imgH, iconOn, iconOff, tipImage )
{
	var m_id		   = id;
	var m_icon         = id+'3';
	var m_image        = id+'2';
	var m_movie	       = null;
	
	var m_iconOn       = iconOn;
	var m_iconOff      = iconOff;
	var m_tipImage     = tipImage;
	var m_link         = "#";
	var m_alttxt       = '';
	var m_bblend       = false;//true;
	var m_connectid    = "";

	var m_iconPos      = new function () { this.x = 0; this.y = 0; this.width = 0; this.height = 0; }
	m_iconPos.width    = iconWidth;
	m_iconPos.height   = iconHeight;
	var m_imafePos     = new function () { this.x = 0; this.y = 0; this.width = 0; this.height = 0; }
	m_imafePos.x       = -iconWidth/2;
	m_imafePos.y       = -iconHeight/2;
	m_imafePos.width   = imgW;
	m_imafePos.height  = imgH;

	var m_imgState     = 0;
	var m_img          = new Image( );
	
	this.isActive      = true;
	this.setconnectid  = function( connectid ) { m_connectid = connectid; }
	this.getconnectid  = function( ) { return m_connectid; }
	
	this.getId         = getId;
	this.getIconOn     = getIconOn;
	this.getIconOff    = getIconOff;
	this.getImgTtip	   = getImgTtip;

	this.getLink	   = getLink;
	this.setLink	   = setLink;
	this.getAlttxt	   = getAlttxt;
	this.setAlttxt	   = setAlttxt;
	this.setMovie      = setMovie;
	this.getMovie      = getMovie;
	this.setIconPos    = setIconPos;
	this.setImagePos   = setImagePos;
	this.enableBlend   = enableBlend;
	this.canBlend      = canBlend;
	this.correctTtipPos= correctTtipPos;

	this.isImgComplete = isImgComplete;
	this.isEqual       = isEqual;
	this.showThis      = showThis;
	this.showIcon      = showIcon;
	this.showImage     = showImage;
	this.showMovie     = showMovie;
	this.iconBlend     = iconBlend;
	this.iconSet       = iconSet;
	this.getIconRect   = getIconRect;
	this.getImageRect  = getImageRect;


	if ( clsTtipData.HELPER  ==  undefined || !clsTtipData.HELPER )
	     clsTtipData.HELPER = new clsViewHelper( );
	if ( clsTtipData.IMGS_PATH  ==  undefined || !clsTtipData.IMGS_PATH )
	     clsTtipData.IMGS_PATH   =  "images";
	if ( clsTtipData.VIEW_RIGHT	==  undefined || !clsTtipData.VIEW_RIGHT )
		 clsTtipData.VIEW_RIGHT  = 800;
	if ( clsTtipData.VIEW_BOTTOM == undefined || !clsTtipData.VIEW_BOTTOM )
		 clsTtipData.VIEW_BOTTOM = 600;
	if ( clsTtipData.REF_LT_OBJ  == undefined || !clsTtipData.REF_LT_OBJ )
	     clsTtipData.REF_LT_OBJ = "mapRefPoint";

	m_img.onload  = onImgload;
	m_img.onabort = onImgAbort;
	m_img.onerror = onImgError;
	m_img.src     = getImgTtip( );

	function onImgload     ( ) { onComplete(1); }
	function onImgError    ( ) { onComplete(2); }
	function onImgAbort    ( ) { onComplete(2); }
	function onComplete    ( state ) 
	{   m_imgState = state; 
		if ( m_imgState == 1)
		{	if ( m_imafePos.width  == 0 ) m_imafePos.width  = m_img.width;
			if ( m_imafePos.height == 0 ) m_imafePos.height = m_img.height;
		}
	}
	
	function isImgComplete ( ) { return (m_imgState)?true:false; }
    function correctTtipPos( )
	{	var helper = clsTtipData.HELPER;
		var thisObj= helper.getElement( m_id );
		if ( !thisObj ) return;
		var thisPos= [parseInt(thisObj.style.left), parseInt(thisObj.style.top)];

		if ( thisPos[0] + m_imafePos.width > clsTtipData.VIEW_RIGHT )
		     m_imafePos.x = -(thisPos[0] + m_imafePos.width - clsTtipData.VIEW_RIGHT );
		if ( thisPos[1] + m_imafePos.height > clsTtipData.VIEW_BOTTOM )
		     m_imafePos.y = -(thisPos[1] +  m_imafePos.height - clsTtipData.VIEW_BOTTOM );
	}

	function getId 		( )	{ return m_id; }
	function getIconOn 	( )	{ return clsTtipData.IMGS_PATH + '/' + m_iconOn; }
	function getIconOff	( ) { return clsTtipData.IMGS_PATH + '/' + m_iconOff; }
	function getImgTtip	( ) { return clsTtipData.IMGS_PATH + '/' + m_tipImage; }
	
	function getIconRect( )	{ return m_iconPos;	}
	function getImageRect( )
	{   if ( m_imafePos.width  == 0 ) m_imafePos.width  = m_img.width; 
	    if ( m_imafePos.height == 0 ) m_imafePos.height = m_img.height; 
		return m_imafePos;	
	}
	function getLink	( ) { return m_link; }
	function setLink	( linktxt ) { m_link = linktxt; }
	function getAlttxt	( ) { return m_alttxt; }
	function setAlttxt	( alttxt ) { m_alttxt = alttxt; }
	function setMovie	( obj ) { m_movie = obj;}
	function getMovie	( ) { return m_movie;}
	
	function enableBlend( blend ) { m_bblend = blend; }
	function canBlend	( ) { return m_bblend; }
	
	function setIconPos	( x,y ) { m_iconPos.x = x; m_iconPos.y = y; }
	function setImagePos( x,y )
	{   if ( x != undefined ) m_imafePos.x = x; 
		if ( y != undefined ) m_imafePos.y = y; 
		clsTtipData.HELPER.setDivPos( m_image,[m_imafePos.x,m_imafePos.y] );
	}
	
	function isEqual    ( behav ) { return (m_id == behav.getId());}
	function showThis   ( show ) { clsTtipData.HELPER.setVisible( m_id,    show);}
	function showIcon   ( show ) { clsTtipData.HELPER.setVisible( m_icon,  show);} 
	function showImage  ( show ) { clsTtipData.HELPER.setVisible( m_image, show);}
	function showMovie  ( show ) { clsTtipData.HELPER.setVisible( m_movie, show);}
	function iconBlend  ( val  ) { clsTtipData.HELPER.setOpacity( m_icon,  val);}
	function iconSet    ( onoff)
	{   if ( onoff == 'off' )
		     clsTtipData.HELPER.swapImages(m_icon,getIconOff());
		else clsTtipData.HELPER.swapImages(m_icon,getIconOn());
	}

};// end class clsTtipData

function clsFlashLayer( id, f_name, width, height, flashvars)
{
	var m_genericId  = id;
	var m_id         = 'movie'+id;
	var m_style      = new Object();
	var m_shtml      = '';
	var m_fname      = f_name;
	var m_width      = width;
	var m_height     = height;
	var m_sflashvars = flashvars;
	
	this.createFlashLayer	= createFlashLayer;
	this.getGenericId       = getGenericId;
	this.getId				= getId;
	this.preStyle			= preStyle;
	this.setStyle			= setStyle;
	this.resStyle			= resStyle;
	
	function getGenericId    ( ) { return m_genericId; }
	function getId    		 ( ) { return m_id; }
	function getDiv          ( ) { return getElement(m_id); }
	function createFlashLayer( )
	{	
		document.write(getFlashContent( m_width, m_height, m_fname, m_sflashvars));
		setStyle( );
	}
	function resStyle( ) { m_style = new Object( ); }
	function preStyle( )
	{	resStyle( );
		for ( var i=0; i < arguments.length; i=i+2)
		{	var currArg = arguments[i].toLowerCase();    
			m_style[currArg] = arguments[i+1];
	  	}
	}
	function setStyle( )
	{	var obj = getElement( m_id );
		if ( !obj ) return;
		for ( var i in m_style)
			  obj.style.setAttribute(i,m_style[i]);
	}
	function getFlashContent( width, height, movie, flashvars)
	{	
		var str='';		
		str+=' <OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" CODEBASE="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"';
		str+=' width="'+width+'" height="'+height+'">\n';

		str+=' <param name="movie"     value="'+movie+'" /> \n';
		str+=' <param name="quality"   value="high" /> \n';
		str+=' <param name="loop"      value="true" /> \n';
		str+=' <param name="wmode"     value="transparent" /> \n';
		
		if ( flashvars )
		     str+=' <param name="flashvars" value="'+flashvars+'" /> \n';
		
		var str2='<embed pluginpage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high"';
	
		str2+=' width="'+width+'" height="'+height+'"';
		str2+=' src="'+movie+'"';
		str2+=' wmode="transparent"';
		str2+=' flashvars="'+flashvars+'"';
		str2+=' > \n';
		
		str+=str2;
		str+='</OBJECT>\n';
		return str;
	}
	function getElement( id )
	{	if ( document.getElementById )
	         return document.getElementById( id );
		if ( document.all!=null )
      		 return document.all   [id];
    	else return document.layers[id];
	}
};

// class clsViewHelper
function clsViewHelper()
{
	var tipBkgColor         = "#f6e9cf";
	var m_fnMouseListener   = null;
	this.setOpacity 		= setOpacity;
	this.setVisible 		= setVisible;
	this.swapImages 		= swapImages;
	this.getElement			= getElement;
	this.getInnerText       = getInnerText;
	this.findPos2           = findPos2;
	this.findPos			= findPos;
	this.showTtip   		= showTtip;
	this.goToUrl            = goToUrl;
	this.onMouseEvent		= onMouseEvent;
	this.pointInObject		= pointInObject;
	this.setTipBkg			= setTipBkg;
	this.setMouseListener   = setMouseListener;
	this.setDivPos			= setDivPos;
	this.getCursorPos       = getCursorPos;
	this.getInstanceId      = getInstanceId;
	this.allsetMouseListener= allsetMouseListener;
	this.registerHelper     = registerHelper;
	this.getEventTarget     = getEventTarget;
	this.getRect            = getRect;
	
	this.ltrim				= ltrim;
	this.rtrim				= rtrim;
	this.trim				= trim;
	
	this.getObjectRect      = getObjectRect;

	var bAllSupport         = document.all!=null;
	var m_cursor_pos		= { x:-1, y:-1 };
	var m_instanceid        = 0;
	
	if ( clsViewHelper.INSTANCE == undefined )
	     clsViewHelper.INSTANCE = 0;
	else clsViewHelper.INSTANCE++;
	clsViewHelper.TTIP_DIV_ID = 'tipView';
	clsViewHelper.TTIP_ZINDEX = 40;
	
	m_instanceid = clsViewHelper.INSTANCE;
	
	registerHelper( this );

	function allsetMouseListener( listener )
	{   for( var hlp in HELPER_EVENT_HANDLERS )
			 HELPER_EVENT_HANDLERS[hlp].setMouseListener(listener);
	}

	function registerHelper( helper )
	{   for( var hlp in HELPER_EVENT_HANDLERS )
		{   
			if ( HELPER_EVENT_HANDLERS[hlp].getInstanceId && helper.getInstanceId )
			{   if ( HELPER_EVENT_HANDLERS[hlp].getInstanceId() == helper.getInstanceId())
	        		 return;
			}
			else
			{   if ( HELPER_EVENT_HANDLERS[hlp] == helper )
				     return;
			}
			
		}
		HELPER_EVENT_HANDLERS.push(helper);
	}
	function getInstanceId( ) { return "helper"+m_instanceid;}
	function setTipBkg    ( bkgColor )
	{
		tipBkgColor = bkgColor;
	}
	function getElement   ( id )
	{	
	    if ( document.getElementById )
	         return document.getElementById( id );
		if ( bAllSupport )
      		 return document.all   [id];
    	else return document.layers[id];
	}
	function getInnerText( id )
	{   var obj     = ( typeof id == 'object')?id:getElement( id );
		if ( !obj ) return "";
	    var s = obj.innerText;
		if ( s == undefined)
		{    s = obj.innerHTML.replace(/<[^>]+>/g,"");
	    }
	    return s;
    }

	function setVisible( id, enable )
	{	
		if ( id <=0 ) return;
		var obj     = ( typeof id == 'object')?id:getElement( id );
		if ( enable == true )
		     enable = 'visible';

	    var NNtype  ='show'; 
	    var IEtype  ='visible'; 
		var WC3type ='visible';
		
		if ( enable != 'visible' )
		{   NNtype  = 'hidden';
			IEtype  = 'hidden';
			WC3type = 'hidden';
		}
		try
		{  
		    if ( document.getElementById )
				 obj.style.visibility = WC3type;
			else
				if ( document.layers )
					obj.visibility = NNtype;
			else
				if ( document.all )
					 obj.style.visibility = IEtype;
					 
		}
		catch(err) { window.status = err.description+"; Id: "+id; }
	}
	function setOpacity( id, value )
	{	var obj = (typeof id == 'object')?id:getElement(id);
		if ( obj == undefined ) return;
		obj.style.opacity      = value/10;
//		obj.style.background   = "transparent";
		
		if ( browser.isIE55 || browser.isIE6x )
			 obj.style.filter       = 'progid:DXImageTransform.Microsoft.Alpha(opacity=\''+value*10 +'\')';
		else obj.style.filter       = 'alpha(opacity=' + value*10 + ')';
	}
	
	function swapImages( id,img)
	{	var obj = (typeof id == 'object')?id:getElement(id);
		if ( obj == undefined ) return;
		obj.src = img;
	}
//http://blog.firetree.net/2005/07/04/javascript-find-position/	
	function getXpos(elem)
	{	while (elem != null && !elem.offsetParent) elem = elem.parentNode;
		if (elem == null) return 0;
		return (elem.offsetLeft + getXpos(elem.parentNode))
	}
	function getYpos(elem)
	{	while (elem != null && !elem.offsetParent) elem = elem.parentNode;
		if (elem == null) return 0;
		return (elem.offsetTop + getYpos(elem.parentNode))
	}
	function cumulativeOffset( element )
	{   var valueT = 0, valueL = 0;
    	do
		{   valueT += element.offsetTop  || 0;
      		valueL += element.offsetLeft || 0;
      		element = element.offsetParent;
    	} while (element);
    	return [valueL, valueT];
    }
	function cumulativeScrollOffset( element )
	{   var valueT = 0, valueL = 0;
        do 
		{   valueT += element.scrollTop  || 0;
            valueL += element.scrollLeft || 0;
            element = element.parentNode;
        } while (element);
        return [valueL, valueT];
   }
   function findPos2( id )
	{  	var obj     = ( typeof id == 'object')?id:getElement( id );
		if ( obj == undefined ) return [-1,-1];
		var pos1 = cumulativeOffset      ( obj );
		var pos2 = cumulativeScrollOffset( obj );
		return [pos1[0] - pos2[0],pos1[1]-pos2[1]];
		

   }
// from http://www.quirksmode.org/js/findpos.html#
	function findPos( id )
	{  	
		var obj     = ( typeof id == 'object')?id:getElement( id );
	  	if ( obj == undefined ) return [-1,-1];
		var curleft = 0;
		var curtop  = 0;
		if ( obj.offsetParent )
		{	curleft = obj.offsetLeft;
			curtop  = obj.offsetTop;
			while ( (obj = obj.offsetParent))
			{	if (obj.scrollLeft) { curleft -= obj.scrollLeft; }// ?
				if (obj.scrollTop ) { curtop  -= obj.scrollTop;  }// ?
			    curleft += obj.offsetLeft;
				curtop  += obj.offsetTop;
			}
		}
		return [curleft,curtop];
	}
	function setDivPos      ( id, aPos )//aPos: array x and y numeric
	{	var obj     = getElement( id );
		if ( !obj ) return;
		if ( obj.style )
		{	obj.style.left = aPos[0]+'px';
			obj.style.top  = aPos[1]+'px';
		}
	}
	function createTtipLayer( idName )
	{
		if ( !document.createElement ) return null;
		var ttipNode = document.createElement("div");
		document.body.appendChild(ttipNode);
		ttipNode.setAttribute("id", idName );
		ttipNode.style.position   = "absolute";
		ttipNode.style.background = tipBkgColor;
		ttipNode.style.border     = "1pt black solid";
		ttipNode.style.visibility = "hidden";
		ttipNode.style.left       = "0px";
		ttipNode.style.top        = "0px";
		ttipNode.style.zIndex     = clsViewHelper.TTIP_ZINDEX;
		 return ttipNode;
	}
	function showTtip( name, enable, tipTxt,xoffset, yoffset )
	{
		var ttipNode = getElement( clsViewHelper.TTIP_DIV_ID );
		if ( ttipNode == null )
		{	ttipNode = createTtipLayer( clsViewHelper.TTIP_DIV_ID );
			if ( ttipNode == null ) return;
		}
		var parent = getElement(name);
		var zindex = clsViewHelper.TTIP_ZINDEX;
		
		if ( parent )
		     zindex = parent.style.zIndex + 1;

		ttipNode.style.zIndex = (zindex >= clsViewHelper.TTIP_ZINDEX)?zindex:clsViewHelper.TTIP_ZINDEX;

		var ptob = findPos   ( name );
		if ( !xoffset ) xoffset=0;
		if ( !yoffset ) yoffset=40;
		if ( enable )
		{   if ( !tipTxt ) return;
			var str ='';
			str+='<B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+tipTxt+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</B>';
		
			ttipNode.style.pixelLeft = ptob[0]+xoffset;
			ttipNode.style.pixelTop  = ptob[1]+yoffset;
			ttipNode.innerHTML = str;
			setVisible( clsViewHelper.TTIP_DIV_ID, 'visible');
		}
		else
		{
			setVisible( clsViewHelper.TTIP_DIV_ID, 'hidden');
		}
	
	}
	//http://www.hscripts.com/scripts/JavaScript/cursor-position.php
	function onMouseEvent( e )
	{
		e = e || window.event;
		var cursor = {x:-1, y:-1};
		
		if ( !e ) return cursor;
	
		if (e.pageX || e.pageY)
		{
			cursor.x = e.pageX;
			cursor.y = e.pageY;
		} 
		else
		{
			var de = document.documentElement;
			var b  = document.body;
			cursor.x = e.clientX + 
				(de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
			cursor.y = e.clientY + 
				(de.scrollTop || b.scrollTop) - (de.clientTop || 0);
		}
		if ( m_fnMouseListener )
		     m_fnMouseListener(e);
			 
		m_cursor_pos = cursor;	 
		
		return cursor;
	}
	function getCursorPos    ( ) { return m_cursor_pos; }
	function setMouseListener( fnUserMouseListener )
	{
		m_fnMouseListener = fnUserMouseListener;
	}
	function pointInObject( id, w, h )
	{	var apos = findPos(id);
		var rc   = getObjectRect( id );
		if ( rc.width == 0 )
		{ rc.width  = 60;
		  rc.height = 60;
		}
		var w    = (w != null )?w:rc.width;
		var h    = (h != null )?h:rc.height;
		if ( w == 0 ) w = rc.width;
		if ( h == 0 ) h = rc.height;
		
		if ( !apos ) return false;
		if ( (apos[0] <= m_cursor_pos.x && m_cursor_pos.x <= apos[0]+w) &&  (apos[1] <= m_cursor_pos.y && m_cursor_pos.y <= apos[1]+h))
			  return true;
		return false;	  
	}

	function goToUrl( strUrl)
	{	
		window.location=strUrl;
	//	window.location.href = strUrl;
		return true;
	}
	function ltrim( src )
	{   if ( !src.length ) return "";
		var posL = 0;
		while( isWhitespace(src.charAt(posL)) && posL < src.length ) posL++;
		return src.substring( posL );
	}
	function rtrim( src )
	{   if ( !src.length ) return "";
		var posR = src.length - 1;
		while( isWhitespace(src.charAt(posR)) && posR > 0 ) posR--;
		return src.substring( 0,posR+1);
	}
	function trim( str )
	{   str = dcdSpaces( str ); 
		return ltrim(rtrim(str));
	}
	function isWhitespace( charToCheck )
	{   var whitespaceChars = " \t\n\r\f";
		return (whitespaceChars.indexOf( charToCheck ) != -1);
    }
	function dcdSpaces( src )
	{	var i;
		while( ( i = src.indexOf( "&nbsp;")) != -1 )
		{   src = src.substring( 0, i ) + ' ' + src.substring( i+6 );
		}
		return src;
	}
	function getEventTarget ( e )
	{   e = e || window.event;
		if ( !e ) return null;
		var obj = (e.target)?e.target:e.srcElement;
		if ( obj.nodeType == 3)
			 obj = obj.parentNode;
		return obj;
	}
	function getRect( left, top, width,height)
	{   this.left   = left; 
	    this.top    = top;
	    this.width  = width;
	    this.height = height;
	}
	
	function getObjectRect( id )
	{   var rc  = new getRect( -1,0,0,0);
		var obj = ( typeof id == 'object')?id:getElement( id );
	  	if ( obj == undefined )
		{
		return rc;
		}
		
		var coord = findPos( obj );
		rc.left   = coord[0];
		rc.top    = coord[1];
		rc.width  = obj.offsetWidth;
		rc.height = obj.offsetHeight;
		return rc;
	}

};// end class clsViewHelper

//default helper object
visi = new clsViewHelper( );