/*
	Класс для отладки.
	имеет метод MSG для вывода отладочной информации.
	последнее сообщение всегда будет в верху.
	
	Автор : Акиньшин Д.А.
	Дата  : 2007-04-20
	Версия: 1.2
	
	Поддерживает изменение положения мышкой, перетаскивая заголовок.
	Клик на символ "X" закрывает окно.
	
	Использование
	
	var d=new CDebug(W,H,Left,Top,Header,MaxLen);
	d.MSG('test');
	
	W		- Ширина окна
	H		- Высота окна
	Left	- отступ с лева
	Top		- отступ с верху
	Header	- заголовок окна.
	MaxLen	- максимальная длина текста в символах. При привышении от текущего текста остаётся только треть.
			Отрицательное значение отключает обработку длины.
	
	Например:
	
	var d=new CDebug(100,100,0,0,'Test',2000);
*/
function CDebug(W,H,Left,Top,Header,MaxLen)
{
    var D=new Date();
    var ID=D.getTime().toString()+Math.floor(Math.random()*1000000);
    var me=this;
    var mMaxLen=MaxLen;
    var Enable=true;

    CDebug.prototype.Close=function()
	{
		me.curOutput.style.display='none';
		Enable=false;	
	}
	
    me.curOutput=document.createElement('div');
    me.curOutput.style.position='absolute';
    me.curOutput.style.left=Left.toString()+'px';
    me.curOutput.style.top=Top.toString()+'px';
    me.curOutput.style.height=H.toString()+'px';
    me.curOutput.style.width=W.toString()+'px';
    me.curOutput.style.border='solid 2px black';
    me.curOutput.style.backgroundColor='white';
    me.curOutput.style.color='blue';
    me.curOutput.old_x=0;
    me.curOutput.old_y=0;

    me.header=document.createElement('div');
    me.header.style.fontWeight='bold';
    me.header.style.color='red';
    me.header.style.height='20px';
    me.header.style.cursor='move';
    me.header.innerHTML=Header;
    me.header.style.width=W.toString()+'px';
    me.curOutput.appendChild(me.header);

	me.headerx=document.createElement('div');
	me.headerx.style.float='right';
	me.headerx.style.position='relative';
	me.headerx.style.top='-20px';
	me.headerx.style.left=(W-30).toString()+'px';
	me.headerx.onclick=me.Close;
	me.headerx.innerHTML="X"
	me.header.appendChild(me.headerx);
	
    me.out=document.createElement('div');

    me.out.style.height=(H-20).toString()+'px';
    me.out.style.width=W.toString()+'px';
    me.out.style.overflow='auto';
    me.curOutput.appendChild(me.out);

    me.old_x=0;
    me.old_y=0;

    me.flag=false;

    me.Global_MouseMove=function(e)
    {
        var ev=e?e:window.event;
        if(me.flag)
        {
            me.curOutput.style.left=(e.screenX-me.old_x+me.curOutput.old_x).toString()+'px';
            me.curOutput.style.top=(e.screenY-me.old_y+me.curOutput.old_y).toString()+'px';
        }
    }
    me.Header_MouseUp=function(e)
    {
        me.flag=false;
    }
    me.Header_MouseDown=function(e)
    {
        me.flag=true;
        me.curOutput.old_x=parseInt(me.curOutput.style.left.split('px')[0]);
        me.curOutput.old_y=parseInt(me.curOutput.style.top.split('px')[0]);
    }

    addEvent(me.header,'mousedown',me.Header_MouseDown,false);
    addEvent(me.header,'mouseup',me.Header_MouseUp,false);


    me.Global_MouseUp=function(e)
    {
        me.flag=false;
    }
    me.Global_MouseDown=function(e)
    {
        me.old_x=e.screenX;
        me.old_y=e.screenY;
    }
    addEvent(document,'mousemove',me.Global_MouseMove,false);
    addEvent(document,'mouseup',me.Global_MouseUp,false);
    addEvent(document,'mousedown',me.Global_MouseDown,false);


    me.curOutput.id=ID;
    document.body.appendChild(this.curOutput);
	
    CDebug.prototype.MSG=function(par)
    {
		if(!Enable) return;
		if(mMaxLen>0) if (me.out.innerHTML.length>mMaxLen) me.out.innerHTML=me.out.innerHTML.substr(0,Math.floor(mMaxLen/3));
       me.out.innerHTML= par+'<br/>'+me.out.innerHTML;
    }
}

