var initArg, debugWin, debugOut, isOpera;
function openDebugWin(arg){
	//if(frames.debugWin)debugWin.close();
	if (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) && typeof(console)=='undefined'){
		//alert(navigator.userAgent +':'+/opera/i.test(navigator.userAgent));
		//reinit = function(){init(arg)}
		initArg = arg;
		debugWin = window.open('debugWin.php', 'debugWindow', 'left=0,top=0,width=400,height=400,scrollbars=yes');
		return;
	}	
	 (/opera/i.test(navigator.userAgent)) ? isOpera = 1: isOpera = 0;
	init(arg)
}
function debug(m){
	//return;
	if(typeof(dump)!='undefined'){
		dump(m+'\n')
		return
		}
	if(typeof(console)!='undefined'){
		console.log(m);
		return;
	}
	if(isOpera)
		opera.postError(m);
	if(!debugWin || !debugWin.dOut)return;
	//debugWin.document.write(m+'<br>');
	debugWin.dOut.value +=(m+'\n');
	//debugWin.scrollTo(0, debugWin.document.body.scrollHeight)
	debugWin.focus();
	} 
function dumpObject(o, deep){ 
	deep ? deep=true : deep = false
	debug('dump:'+o+' recursive:'+deep); 
	for(e in o){
		try{
			debug(e+'->'+o[e] + ':'+typeof(o[e]));
			if(deep && typeof(o[e]) == 'object') dumpObject(o[e], 1);
		}
		catch(ex){
			debug(e+ ' exception:'+ex)
		}
	}
}
function dumpArray(a){
	debug(a+' len:'+a.length+' typeof:'+typeof(a));
	for(var i=0;i<a.length;i++)debug(i+'->'+a[i]);
}
function dumpLayout(el, recursive){

	var m = 'el:' + el.id +':'+el.nodeName;
	var jQ = $(el);
	m  +=  ' left:' + jQ.position().left + ' top:' + jQ.position().top +' width:' + jQ.width() + 
	' height:' + jQ.height() + ' visibility:' + jQ.css('visibility') + ' display:' + jQ.css('display') + ' position:' + jQ.css('position') 
	+ ' class:' + el.className +' overflow:' + jQ.css('overflow') + ' opacity:' + jQ.css('opacity');
	debug(m);
	if(recursive && el.parentNode.nodeName != 'body')
		dumpLayout(el.parentNode, recursive);

}
function dumpXml(node)
{
	var xs = new XMLSerializer();
	debug(xs.serializeToString(node));
}
