// JavaScript Document
// code by Azer Manafov (azerman[at]hotmail[dot]com)

//getCSSValueOf( 'table.roottbl td:hover','backgroundColor');
var NAV_WAIT            = 0;
var CONTENT_DIV_ID_PREF = 'message_';

if ( typeof MAINDIV_PREFIX != 'undefined')
     CONTENT_DIV_ID_PREF =  MAINDIV_PREFIX;

function clsFloatNavigation( divId, visihlp, path )
{
    var m_timerId = 0;
    var m_divId   = (divId   == 'undefined')?'springnavigate':divId;
	var m_visi    = (visihlp == 'undefined')?new clsViewHelper():visihlp;

    var m_prop      =
	{
		imgcurrent  : 'images/sys/blank.gif',
		imgactive   : '',
		imgnormal   : 'images/sys/blank.gif',
		
		cellwidth   : 20,
		rowheight   : 20,
		colorover   : "#d6d6d6",
		colorout    : "#ebebeb",
		coloractive : "#ffffff",
		allowflow   : false,
		tableid     : 'leftnavigationtbl',
		tablewidth  : 140,
		dividprefix : CONTENT_DIV_ID_PREF,
		cssclass    : "roottbl",
		lastevent   :0
	};
	
	var m_fontstyle = new Object( );
	
	if ( typeof clsFloatNavigation.idPref == 'undefined')
	     clsFloatNavigation.idPref = 'nav_';

    var m_base         = new clsBaseNavigate( divId, visihlp, clsFloatNavigation.idPref );
	var m_arEvCallback = new clsCallbackList( );
	
	this.compact       = compact;
	this.divid         = function ( ) { return m_base.getdivid(); }
	this.itemsCount    = m_base.itemsCount;
	this.allowdblitm   = m_base.allowdblitm;
	this.compactempty  = m_base.compactempty;
	this.is_compact    = m_base.is_compact;

	this.getProperties = function( ) { return m_prop; }
	this.setProperties = function( prop )
	{   for ( var i in prop )
		{   if ( prop[i] != undefined )
			     m_prop[i] = prop[i];
		}
	}
    this.addCallback   = function( callback, bAfter,name,param ) {	m_arEvCallback.addCallback(callback, bAfter,name,param); }
	this.activateScene = activateScene;
	this.getTblId      = function() { return m_prop.tableid; }
	this.getactiveid   = m_base.getactiveid;
	this.addItem       = addItem;

	this.showlayer     = showlayer;
	this.create        = create;
	this.fontStyle     = fontStyle;

	    m_base.addEvent( 'mouseover', 1 );
	    m_base.addEvent( 'mouseout',  2 );
	    m_base.addEvent( 'click',     3 );
	

	fontStyle( 'color','#000000','font-family','Arial','font-size','12px','font-weight','bold');	
	
	function compact    ( )
	{
		if ( !this.is_compact( )) return;
		
		if ( this.divid( ))
		{   var id  = m_prop.dividprefix + "1";
		    var obj = m_visi.getElement   (  this.divid( ));
			var mso = m_visi.getElement   ( id );

			var rmo = m_visi.getObjectRect( mso );
			var rmn = m_visi.getObjectRect( obj );
			mso.style.width = ( rmo.left + rmo.width - rmn.left - 24 ) + 'px';

			var brc = m_visi.getObjectRect( obj );
			if ( obj )
			{   obj.style.border = "0px";
				obj.style.width  = '0px';
			}
			if ( m_visi.getStyle(mso,"position",1) == 'absolute')
				 mso.style.left = rmn.left + "px";
		}
	}
	
	function addItem ( sLink, sText )
	{   
		m_base.addItem ( sLink,sText);
	}
	function resFont  ( ) { m_fontstyle = new Object( ); }
	function fontStyle( )
	{	for ( var i=0; i < arguments.length; i=i+2)
		{	var key = arguments[i+0].toLowerCase();// 
		    var val = arguments[i+1].toLowerCase();
			m_fontstyle[key] = val;
	  	}
	}
	
	function build   ( activeId )
	{   
	    if ( m_base.is_compact())
		    return "";//'&nbsp;'
		if ( m_prop.imgactive == '' )  m_prop.imgactive = m_prop.imgcurrent;
		m_base.compactempty( false );	
	
	    var s='';
		var tbstyle= '';
		for ( var i in m_fontstyle)
		      tbstyle += (i + ':' + m_fontstyle[i] + '; ');
		s += '<TABLE id="' + m_prop.tableid + '" class="roottbl" width="' + m_prop.tablewidth + '" style="border: 0px solid red; margin: 0; width:'+m_prop.tablewidth+'px; ' + tbstyle + '">';
		s += '<TBODY>';

		for ( var i = 0; i < m_base.itemsCount(); i++ )
		{
			var itm = m_base.getitem(i); 
			var sid = m_base.getident() + (i+1);
			var img = (itm.id != activeId )?m_prop.imgnormal:m_prop.imgactive;
			
			s += '<TR>\n';
			s += '<TD id="' + sid + '_01" align="center" valign="middle" width="'+ m_prop.cellwidth + '" height="'+ m_prop.rowheight +'"';
			s += ' style="background-image: url(' + img + '); background-repeat:no-repeat; background-position: center center;">';
			s += '</TD>\n';
			s += '<TD id="' + sid + '_02" align="center" valign="middle" width="'+ (m_prop.tablewidth-m_prop.cellwidth) + '" style="background-color:' + m_prop.colorout + ';">\n';
			s += '<a href="'  + itm.link + '">';
			s += '<SPAN style="' + tbstyle + '">\n';
			s += itm.title;
			s += '</SPAN>';
			s += '</a>';
			s += '</TD></TR>\n';
		}
		s += '</TBODY></TABLE>\n';
		return s; 
	}
	function showMessage    ( num, enable )
	{
		var id = m_prop.dividprefix + num;
		var ob = m_visi.getElement(id);
		m_visi.setVisible( ob,enable );
	}
	function hideAllMessages( )
	{   var divs = document.getElementsByTagName( 'div');
        for ( var i = 0; i < divs.length; i++)
        {   if ( divs[i].id == undefined ) continue;
            if ( divs[i].id.indexOf( m_prop.dividprefix ) != 0 ) continue;
		    m_visi.setVisible( divs[i],false );
		}
	}
	function createNamesFromTag( tagName )
	{   var divs = document.getElementsByTagName( 'div');
        for ( var i = 0; i < divs.length; i++)
        {   if ( divs[i].id == undefined ) continue;
            if ( divs[i].id.indexOf( m_prop.dividprefix ) != 0 ) continue;
		    var h1 = divs[i].getElementsByTagName( tagName );

			if ( h1 && h1.length && m_visi.getInnerText(h1[0]))
			{   var lnk = divs[i].getElementsByTagName( 'a' );

			    if ( lnk && lnk.length )
				     addItem( lnk[0].href, m_visi.getInnerText(h1[0]));
				else addItem( '#', m_visi.getInnerText(h1[0]));
			}
		}	
	}
	function createDivLayer( parent, idName )
	{
		if ( !document.createElement ) return null;
		var ttipNode = document.createElement("div");
		parent.appendChild( ttipNode );
		ttipNode.setAttribute("id", idName );
		ttipNode.style.border     = "2px solid #8e2800";
		ttipNode.style.width      = "150px";
		ttipNode.style.height     = "514px";
		return ttipNode;
	}
	function create  ( activeId, iHtmRet, parentid )
	{	
        if ( !m_base.itemsCount() )
		      createNamesFromTag( 'h1' );
		m_base.setactiveid( activeId );

		var iHtmRet = (iHtmRet != 'undefined')?iHtmRet:HTM_INS;
        var div     = m_visi.getElement( m_divId );
        
		if ( !div ) // if placeholder not found
		{    if ( !parentid ) return;
		     if ( !m_base.is_compact()) // if no compacting needed
			 {   var parent =  m_visi.getElement( parentid );
				 div     = createDivLayer( parent, m_divId ); // create placeholder
				 iHtmRet = HTM_INS;
			 }
		}
		if ( !div ) return;

        var w   = (div)?div.style.width:null;
		if ( w && w.indexOf('px') != -1 )
			 w = w.substring(0,w.indexOf('px'));
		if ( w ) m_prop.tablewidth = w;

		switch( iHtmRet )
		{
			case HTM_RET: return build( m_base.getactiveid());
			case HTM_WRT: document.write(build( m_base.getactiveid()));  break;
			case HTM_INS: div.innerHTML = build( m_base.getactiveid());  break;
			default:      document.write(build( m_base.getactiveid()));  break;
		}

        hideAllMessages( );
		showMessage    ( activeId, true );
		
		if ( !m_base.is_compact())
		{   
		    var obj  = m_visi.getElement( getidstr(m_base.getactiveid(),'_01'));
		    if ( obj ) obj.style.backgroundColor = m_prop.colorover;
			obj = m_visi.getElement(getidstr(m_base.getactiveid(),'_02'));
			if ( obj ) obj.style.backgroundColor = m_prop.colorover;
		    for ( var i = 0; i < m_base.itemsCount( ); i++)
		          showlayer( (m_prop.dividprefix + ( i+1 )),false);
		    activateScene(m_base.getactiveid( ));
		}
		m_timerId = setTimerCallback( initialTimer );
		setTimer( m_timerId );
		
		m_visi.registerHelper( navMouseEvent );
	}
    function initialTimer( timerState )
	{   switch( timerState )
		{	case TM_STATE_START: NAV_WAIT = 0;
		 	 var tbl = m_visi.getElement( m_prop.tableid );
			 if ( tbl )// number of items > 0
			 {   var aar = m_visi.getElement( m_prop.tableid ).getElementsByTagName('a');
			     for ( var i = 0; i < aar.length; i++)
			           aar[i].onclick = clickCallback;
			 }
		    break;
			case TM_STATE_RUN:
				NAV_WAIT += 50;
				if ( NAV_WAIT >= 500 )
				     stopTimer( m_timerId );
				break;
			case TM_STATE_STOP: 
			 NAV_WAIT = 0; m_timerId = -1;
			 break;
		}
	}
    function showlayer      ( id, enable )
	{   var o   = m_visi.getElement( id );
	    if ( o == null ) return;
	    var arr = o.getElementsByTagName( '*');

        for ( var i = 0; i < arr.length; i ++ )
			  if ( arr[i].id ) showlayer( arr[i].id, enable );
		m_visi.setVisible( id, enable );	
	}
	function clickCallback  ( e )
    {   e = e || window.event;
        return ( m_prop.allowflow == true )?true:false; 
    }
	function getidstr       ( idnum,postfixid )	{   return m_base.getident() + idnum + postfixid; }
	function colorActive    ( )
	{
        var activeobj = m_visi.getElement( getidstr( m_base.getactiveid( ),'_02'));
		m_visi.setStyleA(activeobj, "background-color", m_prop.coloractive );
		activeobj = m_visi.getElement( getidstr( m_base.getactiveid( ),'_01'));
		m_visi.setStyleA(activeobj, "background-color", m_prop.coloractive );
		
	}
	function colorOver      ( currid )
	{
		var previd = m_base.getactiveid( );

		if ( !m_base.is_compact())
		{   
			m_visi.setStyleA(getidstr(previd, '_01'),"background-image", 'url('+m_prop.imgnormal+')');
			m_visi.setStyleA(getidstr(currid, '_01'),"background-image", 'url('+m_prop.imgcurrent+')');
			
		    m_visi.getElement( getidstr(previd, '_01')).style.backgroundColor = m_prop.colorout;
		    m_visi.getElement( getidstr(previd, '_02')).style.backgroundColor = m_prop.colorout;

		    m_visi.getElement( getidstr(currid, '_01')).style.backgroundColor = m_prop.coloractive;
		    m_visi.getElement( getidstr(currid, '_02')).style.backgroundColor = m_prop.coloractive;
		}
	}
    function activateScene( scene )
	{   if ( scene > m_base.itemsCount( )) return;
/*
		var previd = m_base.getactiveid( );
		colorOver( scene );
        
        showlayer( m_prop.dividprefix + previd, false);
		showlayer( m_prop.dividprefix + scene,  true );

		m_base.setactiveid( scene );
*/
        if ( m_base.is_compact())
		     return "";

        var currid  = scene;//m_base.getnavid   ( o );//extract first number from id
		var previd  = m_base.getactiveid( );

		var o1_cur = m_visi.getElement( getidstr(currid, '_01')); 
		var o2_cur = m_visi.getElement( getidstr(currid, '_02')); 
		var o1_pre = m_visi.getElement( getidstr(previd, '_01') );
		var o2_pre = m_visi.getElement( getidstr(previd, '_02') );

		m_visi.setStyleA(o1_pre,"background-image", 'url('+m_prop.imgnormal+')');
		o1_pre.style.backgroundColor = m_prop.colorout;
		o2_pre.style.backgroundColor = m_prop.colorout;
		
		m_visi.setStyleA(o1_cur,"background-image", 'url('+m_prop.imgactive+')');
		o1_cur.style.backgroundColor = m_prop.coloractive;
		o2_cur.style.backgroundColor = m_prop.coloractive;
		
		showlayer( m_prop.dividprefix + previd, false);
		showlayer( m_prop.dividprefix + currid,  true );
		m_base.setactiveid( currid );

	}

    function navMouseEvent( event )
	{	for ( var i = 0; i < m_arEvCallback.count(); i++ )
		      if ( !m_arEvCallback.callAfter(i))
			        m_arEvCallback.call(i);
					
        if ( m_timerId != -1 ) return;	  
        var evt    = m_base.eventhandle( event );
		if ( !evt     ) return;
		if ( !evt.obj ) return;
		

        var currid  = m_base.getnavid( evt.obj );//extract first number from id
        if ( currid == m_base.getactiveid( )) return;
		
		switch( evt.eventid )
		{   case 1: evt.obj.style.backgroundColor = m_prop.colorover;   break;
		    case 2: evt.obj.style.backgroundColor = m_prop.colorout;    break;
			case 3: evt.obj.style.backgroundColor = m_prop.coloractive; break;
		}
		m_prop.lastevent = evt.eventid;
		
		if ( evt.eventid  == 2 ) return;
 
        if ( m_prop.allowflow == true || evt.eventid == 3 )
		{
             activateScene( currid );
		}

        for ( var i = 0; i < m_arEvCallback.count(); i++ )
		      if ( m_arEvCallback.callAfter(i)) 
			        m_arEvCallback.call(i);
	}
	
};

