function getWatch(thingType,thing,checkbox) {
	var userCookie = getCookie('user');
	if(userCookie==null)
		userCookie = '';

	var svcName = 'getWatch';
	var call = new WS.Call('/know/services/Watch');

	var nsuri = 'http://service.forum.knowlist.com';
	var qn_op = new WS.QName(svcName,nsuri);
	var qn_op_resp = new WS.QName(svcName +'Response',nsuri);
	call.invoke_rpc(
	    qn_op,
	    new Array(
	      spv('userCookie',userCookie),
	      spv('thingType',thingType),
	      spv('thing',thing)
	    ),null,
	    function(call,envelope,xmlStr) {
			var body = envelope.get_body();
//logLineTo('log','RESULTXML: '+ xmlStrToHtml(xmlStr));

	    	var responseElem = getSubElem(envelope.get_body(),svcName +'Response',nsuri);
			var outVal = getSubElemVal(responseElem,'WatchStatus',nsuri);
			if(checkbox!=null)
				checkbox.checked = (outVal=='watchOn');
//logLineTo('log','getWatch RESULTXML: '+ xmlStrToHtml(xmlStr));
//logLineTo('log','getWatch RESULT: '+ outVal);
	    }
	);
}

// User is sent to loginUrl if they are not logged in.
function setWatch(thingType,thing,activate,loginUrl) {
	var userCookie = getCookie('user');
	if(userCookie==null)
		userCookie = '';
//logLineTo('log','setWatch activate='+ activate);

	var svcName = 'setWatch';
	var call = new WS.Call('/know/services/Watch');

	var nsuri = 'http://service.forum.knowlist.com';
	var qn_op = new WS.QName(svcName,nsuri);
	var qn_op_resp = new WS.QName(svcName +'Response',nsuri);
	call.invoke_rpc(
	    qn_op,
	    new Array(
	      spv('userCookie',userCookie),
	      spv('thingType',thingType),
	      spv('thing',thing),
	      spv('activate',(activate?1:0))
	    ),null,
	    function(call,envelope,xmlStr) {
	    	var responseElem = getSubElem(envelope.get_body(),svcName +'Response',nsuri);
//logLineTo('log','RESULTXML: '+ xmlStrToHtml(xmlStr));
			var outVal = getSubElemVal(responseElem,'WatchStatus',nsuri);
			if(outVal=='mustLogin') {
				window.location = loginUrl;
				return;
//				if(loginUrl==null || loginUrl=='') {
//					loginUrl = '/know/list/user/account/login/Login.do?dest='
//						http%3A%2F%2Fknowlist.com%2Fknow%2Fforum%2Flist%2FListMessages%3Ft%3D29%26first%3D0%26max%3D20%26topMsg%3D93%26mode%3Dthreaded
//				}
			}
//logLineTo('log','setWatch RESULTXML: '+ xmlStrToHtml(xmlStr));
//logLineTo('log','setWatch RESULT: '+ outVal);
//			if(checkbox!=null)
//				checkbox.checked = (outVal=='watchOn');
//logLineTo('log','setWatch RESULT: '+ outVal);
	    }
	);
}

