// JavaScript Document
TRACE_CLASS = new Class({
						
	list: [],
	
	options: {
            show: true,
			log: false,
			
			mainTraceDivStyle: {
				position: 'fixed',
				bottom: '0px',
				left: '0px',
				width: window.top.innerWidth-30+'px',//Window.getSize().x - 30 +'px',
				margin: '0px',
				'font-family': 'tahoma',
				cursor: 'default',
				border: '1px dashed #DDD'
			},
			nodeTraceDivStyleMin: {
				float: 'left',
				border: '1px solid #999',
				width: '150px',
				height: '21px',
				margin: '2px',
				background: '#FFFEF5',
				overflow: 'hidden',
				position: ''
			},
			nodeTraceDivStyleMax: {
				position: 'fix',
				top: '4px',
				left: '4px',
				border: '1px solid #999',
				width: window.top.innerWidth-30+'px',//Window.getSize().x - 30 +'px',
				margin: '2px',
				background: '#FFFEF5',
				overflow: 'hidden'
			},
			bodyTraceDivStyle: {
				'font-family': 'tahoma',
				'font-size': '12px',
				'font-weight' : 'normal',
				color: '#333',
				padding: '4px',
				overflow: 'auto',
				margin: '3px 1px 0 0'
			},
			headerTraceDivStyle: {
				height: '19px'
			},
			titleTraceDivStyle: {
				width: window.top.innerWidth+'px',//Window.getSize().x+'px',
				'border-bottom': '1px solid #999',
				height: '19px',
				background: '#3366CC',
				color: '#FFF',
				cursor: 'default',
				'font-size': '13px',
				padding: '2px 0 0 0'
			},
			resizeTraceDivStyle: {
				float: 'left',
				width: '15px',
				border: '1px solid #999',
				height: '15px',
				'background-color': '#000000',
				margin: '2px',
				color: '#EEE',
				'font-weight': 'bold',
				overflow: 'hidden',
				'text-align': 'center',
				cursor: 'default',
				opacity: '0.5'
			},
			closeTraceDivStyle: {
				float: 'left',
				width: '15px',
				border: '1px solid #999',
				height: '15px',
				'background-color': '#DD3333',
				margin: '2px 0 2px 2px',
				color: '#EEE',
				overflow: 'hidden',
				'text-align': 'center',
				cursor: 'default',
				opacity: '0.5'
			}
    },
	
	initialize: function()
	{
		this.mainTraceDiv = window.top.document.getElementById('mainTraceDiv');
		if(!this.mainTraceDiv) {
			this.mainTraceDiv = new Element('DIV');
			this.mainTraceDiv.setStyles(this.options.mainTraceDivStyle);
			this.mainTraceDiv.id = 'mainTraceDiv';
			this.mainTraceDiv.injectInside(window.top.document.body);
			this.mainTraceDiv.addEvent('mouseover', (function(e){
				this.mainTraceDiv.setStyle('z-index', 20000);
			}).bind(this));
			this.mainTraceDiv.addEvent('mouseout', (function(e){
				this.mainTraceDiv.setStyle('z-index', '');
			}).bind(this));
		}
	},
	
	show: function()
	{
		for(var i=0; i<this.list.length; i++) {
			
			if(typeof(console)!='undefined' && this.options.log)
				console.log(this.list[i].title+':\n'+this.list[i].value);
			if(!this.options.show)
				continue;	
				
			var nodeTraceDiv = new Element('DIV');
			var headerTraceDiv = new Element('DIV');
			var titleTraceDiv = new Element('DIV');
			var resizeTraceDiv = new Element('DIV');
			var closeTraceDiv = new Element('DIV');
			var bodyTraceDiv = new Element('DIV');
			nodeTraceDiv.setStyles(this.options.nodeTraceDivStyleMin);
			headerTraceDiv.setStyles(this.options.headerTraceDivStyle);
			bodyTraceDiv.setStyles(this.options.bodyTraceDivStyle);
			closeTraceDiv.setStyles(this.options.closeTraceDivStyle);
			resizeTraceDiv.setStyles(this.options.resizeTraceDivStyle);
			titleTraceDiv.setStyles(this.options.titleTraceDivStyle);
			
			nodeTraceDiv.injectInside(this.mainTraceDiv);
			headerTraceDiv.injectInside(nodeTraceDiv);
			bodyTraceDiv.injectInside(nodeTraceDiv);	
			closeTraceDiv.injectInside(headerTraceDiv);
			resizeTraceDiv.injectInside(headerTraceDiv);
			titleTraceDiv.injectInside(headerTraceDiv);
			
			nodeTraceDiv.addClass('nodeTraceDiv');
			headerTraceDiv.addClass('headerTraceDiv');
			bodyTraceDiv.addClass('bodyTraceDiv');
			closeTraceDiv.addClass('closeTraceDiv');
			closeTraceDiv.setStyle('float', 'left');
			resizeTraceDiv.addClass('resizeTraceDiv');
			resizeTraceDiv.setStyle('float', 'left');
			titleTraceDiv.addClass('titleTraceDiv');
			
			titleTraceDiv.set('html', this.list[i].title);
			bodyTraceDiv.set('html', '<pre style="margin-top:2px">'+this.list[i].value+'</pre>');
			
			resizeTraceDiv.set('html', '<div style="margin:0">+</div>');
			closeTraceDiv.set('html', '<div style="margin:0">x</div>');
			
			closeTraceDiv.addEvent('click', (function(){$(this).getParent().getParent().dispose()}).bind(closeTraceDiv));
			resizeTraceDiv.addEvent('click', this.restore.bind(this));
			//closeTraceDiv.onclick = function(){alert(this); this.getParent().getParent().dispose()};
			
			closeTraceDiv.addEvent('mouseenter', this.btnEnter);
			resizeTraceDiv.addEvent('mouseenter', this.btnEnter);
			
			closeTraceDiv.addEvent('mouseleave', this.btnLeave);
			resizeTraceDiv.addEvent('mouseleave', this.btnLeave);
		}
	},
	
	restore: function(e){
		var e = new Event(e);
		var me = $(e.target);
		while(me.getFirst())
			me = me.getFirst();
		var nodeTraceDiv = me.getParent().getParent().getParent();
		var bodyTraceDiv = me.getParent().getParent().getNext();
		me.getParent().removeClass('maxed_resizeTraceDiv');
		
		if(me.innerHTML == '+') { //maximize
			me.innerHTML = '-';
			while(this.mainTraceDiv.getElements('.maxed_resizeTraceDiv')[0])
				this.minimize(this.mainTraceDiv.getElements('.maxed_resizeTraceDiv')[0].getFirst());
			me.getParent().addClass('maxed_resizeTraceDiv');
			nodeTraceDiv.setStyles(this.options.nodeTraceDivStyleMax);
			nodeTraceDiv.setStyle('height', window.top.innerHeight - this.mainTraceDiv.getSize().y - 30 + 'px');	
			bodyTraceDiv.setStyle('height', nodeTraceDiv.getSize().y - 32 + 'px');
		} else { //minimize
			me.innerHTML = '+';
			nodeTraceDiv.setStyles(this.options.nodeTraceDivStyleMin);					
		}
	},
	
	minimize: function(me){
		var nodeTraceDiv = me.getParent().getParent().getParent();
		me.getParent().removeClass('maxed_resizeTraceDiv');
		me.innerHTML = '+';
		nodeTraceDiv.setStyles(this.options.nodeTraceDivStyleMin);
	},
	
	btnEnter: function(e){		
		var e = new Event(e);
		var me = $(e.target);
		while(me.getFirst())
			me = me.getFirst();
		me = me.getParent();
		var opChange = new Fx.Style(me, 'opacity', {duration:200});
		opChange.start(0.5, 1);

	},
	
	btnLeave: function(e){	
		var e = new Event(e);
		var me = $(e.target);
		while(me.getFirst())
			me = me.getFirst();
		me = me.getParent();
		var opChange = new Fx.Style(me, 'opacity', {duration:200});
		opChange.start(1, 0.5);
	}
});

function traceLoader()
{
	if(window.traceScript && document.body) {
		eval(window.traceScript);
		window.traceScript = null;
	}
	if(window.traceLoaderTO) clearInterval(window.traceLoaderTO);
	window.traceLoaderTO = setTimeout('traceLoader();', 500);
}

traceLoader();