// Javascript debugging functions

	function debug_view(frame){
		if(!frame) {
			alert('debugging: selected frame is not valid!');
			return;
		}
		alert(sub_listframes(frame));
		formTest(frame);
	}

	var ret_level=0;
	function framelister(){
		var ret=sub_listframes(parent.opener.top);
		alert(ret);
	}
	function sub_listframes(obj){
		var ret='';
		if(obj.frames){
			for(var i=0; i<obj.frames.length; i++){
				for(var j=0;j<ret_level;j++) ret+="-";
				ret+='name:'+obj.frames[i].name+'\n';
				for(var j=0;j<ret_level;j++) ret+="-";
				ret+='form:'+obj.frames[i].document.forms.length+"\n";
				ret+=' loc:'+obj.frames[i].document.location.href+'\n';
				ret_level++;
					ret+=sub_listframes(obj.frames[i]);
				ret_level--;
			}
		}
		return ret;
	}

	//get list of all available form elements
	function formTest(obj){
		if(!obj.forms || obj.forms.length<1) return; //no forms
        var txt='form info:';
        for(var i=0; i< obj.forms.length; i++){
            var curform=obj.forms[i];
            for(var j=0;j<curform.elements.length; j++){
                var curelem=curform.elements[j];
                txt+=curelem.style.border+'\n '+curelem.disabled+' '+curelem.type+'\n '+curelem.name+'='+curelem.value+'\n\n';

            }
        }
        alert(txt);
    }

	function dbg(o) {
		var s = "";
		var i = 0;
		for (var p in o) {
			/*if(o[p]!="")*/
				s += p + ": " + o[p] + "\n";
			if (++i % 20 == 0) {
				alert(s);
				s = "";
			}
		}
		alert(s);
	}