/*
function getWatch(thingType,thing,checkbox,callSync) {
	var pl = new SOAPClientParameters();
	pl.add("userCookie",getCookie('user'));
	pl.add("thingType",thingType);
	pl.add("thing",thing);
	var callbackParam = new Object();
	callbackParam['thingType'] = thingType;
	callbackParam['thing'] = thing;
	callbackParam['checkbox'] = checkbox;
	return SOAPClient.invoke('/know/services/Watch', 'getWatch', pl, !callSync, getWatchCallback,callbackParam);
}
function getWatchCallback(r,xml,callbackParam) {
	var outVal = r['out'];
	var checkbox = callbackParam['checkbox'];
	if(checkbox!=null)
		checkbox.checked = (outVal=='watchOn');

//		logLineTo('log','result: '+ outVal);
}
*/
/*
function setWatch(thingType,thing,activate) {
//	GLOBAL_DEBUG_soapClientCallbackPassedXmlText = true;
	var pl = new SOAPClientParameters();
	pl.add("userCookie",getCookie('user'));
	pl.add("thingType",thingType);
	pl.add("thing",thing);
	pl.add("activate",activate);
	SOAPClient.invoke('/know/services/Watch', 'setWatch', pl, true, setWatchCallback);
}
function setWatchCallback(r,xml,callbackParam) {
//		logLineTo('log', 'XML:'+ xmlStrToHtml(xml.xml) );
	var outVal = r['out'];
//	logLineTo('log','RESULT: '+ outVal);
}
*/
/*
function getForumMessage(div,msgId,topMsg,firstMsgIx,maxMsgs,callSync) {
//	GLOBAL_DEBUG_soapClientCallbackPassedXmlText = true;
	var pl = new SOAPClientParameters();
	var userCookie = getCookie('user');
	if(userCookie==null)
		userCookie = '';
	pl.add("userCookie",userCookie);
	pl.add("msgId",msgId);
	pl.add("firstMsgIx",firstMsgIx);
	pl.add("maxMsgs",maxMsgs);
	pl.add("topMsg",topMsg);
	var callbackParam = new Object();
	callbackParam['div'] = div;
	callbackParam['topMsg'] = topMsg;
	callbackParam['firstMsgIx'] = firstMsgIx;
	callbackParam['maxMsgs'] = maxMsgs;
	return SOAPClient.invoke('/know/services/Forum', 'getMessage', pl, !callSync, getForumMessageCallback,callbackParam);
}
function getForumMessageCallback(r,xml,callbackParam) {
	var outVal = r['out'];
	var msgHtml = outVal['messageFormattedFloating'];


//	logLineTo('log','result: '+ msgHtml);

	var div = callbackParam['div'];
	var html = '';
	if(msgHtml!=null) {
		html = msgHtml;
	}

	var childPlaceholders = outVal['childPlaceholders'];
logLineTo('log','childPlaceholders='+ childPlaceholders );
	if(childPlaceholders!=null) {
		var childs = childPlaceholders['Child'];

//		var childs = childPlaceholders;

		if(childs!=null) {
logLineTo('log','childs='+ childs['id']);
			for(var childIx=0; childIx<childs.length; ++childIx) {
				var child = childs[childIx];
				var childId = child['id'];
				var childTitle = child['title'];
				html +=
					"<div id='msg"+ childId +"' class='msgReplies'>"
					+  "<div class='msgChildPlaceholder'><a href='#msg"+ childId +"' onclick=\"dispNewForumMsg('msg"+ childId +"',"+ childId +","+ callbackParam['topMsg'] +","+ callbackParam['firstMsgIx'] +","+ callbackParam['maxMsgs'] +");\">[+]</a> "+ childTitle +"</div>"
					+"</div>"
					;
			}
		}
	}

	div.innerHTML = html;

//	logLineTo('log','result: '+ outVal);
	logLineTo('log', 'XML:'+ xmlStrToHtml(xml.xml) );
}
*/

function getForumMessage(div,msgId,topMsg,firstMsgIx,maxMsgs) {
	var userCookie = getCookie('user');
	if(userCookie==null)
		userCookie = '';

/*
	var MyHandler = Class.create();
	MyHandler.prototype = (new WS.Handler()).extend({
	  on_request : function(envelope) {
	     // pre-request processing
	  },
	  on_response : function(call,envelope) {
	     // post-response, pre-callback processing
	  },
	  on_error : function(call,envelope) {
		logLineTo('log','on_error ERROR envelope='+ envelope);
	  }
	});
*/

	var svcName = 'getMessage';
	var call = new WS.Call('/know/services/Forum');
//	call.add_handler(new MyHandler());

	var nsuri = 'http://service.forum.knowlist.com';
	var qn_op = new WS.QName(svcName,nsuri);
	var qn_op_resp = new WS.QName(svcName+'Response',nsuri);
	call.invoke_rpc(
	    qn_op,
	    new Array(
	      spv('userCookie',userCookie),
	      spv('msgId',msgId),
	      spv('firstMsgIx',firstMsgIx),
	      spv('maxMsgs',maxMsgs),
	      spv('topMsg',topMsg)
	    ),null,
	    function(call,envelope,xmlStr) {
	    	var responseElem = getSubElem(envelope.get_body(),svcName +'Response',nsuri);
			var outElem = getSubElem(responseElem,'Message',nsuri);
			var messageFormattedFloating = getSubElemVal(outElem,'messageFormattedFloating',nsuri);
			var childPlaceholders = getSubElem(outElem,'childPlaceholders',nsuri);
			var children = getSubElems(childPlaceholders,'Child',nsuri);

			var html = '';
			if(messageFormattedFloating!=null)
				html += messageFormattedFloating;

			if(children!=null) {
				for(var childIx=0; childIx<children.length; ++childIx) {
					var child = children[childIx];
					var childId = getSubElemVal(child,'id',nsuri);
					var childTitle = getSubElemVal(child,'title',nsuri);
					html +=
						"<div id='msg"+ childId +"' class='msgReplies'>"
						+  "<div class='msgChildPlaceholder'><a href='#msg"+ childId +"' onclick=\"dispNewForumMsg('msg"+ childId +"',"+ childId +","+ topMsg +","+ firstMsgIx +","+ maxMsgs +");\">[+]</a> "+ childTitle +"</div>"
						+"</div>"
						;
				}
			}

			div.innerHTML = html;
	    }
	);
}


function dispNewForumMsg(divId,msgId,topMsg,firstMsgIx,maxMsgs) {
	var div = document.getElementById(divId);
//	getForumMessage(div,msgId,topMsg,firstMsgIx,maxMsgs,false);
	getForumMessage(div,msgId,topMsg,firstMsgIx,maxMsgs);
}
