/**
 * @fileoverview 聊天机器人核心程序
 * @author <a href="dron@qq.com">dron</a>
 * @version 1.0
 * @create-date 2008-8-19
 */

Ucren.onReady(function(){
	var mainWindow, chatlogWin, inputWin, sendBtn, cancelBtn, startBtn, inputArea, DataStore, chatLog, MainEngine, randomWord, uid;
	chatlogWin = Ucren.get("chatlogWin");
	inputWin = Ucren.get("inputWin");
	inputArea = Ucren.get("inputArea");
	randomWord = Ucren.randomWord(6);

	// 用户随机 id
	uid = function(){
		var co = new Ucren.Cookie, v;
		if(v = co.get("chatid"))return v;
		v = Ucren.randomWord(8);
		co.set("chatid", v);
		return v;
	}();

	// 主调度引擎
	MainEngine = {
		sendMessage: function(){
			var msg = inputArea.getValue();
			if(msg == ""){
				Ucren.alert("不能发送空消息", "错误");
				return ;
			}
			inputArea.setValue("");
			DataStore.save(msg, 0);
			DataStore.send(msg, function(m){
				switch(m){
					case "start send":
						sendBtn.setDisabled(true);
						break;
					case "returned complete":
						sendBtn.setDisabled(false);
						break;
					case "returned error":
						DataStore.save("服务器错误", 2);
						break;
				}
			});
		},
		disposeChatlog: function(){
			-function(){
				var obj = DataStore.load();
				if(obj && obj.message){
					if(obj.user == 1){
						ChatLog.write("机器人[" + randomWord + "]回答:", "blue");
						ChatLog.write(obj.message, "blue");
					}else if(obj.user == 0){
						ChatLog.write("你问:", "green");
						ChatLog.write(obj.message, "green");
					}
				}
			}.defer(500, this, true);
			DataStore.save("嗨，我知道很多生活常识，可以解答生活中遇到的一切问题，比如“从厦门到北京有多远”、“芹菜不能和什么一起吃”、“请教如何疏通马桶”等等，有什么需要帮助的吗？", 1);
		}
	}

	// 定义聊天数据处理引擎
	DataStore = {
		url: "a.asp",
		dialogQueue: [],
		save: function(text, user){
			typeof(text) == "string" && typeof(user) == "number" && this.dialogQueue.push({
				message: text, user: user
			});
		},
		load: function(){
			var q = this.dialogQueue;
			if(q.length) return q.shift();
			else return null;
		},
		send: function(word, callback){
			callback("start send");
			var http, me;
			me = this;
			http = new Ucren.Http;

			http.postData(this.url + "?rt=" + (new Date).getTime() + "&uid=" + uid + "&wd=" + escape(word), true, function(ht, op){
				if(op && op.type == 404){
					callback("returned error");
					return ;
				};
				DataStore.save(me.parseMsg(ht.responseText), 1);
				callback("returned complete");
			});
		},
		parseMsg: function(text){
			var obj;
			try{
				obj = eval("(" + text + ")");
			}catch(e){
				return "处理回调错误";
			}
			obj.msg = obj.msg.replace(/&#(\d+);/g, function(s, a){
				return String.fromCharCode(a - 0);
			});
			return obj.msg;
		}
	};

	// 定义聊天记录引擎
	ChatLog = {
		write: function(text, cls){
			var cw = chatlogWin.dom();
			if(typeof(text) == "string"){
				var div = document.createElement("div");
				if(typeof(cls) == "string")div.className = cls;
				text = text.replace(/<br ?\/?>/gi, "####");
				div.innerHTML = text.htmlEncode().replace(/####/g, "<br>");
				cw.appendChild(div);
				this.rm();
				this.scroll();
			}
		},
		rm: function(){
			var d = document.createElement("div");
			return function(){
				var cw, cls;
				cw = chatlogWin.dom();
				cls = cw.childNodes;
				if(cls.length > 29){
					d.appendChild(cw.firstChild);
					d.innerHTML = "";
				}
			};
		}(),
		scroll: function(){
			var cw = chatlogWin.dom();
			cw.scrollTop = cw.scrollHeight;
		}
	};

	// 定义聊天窗口
	mainWindow = new Ucren.Window({
		width: 500, height: 380,
		minWidth: 500, height: 380,
		panel: "chatWin",
		caption: "Ucren 聊天机器人",
		icon: "images/light.gif",
		resizeAble: true,
		minButton: true, maxButton: true, cloButton: true,
		onResize: function(){ // 当聊天窗口大小发生变化
			var r = mainWindow.getAvailPanelSize();
			chatlogWin.resizeTo(r.width - 10, r.height - 118);
			inputWin.setWidth(r.width - 12);
			inputArea.setWidth(r.width - 10);
		},
		onClose: function(){
			startBtn.setDisabled(false);
		},
		onOpen: function(){
			startBtn && startBtn.setDisabled(true);
		}
	});
	mainWindow.center();
	mainWindow.show();
	mainWindow.onResize();

	// 定义输入框扩展方法和事件
	inputArea.getValue = function(){
		return this.dom().value;
	};
	inputArea.setValue = function(v){
		if(typeof(v) == "string")this.dom().value = v;
	};
	inputArea.on({
		keydown: function(e){
			e = Ucren.Event(e);
			if(e.ctrlKey && e.keyCode == 13)MainEngine.sendMessage();
		}
	});
	inputArea.dom().focus();

	// 定义发送控钮
	sendBtn = new Ucren.Button({ caption: "发送", width: 60, handler: MainEngine.sendMessage.createDelegate(MainEngine) });
	sendBtn.applyTo("sendBtn");

	// 定义退出控钮
	cancelBtn = new Ucren.Button({ caption: "退出", width: 60, handler: mainWindow.hide.createDelegate(mainWindow) });
	cancelBtn.applyTo("cancelBtn");

	// 定义开始按钮
	startBtn = new Ucren.Button({ caption: "点击此处打开聊窗口", width: 148, disabled: true, handler: mainWindow.show.createDelegate(mainWindow) });
	startBtn.applyTo("startBtn");

	MainEngine.disposeChatlog();
});