var Logger  = (clsLogger) ? new clsLogger() : null;
if(debugMenu && window.location.href.indexOf("troubleshoot")<0) Logger.setLevel("PROFILE");
Logger.info("Logger", (Logger) ? "loaded." : "failed to load.");

/**
 * Class for getting different documents from the net. 
 * Handles getting documents as strings and also the loading
 * of XML into DOMs.
 *
 * @author Paul Reed NetCall Telecom
 */

function clsLogger()
{
	var m_L="s";
	var m_W=null;
	var m_T = (new Date()).getTime();
	var m_E = 0;
	var m_R=false;
	var ttl = 'Site Debug';
	var on=false;
	
	//methods
	this.setTitle = _ttl;
	this.severe = _sv;
	this.warning = _wn;
	this.info = _in;
	this.showLog = _sl;
	this.setLevel = _lv;
	this.getLevel = _glv;
	this.ASSERT = _as;
	this.close	= _cl;
	
	function _ttl(nt) { ttl = nt; }
	
	function _cl()
	{
		if(m_W!=null && m_W.close) m_W.close();
		m_W=null;
	}
		
	function _glv()
	{
		return m_L;
	}
	//set the logging level
	function _lv(sL)
	{
		m_L = "s";
		switch(sL)
		{
			case "DISABLE": m_L = ""; break;
			case "SEVERE":  m_L = "s"; break;
			case "WARNING": m_L = "sw"; break;
			case "INFO":    m_L = "swi"; break;
			case "PROFILE": m_L = "swit"; break;
		}
		on = (m_L!="")
	}
	
	function _sv()	{ if(on) _lg(arguments,true); }

	//log a warning message.
	function _wn() { if(on) _lg(arguments,false); }

	//log an info message.
	function _in()	{ 
		if(on) _lg(arguments,false); }
	
	function _lg(ag,wE)
	{
		if (m_L.indexOf(_gCN(_lg).substr(1,1))==-1) return;
		txt = _gAS(ag);
		_sl();
		if(!m_R) return;
		_aLG(txt);
		if(wE && ncEventOnError!=null && ncEventOnError!='') 
			ncEventOnError(txt.replace('style','nostyle'));
	}

	function _gAS(ag)
	{
		var i=0,hl;
		var sL='';
		
		switch(_gCN(_gAS.caller).substr(1,1))
		{
			case "i": hl=''; break;
			case "w": hl='orange'; break;
			case "s": hl='tomato'; break;
		}			
		if(_gAS.caller && _gAS.caller.caller)
		{
			sL='<B>'+_gCN(_gAS.caller).substr(1)+'</B>\t';
			if(_gAS.caller.caller.caller) 
				cn = _gCN(_gAS.caller.caller);
			else
				cn = (ag.length>1) ? ag[i++] : '';
			sL += "(" + cn + ")\t";
			if(cn.length<6) sL+="\t";
		}
		if(typeof(ag)=='object')
		{
			for(i=i ; i<ag.length;i++)
			{
					if(typeof(ag[i])=='string')
					{
						if(ag[i].substr(0,1)=='|')
						{
							hl='yellow';
							ag[i]=ag[i].substring(1);
						}
					}
					sL+=':'+ag[i];
			}
		}
		else sL+= ag;

		if(hl!='') sL = "<span style='background-Color:"+hl+";'>"+sL+"</span>";
		return sL;
	}

	//assert that the given var is non null, logging message as severe if it is.
	//NOTE: Will also assert strings to be non-empty.
	function _as(oV, sM)
	{
		if (oV == null)
		{
			_sv(sM);
			return true;
		}
		
		if (oV instanceof String)
		{
			if (oV=="") _sv(sM);
			return true;
		}

		return false;
	}
	
	function _sl()
	{
		if ((m_W==null)||(m_W.closed))
		{
			try
			{
				m_W = window.open("", "Logger", "WIDTH=400, HEIGHT=160, dependent, status, scrollbars, top=50, left=50");
				if(m_W!=null)
				{
					m_W.resizeTo(800, 400);
					m_W.document.open();
					m_W.document.write("<link rel=\"stylesheet\" "+ ERRORSTYLES + " type=\"text/css\">");
					m_W.document.write("<H1>" + ttl + " " + (new Date()).toGMTString() + "</H1><pre>");
					m_R=true;
					return;
				}
			}
			catch(p) { };
			m_R=false;
		}		
	}
	
	function _gCN(oF)
	{
		var sC = (oF.caller) ? oF.caller.toString() : ' unknown(';
		return sC.substring(sC.indexOf(" ")+1, sC.indexOf("("));
	}
	
	function _aLG(sL)
	{
		var nT,ft,et;
		if (m_L.indexOf('t')!=-1)
		{
			nT = (new Date()).getTime();
			ft = (nT - m_T);
			m_E += ft;
			et = ('0000000'+m_E).substring(m_E.toString().length);
			ft = ('0000000'+ft).substring(ft.toString().length);
			m_W.document.write("[" + et + ":" + ft + "] ");
			m_T = nT;
		}

		m_W.document.write(sL);
		m_W.document.write('<BR/>');
		var b = m_W.document.getElementsByTagName('BR');
		if(b.length) b[b.length-1].scrollIntoView(true);
	}
}
