﻿// JavaScript Document
// class clsTblButton
// code by Azer Manafov (azerman[at]hotmail[dot]com)

function clsTblButton( owner,id,text,visihlp)
{
	var m_owner      = owner;
	var m_visi       = (visihlp == 'undefined')?new clsViewHelper():visihlp;
	var m_id         = id;
//m_prop.evthandler
	var m_prop       = 
	{   
		clractive:  '#ffffff',
		clrnorm:    '#000000',
		clrhover:   '#ff0000',
		imgnormal:  new Array( "images/sys/b.gif", "images/sys/b.gif", "images/sys/b.gif"  ),
		imghover:   new Array( "images/sys/b.gif", "images/sys/b.gif", "images/sys/b.gif"  ),
		alphanorm:  -1,
		alphaover:  -1,
		imgwidth:   24,
		imgheight:  24,
		cellwidth:  -1,
		linkurl:    null,
		evthandler: null,
		mousehand:  null
	};

	var m_font       = { 'font-size' : '12px', 'font-weight': 'bold', 'font-family':'arial','white-space':'nowrap', 'color':m_prop.clrnorm};
	var m_text       = text;
	
	var m_arCells    = new Array();

	m_prop.mousehand = onmouseaction;
	
	this.owner       = function() { return  m_owner; }
	this.create      = create;
	this.getid       = function( ) { return m_id; }
	this.setproperties = function( prop )
	{   for ( var i in prop )
			  m_prop[i] = prop[i];
	}

	this.setfont    = function( font_styles ) 
	{   for ( var i in font_styles)
		      m_font[i] = font_styles[i];
	}
    this.utilSetHandlers = utilSetHandlers;

	function onmouseaction( event )
	{   var e    = event || window.event;
	    var type = e.type;
        var o    = m_arCells[1].getElementsByTagName('span')[0];
		switch( type )
		{   case 'mouseover': 
				for ( var i = 0; i < m_arCells.length; i++ )
				{   m_visi.setStyleA( m_arCells[i],'background-image','url(' + m_prop.imghover[i] + ')'); 
					if ( m_prop.alphaover != -1 ) m_visi.setOpacity( m_arCells[i],m_prop.alphaover);
				}
				m_visi.setStyleA(o,'color',m_prop.clrhover);
                if ( m_prop.evthandler ) 
                     m_prop.evthandler.clickmenuitem(e, m_owner);
			break;
			case 'mouseout':  
				for ( var i = 0; i < m_arCells.length; i++ )
				{   m_visi.setStyleA( m_arCells[i],'background-image','url(' + m_prop.imgnormal[i] + ')'); 
					if ( m_prop.alphanorm != -1 ) m_visi.setOpacity( m_arCells[i],m_prop.alphanorm);
				}
				m_visi.setStyleA(o,'color',m_prop.clrnorm);
		        if ( m_prop.evthandler ) 
				     m_prop.evthandler.clickmenuitem(e, m_owner);
			break;
			case 'click':
		        if ( m_prop.evthandler ) 
				     m_prop.evthandler.clickmenuitem(e, m_owner);
			    else
				    if ( m_prop.linkurl )
					     m_visi.goToUrl( m_prop.linkurl );
				    else alert( 'click');
			break;
		}
		e.cancelBubling = true;//stopPropagation();
        if (e.stopPropagation) e.stopPropagation();
	}
	function create  ( iHtmlRet )
	{	var own = m_visi.getElement( m_owner );
		if ( !own ) return;// if placeholder not found
	    m_font.color = m_prop.clrnorm;
		if ( iHtmlRet == undefined ) iHtmRet = HTM_INS;
		switch( iHtmlRet )
		{   case HTM_INS: inn_build( own ); break;
			case HTM_CRT: dom_build( own ); break;
			case HTM_RET: return ret_build( ); 
			default: inn_build( own ); break;
		}
	}
	function dom_build  ( owner )
	{  	var table    = document.createElement('table');   
	    var tbody    = document.createElement("tbody");
		var tr       = document.createElement("tr");
		
		for ( var  i = 0; i < 3; i++ )
	          m_arCells[i] = document.createElement("td");
		
		var span     = document.createElement("span");
//        if ( m_prop.cellwidth > -1 )
        if ( m_prop.cellwidth > 0  )
		     m_visi.setAttributes( table,{ 'id':m_id, 'cellPadding':"0",'cellSpacing':"0", 'border':"0",'width':m_prop.cellwidth});
        else m_visi.setAttributes( table,{ 'id':m_id, 'cellPadding':"0",'cellSpacing':"0", 'border':"0"});
		m_visi.setStyles    ( table,{ 'direction':'ltr', 'margin':'0', 'padding':'0', 'border':'0' });

		for ( var  i = 0; i < m_arCells.length; i++ )
		{
		    m_visi.setStyles    ( m_arCells[i],  { 'vertical-align' : 'top','margin': '0','padding': '0','border': '0',
									'cursor': 'pointer', 'background-position':'center center','background-image': 'url(' + m_prop.imgnormal[i] + ')'});
            m_visi.setOpacity( m_arCells[i],m_prop.alphanorm);
		}
			  
		m_visi.setStyles    ( m_arCells[0],  { 'background-repeat':'no-repeat', 'text-align':'right', 'width': m_prop.imgwidth,'height': m_prop.imgheight});
		m_visi.setStyles    ( m_arCells[1],  { 'background-repeat':'repeat-x', 'text-align':'center' });
        m_visi.setStyles    ( m_arCells[2],  { 'background-repeat':'no-repeat', 'text-align':'left',  'width': m_prop.imgwidth,'height': m_prop.imgheight});

        m_visi.setStyles    ( span, m_font );
		
		span.   appendChild( document.createTextNode(m_text));
        m_arCells[1].appendChild( span );
		for ( var i = 0; i < m_arCells.length; i++ )
              tr.appendChild( m_arCells[i]  );
		tbody.  appendChild ( tr );
		table.  appendChild ( tbody );
		
//		owner.innerHTML = '';
		while (owner.childNodes[0])
		{
            owner.removeChild(owner.childNodes[0]);
        }
		owner.  appendChild( table );
		
		utilSetHandlers( );
	}
	function inn_build  ( owner )
	{   
		owner.innerHTML = ret_build( );
		utilSetHandlers( );
	}
    function ret_build       ( )
	{   
	    var s = '';
		if ( m_prop.cellwidth > 0  )
		     s += '<table id="' + m_id + '" width="' +  m_prop.cellwidth + '" cellpadding="0" cellspacing="0" border="0" style="direction:ltr; margin:0; padding:0; border:0;">';
		else s += '<table id="' + m_id + '" cellpadding="0" cellspacing="0" border="0" style="direction:ltr; margin:0; padding:0; border:0;">';
		
		s += '<tbody> <tr> ';

		for ( var  i = 0; i < 3; i++ )
		{   s += "\n";
		    s += '<td style="vertical-align:middle; margin:0; padding:0; border:0; cursor:pointer;  background-image:url(' + m_prop.imgnormal[i] + ');';
			switch( i )
			{   case 0: s += ' background-repeat:no-repeat; text-align:right; width:' + m_prop.imgwidth + 'px; height:' + m_prop.imgheight + 'px;">'; break;
                case 1: 
			        s += "\n";
				    s += ' background-repeat: repeat-x; text-align:center;">'; 

					s += "\n" + '<span style="';

					for ( var j in m_font ) s += j + ':' + m_font[j] + ';';
					s += '">&nbsp;' + m_text + '&nbsp;</span>';
					break;
				case 2: s += ' background-repeat:no-repeat; text-align:left; width:' + m_prop.imgwidth + 'px; height:' + m_prop.imgheight + 'px;">'; break;
			}
		}
		s += "</td>\n";
		s += '</tr></tbody></table>';
		return s;
	}
	function utilSetHandlers( )
	{   var table = m_visi.getElement( m_id );
		if ( !table ) return;
		m_arCells = table.getElementsByTagName('td');
		for ( var i = 0; i < m_arCells.length; i++ )
		{   m_arCells[i].onmouseover = m_prop.mousehand;
            m_arCells[i].onmouseout  = m_prop.mousehand;
            m_arCells[i].onclick     = m_prop.mousehand;
	    }
		var o    = m_arCells[1].getElementsByTagName('span')[0];
		//o.onmouseover = m_prop.mousehand;
        //o.onmouseout  = m_prop.mousehand;
        //o.onclick     = m_prop.mousehand;

	}
};

