// JavaScript Document
// message box object
// code by Azer Manafov (azerman[at]hotmail[dot]com)

var MSG_OBJ_DIV     = 'infoBoxDiv';
var MSG_OBJ_NUM     = 200;

var MSG_BOX_DIV     = 'msgBoxDiv';
var MSG_BOX_NUM     = 300;

function xunit(sz) { return sz*8  + 'px;'}
function yunit(sz) { return sz*10 + 'px;'}

function clsInfoBox     ( owner, visihlp )
{
	var m_visi      = (visihlp == 'undefined')?new clsViewHelper():visihlp;
	var m_dlgbase   = null;//new clsDlgEvntsHandlerBs( id,m_visi);
	
	var m_owner     = (owner == 'undefined')?documen.getElementsByTagName('body')[0]:m_visi.getElement(owner);
	var m_this      = this;
	var m_bCreated  = false;
    var m_this      = this;
    var m_defparam  = { 'defwidth':250, 'defheight':280,'top':0,'left':0,'modal':null,
    		            'minwidth':256, 'maxwidth' :512,'minheight':48,'maxheight':128,
    		            'linemin' :20,  'linemax'  :30
                       };
	var m_defshowcallback = null;

    this.addButton  = function( btnprop, row ) {  m_dlgbase.addButton( btnprop, row ); }
    this.is_created = is_created;
    this.isDlgOpen  = function( ) { return m_dlgbase.isDlgOpen();}
	this.create     = create;
	this.createmodal= createmodal;
	this.getdlg     = function() { return m_dlgbase.getdlg( );}
	this.moveto     = moveto;
	this.setautopos = setautopos;
	this.setColors  = setColors;
	this.setcontent = setcontent;
	this.setprop    = function( prop )
	{   for ( var i in prop )
			m_defparam[i] = prop[i];
	}
	this.setshowcallback = function( fn )
	{
		m_defshowcallback = fn;
	}
	

    this.setheader  = function( txt) { m_dlgbase.setheader( txt ); }

	this.setposatcursor = function( ) { m_dlgbase.setposatcursor(); }
	this.show           = function( enable,bAtCursor )
	{   if ( m_defparam.modal ) m_visi.setVisible( m_defparam.modal, enable );
		     m_dlgbase.showdlg(event, enable, bAtCursor );
        if ( m_defshowcallback != null )
             m_defshowcallback();
	}
	this.showdlg        = function( event, enable, bAtCursor )
	{   
		m_this.show( enable, bAtCursor );
	}

    function is_created     ( ) { return m_bCreated; }
    function createbox      ( )
    {   var box    = document.createElement('div');
	    
	    box.setAttribute( 'id', m_dlgbase.getdlg().dlgid);  
	    box.style.position    = 'absolute'; 
	    box.style.background  = 'none'; 
	    box.style.visibility  = 'hidden';
	    
	    box.style.width       = m_defparam.defwidth  + 'px';
	    box.style.height      = m_defparam.defheight + 'px';
	    box.style.left        = m_defparam.left + 'px';
	    box.style.top         = m_defparam.top  + 'px';
	    box.style.zIndex      = '103';
	    
		var title = m_dlgbase.createTitleBar( );

        var contentdiv = document.createElement("div");
	    contentdiv.setAttribute( "id", m_dlgbase.getdlg().content );
		//margin:0px auto;
	    var st3    = { 'border': '1px solid black','background-color': 'white', 'overflow': 'auto', 'text-align': 'left', 'display': 'block' };
/*		
	    var st3    = { 'position': 'relative', 'left': '0px', 'top': '3px', 'border': '1px solid black',
	                'background-color': 'white', 'overflow': 'auto', 'vertical-align': 'middle',
	                'text-align': 'center', 'margin': 0};
*/					
	    m_visi.setStyles( contentdiv, st3);
	    
	    box.appendChild  ( title  );
	    box.appendChild  ( contentdiv );
        return box;
    }
	function createmodal    ( )
	{   if ( is_created()) return true;
	    var bod = document.getElementsByTagName("body")[0];
	    var pan = document.createElement('div');

	    pan.setAttribute( 'id', m_dlgbase.getdlg().splash);  
	    pan.style.position    = 'absolute'; 
	    pan.style.background  = 'none'; 
	    pan.style.visibility  = 'hidden';
	    
	    var brc = m_visi.getmaxdim( );
	    
	    pan.style.width       = brc.width  + 'px';
	    pan.style.height      = brc.height + 'px';
	    pan.style.left        = 0  + 'px';
	    pan.style.top         = 0  + 'px';
	    pan.style.zIndex      = '103';
	    pan.style.display     = 'block';
	    pan.style.backgroundImage  = 'url(images/sys/bg_transp_50.gif)';
	    pan.style.backgroundRepeat = 'repeat';
	    
	    m_defparam.modal = pan;
	    
	    var box = createbox( );
	    pan.appendChild  ( box );
	    bod.appendChild  ( pan );
		
		m_dlgbase.initDialog( );
	
	    m_bCreated    = true;
	    return m_bCreated;
	}
	
	function create     ( )
	{   if ( is_created()) return true;
	    m_dlgbase = new clsDlgEvntsHandlerBs(  MSG_OBJ_DIV + (++MSG_OBJ_NUM),m_visi); 
	    m_dlgbase.setclosebtn( {'xclose':{'src':"images/sys/close.png",'title':' Close ','callback':m_this.showdlg}});
	
	    var bod = document.getElementsByTagName("body")[0];
	    
	    var box = createbox( );
	    bod.appendChild  ( box );
	    var ifr = m_dlgbase.iframecreate( );
	    bod.appendChild  ( ifr );

		m_dlgbase.initDialog ( );
	    m_bCreated    = true;
	    return m_bCreated;
	}
	this.errmessage = function ( message )
	{   if ( !is_created()) return;
	    m_this. setheader( 'Warning');
	    var tspl = splittext(message,m_defparam.linemin,m_defparam.linemax,"<br>");
		var s    = '';
	    s +=' <div style="padding: 5px; width: ' + xunit(tspl.emxlen) + ' height:' +  yunit(tspl.emylen)  + 
	              ' vertical-align:middle; text-align: center; display:block;">';
	    s +='<span style="font-weight:bold;">';
	    s += tspl.text;
	    s += ' </span></div>';
	    setcontent( s, true );
	}
	this.message    = function ( msg )
	{   if ( !is_created()) return;
	    m_this. setheader( 'Message');
	    var tspl = splittext(msg,m_defparam.linemin,m_defparam.linemax,"<br>");
		var s    = '';
	    s +=' <div style="margin:0; padding: 5px; width: ' + xunit(tspl.emxlen) + ' height: ' + yunit(tspl.emylen) + ' vertical-align:middle; text-align: center;">';
	    s += tspl.text;
	    s += ' </div>'; 
	    setcontent( s, true );
	}
	function moveto     ( x,y )
	{
		if ( !is_created()) return;
	    if ( x < 0 || y < 0 ) return;
		var dlg   = m_visi.getElement   ( m_dlgbase.getdlg().dlgid   );
		var rcTit = m_visi.getObjectRect( m_dlgbase.getdlg().title   );
		var con   = m_visi.getElement   ( m_dlgbase.getdlg().content );
		var rcCon = m_visi.getObjectRect( con );
		if ( dlg )
		{   
			var rcDlg = m_visi.getObjectRect( dlg );
			var p     = {'x':x,'y':y};
			dlg.style.left = p.x +'px';
	    	dlg.style.top  = p.y +'px';
	    	
			var inobj   = getInRect( con );
			var inn     = inobj.rc;
			
			var w_inn   = rcCon.width;
			var h_inn   = rcCon.height;
			if ( w_inn < ( inn.width  + 25)) w_inn = inn.width   + 25;
			if ( h_inn < ( inn.height + 25)) h_inn = inn.height  + 25;
			
			if ( w_inn < m_defparam.minwidth) w_inn = m_defparam.minwidth;
			if ( w_inn > m_defparam.maxwidth) w_inn = m_defparam.maxwidth;
			
			if ( h_inn < m_defparam.minheight) h_inn = m_defparam.minheight;
			if ( h_inn > m_defparam.maxheight) h_inn = m_defparam.maxheight;
			
			dlg.style.width  = w_inn +'px';
	    	dlg.style.height =(h_inn + rcTit.height + 8) + 'px';
			
	    	con.style.width  = w_inn + 'px';
	    	con.style.height = h_inn + 'px';

			if ( inobj.id != con.id )
			{   var o  = inobj.elm;
				var ro =  m_visi.getObjectRect( o );
				var m  = (w_inn - ro.width ) >> 1;
				m -= 5;
				if ( m < 0 ) m = 0;
				if ( ro.width < w_inn )
				      m_visi.setStyles( o,{'margin-left':m, 'margin-right':m} );
				else  m_visi.setStyles( o,{'margin-left':0, 'margin-right':0, 'margin': '0px auto'});
			}

		}
	}
	function setcontent     ( htmlContent, bInContent )
	{   if ( !is_created()) return;
		var obj = m_visi.getElement( m_dlgbase.getdlg().content );
	    var s   =' <div style="padding: 0; text-align: center; margin: 5px auto; display:block; border: 0px solid green;">';
		s += htmlContent;
		s += "</div>";
		if ( obj ) obj.innerHTML = s;//htmlContent;
		if ( bInContent == undefined ) bInContent = false;
		setautopos(true, bInContent);
	}
	function posAtCursor( rc )
	{   var p = m_visi.getCursorPos();
	    if ( p.x != -1 )
	    	 return {x:p.x, y:p.y, width:rc.width, height:rc.height};
	    return 	centerInOwn( rc ) 
	}
	function centerInOwn( rc )
	{   var rcOwner = m_visi.getObjectRect( m_owner  );
		var x = rcOwner.left  + (rcOwner.width  - rc.width )/2;
		var y = rcOwner.top   + (rcOwner.height - rc.height)/2;
		return {x:x, y:y, width:rc.width, height:rc.height};
	}
	function getInRect  ( indiv )
	{   var a = indiv.childNodes;
    	var node = null;
    	for ( var k = 0; k < a.length; k++)
    		if ( a[k].nodeType == 1 ) { node = a[k]; break; }
    	if ( !node ) node = indiv;
		var retobj = { 'rc':m_visi.getObjectRect( node ), 'elm': node };
		return retobj;
	}
    function setautopos ( visible, bInContent )
	{   if ( !is_created()) return;
		var visible = (visible == undefined )?false:visible;
		var dlg   = m_visi.getElement   ( m_dlgbase.getdlg().dlgid   );
		var rcTit = m_visi.getObjectRect( m_dlgbase.getdlg().title   );
		var con   = m_visi.getElement   ( m_dlgbase.getdlg().content );

		var bInContent = (bInContent == undefined )?false:bInContent;

		if ( dlg )
		{   
			var rcDlg = m_visi.getObjectRect( dlg );
			var p     = {x:-1,y:-1};
			
			if ( !bInContent )
				 p = posAtCursor( rcDlg );
			else p = centerInOwn( rcDlg );
			moveto( p.x, p.y);
			m_this.showdlg( null,visible);
		}
	}
	function setColors  ( bkg, clr )
	{   var dlgi = $(m_this.getdlg( ).content);
	    dlgi.style.backgroundColor = bkg;
	    dlgi.style.color = clr; 
	}
	this.setFont = function ( )
	{   var dlgi = $(m_this.getdlg( ).content);
	    for ( var i=0; i < arguments.length; i=i+2)
		      m_visi.setStyleA( dlgi, arguments[i],arguments[i+1]);
	}
	
};
function clsMsgBox          ( owner, id, visihlp )
{   var m_visi        = (visihlp == undefined )?new clsViewHelper():visihlp;
	var m_owner       = m_visi.getElement(owner);

	var m_id          = id + "1";
	var m_bCreated    = (m_visi.getElement   ( m_id ))?true:false;
	var m_htmlContent = '';
	var m_callback    = null;
	
	
	var m_bg_set = 
	{   lt: 'images/sys/pannels/pan1_lt.png', 
		top:'images/sys/pannels/pan1_top.png', 
		rt: 'images/sys/pannels/pan1_rt.png',
		lef:'images/sys/pannels/pan1_lef.png',
		ct: 'images/sys/pannels/pan1_ct.png',
		rig:'images/sys/pannels/pan1_rig.png',
		lb: 'images/sys/pannels/pan1_lb.png', 
		bot:'images/sys/pannels/pan1_bot.png', 
		rb: 'images/sys/pannels/pan1_rb.png'
	}; 
	//m_prop.margin
	var m_prop   = 
	{   margin   :   '0px auto',
	    imgsize  : {width:24,height:24},
		minwidth : 180
	};
	var m_this      = this;

	this.create     = create;
	this.setcontent = setcontent;
	this.is_created = is_created;
	this.setimgs    = function( imgset )
	{   for ( var i in imgset )
			m_bg_set[i] = imgset[i];
	}
	this.setprop    = function( prop )
	{   for ( var i in prop )
			m_prop[i] = prop[i];
	}

	this.getborderwidth = function( ) {   return m_prop.imgsize.width;	}
    function is_created ( ) { return m_bCreated; }
	function setcontent ( htmlContent, callbackFn )// callbackFn - no parameters. Any content changes after main creating as: add buttons ...
	{   m_htmlContent = htmlContent;
	    if ( callbackFn != undefined )
		     m_callback = callbackFn;
	    if ( !is_created()) return;
		var box   =  m_visi.getElement   ( m_id );
	    if ( box ) box.innerHTML = m_htmlContent;
		if ( m_callback != null ) m_callback( );
	}
	function createmessage     ( )
	{   if ( is_created()) return true;
		if ( m_owner == null )
		{   var id = MSG_BOX_DIV + (++MSG_BOX_NUM);
			m_owner = m_visi.createDivLayer ( document.getElementsByTagName('body')[0], id, 
											{ 'border':"0px solid #ffffff", 'position':'absolute', 'left':300, 'top': 300, 'width':(m_prop.minwidth+10)});
		}

	    var o = $(m_owner);
	    var w = parseInt(visi.getStyle( o, 'width', 1),10);
		var imgw = m_this.getborderwidth( )*2;

        if ( isNaN(w) || (w - imgw) < m_prop.minwidth )
	    {   
			w = m_prop.minwidth+imgw;
	    }
		o.innerHTML = buildMessageTable( w - imgw );
		
		m_bCreated  = true;	
	}

	function create     ( before )
	{   if ( is_created()) return true;
		createmessage( );
		if ( m_htmlContent ) setcontent ( m_htmlContent );
	}
	function getInRect  ( indiv )
	{   var a = indiv.childNodes;
    	var node = null;
    	for ( var k = 0; k < a.length; k++)
    		if ( a[k].nodeType == 1 ) { node = a[k]; break; }
    	if ( !node ) return m_visi.getObjectRect( indiv );

    	return m_visi.getObjectRect( node );
	}
	function buildMessageTable( width )
	{   var w = (m_prop.imgsize.width  == -1)?24:m_prop.imgsize.width;
	    var h = (m_prop.imgsize.height == -1)?24:m_prop.imgsize.height;

		var s = '';
		if ( typeof width == 'string')
			 s +='<table width="' + width + '" cellpadding="0" cellspacing="0" border="0" style="border: 0px solid green; margin:0; padding:0; width: ' + width + '; margin: '   + m_prop.margin + ';"> ';
		else s +='<table width="' + width + '" cellpadding="0" cellspacing="0" border="0" style="border: 0px solid green; margin:0; padding:0; width: ' + width + 'px; margin: ' + m_prop.margin + ';"> ';
		s +='<tbody><tr> ';
		s +='<td style="width:'  + w + 'px; height:' + h + 'px; background-image:url(' + m_bg_set.lt + ');  background-repeat:no-repeat;"></td> ';
		s +='<td style="height:' + h + 'px; background-image:url(' + m_bg_set.top + '); background-repeat:repeat-x;"></td> ';
		s +='<td style="width:'  + w + 'px; height:' + h + 'px; background-image:url(' + m_bg_set.rt + ');  background-repeat:no-repeat;"></td></tr> ';
		s +='<tr> ';
		s +='<td style="background-image:url(' + m_bg_set.lef + '); background-repeat:repeat-y; width:' + w + 'px;"></td> ';
		s +='<td id="' + m_id + '" style="background-image:url(' + m_bg_set.ct  + '); background-repeat:repeat;"> ';
		
//		s += htmlContent;
		
		s +='<!-- plaseholder --> ';
		s +='</td> ';
		s +='<td style="background-image:url(' + m_bg_set.rig + '); background-repeat:repeat-y; width:' + w + 'px;"></td> ';
		s +='</tr> ';
		s +='<tr> ';
		s +='<td style="width:'  + w + 'px; height:' + h + 'px; background-image:url(' + m_bg_set.lb + ');  background-repeat:no-repeat; "></td> ';
		s +='<td style="height:' + h + 'px; background-image:url('+ m_bg_set.bot + '); background-repeat:repeat-x;"></td> ';
		s +='<td style="width:'  + w + 'px; height:24px; background-image:url(' + m_bg_set.rb + ');  background-repeat:no-repeat;"></td></tr> ';
		s +='</tbody></table> ';
		return s;
		
	}
	
};
function isWhitespace       ( charToCheck, whitespaceChars )
{   var whitespaceChars = (whitespaceChars != undefined )?whitespaceChars:"\t\n\r\f !&()*+,-.:;=[]^_{|}?";
	return (whitespaceChars.indexOf( charToCheck ) != -1);
}
function wordWrap           ( str,len1,len2, brkSym)
{   var c,s ='',l1 = len1,l2 = len2;
    if ( brkSym == undefined || brkSym.length == 0)
    	brkSym = "\n";

    for ( var i = 0; i < str.length; i++ )
    {   c  = str.charAt(i);
	    s += c;
        if ( (isWhitespace(c) &&  s.length >= len1) || (s.length > len2))
        {   if ( brkSym != c )
   	             s += brkSym;
        	len2 = s.length+l2;
        	len1 = s.length+l1;
        }
    }
    return s;
}
function splittext          ( text,minl,maxl,brk)
{   var splitedtext = wordWrap(text,minl,maxl, brk );
    var k1 = 0, k2 = 0, m = 0, mx = 0,hy = 1;
    while( (k2 = splitedtext.indexOf( brk,k1)) != -1)
    {   m  = k2-k1+1;
    	k1 = k2+brk.length;
    	if (mx < m ) mx = m;
    	hy++;
    }
    if ( mx == 0 ) mx = splitedtext.length;
    return {'text':	splitedtext, 'xlen':mx, 'emxlen':mx*0.85,'ylen':hy,'emylen':hy*1 };
}
function utilCreateDialog   ( title, bModal,param )
{   var msgbox = new clsInfoBox( CONTENT_DIV_ID, visi );
    if ( param != undefined  ) msgbox.setprop( param );
    if ( bModal == undefined ) bModal = false;
    if ( bModal == false )
         msgbox.create     ( );
    else msgbox.createmodal( );
    msgbox.setheader( title );
    return msgbox; 
}
function utilErrorMessage   ( message )
{   
    if ( typeof utilErrorMessage.sta_msgbox == 'undefined' )
    {   utilErrorMessage.sta_msgbox = utilCreateDialog( "Warning");
		utilErrorMessage.sta_msgbox.setColors( '#a00000','white');
    }
    if ( message != undefined && message.length)
	{
	     var bAsContent = ( message.indexOf( "<") >= 0 && message.indexOf( "</") >=0)?true:false;
		 if ( bAsContent == true )
		      utilErrorMessage.sta_msgbox.setcontent(message,true);
         else utilErrorMessage.sta_msgbox.errmessage(message);
	}
    return utilErrorMessage.sta_msgbox;
}
function utilInfoMessage    ( msg )
{   
    if ( typeof utilInfoMessage.sta_infobox == 'undefined' )
    {   utilInfoMessage.sta_infobox = utilCreateDialog( "Info",false,{'linemin':30,'linemax':40});
		utilInfoMessage.sta_infobox.setColors( '#ffffff','black');
		utilInfoMessage.sta_infobox.setFont  ( 'font-weight','bold','font-family','arial');
		utilInfoMessage.sta_infobox.setprop  ( {'maxwidth':300,'maxheight':300 });
	}
	
	
    if ( msg != undefined && msg.length)
    {   var bAsContent = ( msg.indexOf( "<") >= 0 && msg.indexOf( "</") >=0)?true:false;   
	    if ( bAsContent == true )
		     utilInfoMessage.sta_infobox.setcontent(msg);
	    else utilInfoMessage.sta_infobox.message   (msg);
    }
    return utilInfoMessage.sta_infobox;
}
function modal_waitloop     ( state, param )
{   switch( state )
    {   case TM_STATE_START: break;
        case TM_STATE_RUN:
            if ( param.dialog.isDlgOpen() == false )
                param.timer.stoptm( );
            break;
        case TM_STATE_STOP: 
        	param.fnmodal( param.modalparam);
            break;
    }
}
function utilModalMessage   ( msg, msgType, fnModalComplete, param )
{   
    if ( typeof utilModalMessage.sta_modbox == 'undefined' )
	{   var def = { 'defwidth':350, 'minwidth':256, 'linemin':30, 'linemax':40};
	    utilModalMessage.sta_modbox = utilCreateDialog( "Message",true,def);
	    utilModalMessage.sta_modbox.setColors( '#ffffff','black');
	}
    if ( msg == undefined || msg.length == 0 )
    	 return utilModalMessage.sta_modbox;
    if ( msgType == undefined || msgType == null ) msgType = 'Message';
    utilModalMessage.sta_modbox.setheader( msgType );
    if ( msgType == 'Error' || msgType == 'Warning')
    	 utilModalMessage.sta_modbox.errmessage( msg );
    else utilModalMessage.sta_modbox.message   ( msg );

	if ( fnModalComplete != undefined )
	{	var tm = new timerAction( modal_waitloop, modal_waitloop, modal_waitloop );
	    var pm = {'fnmodal':fnModalComplete,'modalparam':( param != undefined )?param:null,
	    		  'dialog':utilModalMessage.sta_modbox,'timer':tm};
	    tm.starttm( pm );
	}
	return utilModalMessage.sta_modbox;
}
function utilSetDlgColors   ( dlg, bkg, clr) { dlg.setColors( bkg,clr); }
function utilSetDlgPos      ( dlg, x,   y  ) { dlg.moveto( x, y); }

