<!--
/**
 * operator.js
 * @fileoverview 消息转换，将字符串类型的一个/多个消息转换成{@link HJWebClMsgString}对象
 * @author Lynk Li
 */

/**
 * @class HJWebClMsgString 消息类
 * @constructor
 * @author Lynk Li
 * @param String str 包含 形如&lt;M>&lt;C>&lt;/C>&lt;R>&lt;F>&lt;/F>&lt;/R>&lt;/M> 一个/多个消息的字符串
 */
function HJWebClMsgString(str) {
	/**
	 * 包含 形如&lt;M>&lt;C>&lt;/C>&lt;R>&lt;F>&lt;/F>&lt;/R>&lt;/M> 一个/多个消息的字符串
	 */
	this.string = str;
	/**
	 * 消息数组，其每个元素都是一个{@link HJWebClMsgStringMsg}对象
	 */
	this.messages = new Array();
	this.parseString = HJWebClMsgString_parseString;
	this.parseString();
}

/**
 * parse string: get msgId, exception, commands, datas
 */
function HJWebClMsgString_parseString() {
	try {
		var re = /<M>(.*?)<\/M>/g;
		var matched = this.string.match(re);
		if (matched) {
			for (var i = 0; i < matched.length; i++) {
				var msg = new HJWebClMsgStringMsg(matched[i]);
				this.messages.push(msg);
			}
		}
	} catch(e) {
		_common.alertDebug("HJWebClMsgString_parseString:" + e);
	}
}

/**
 * @class HJWebClMsgStringMsg, class of msg
 * @constructor
 * @author Lynk Li
 * @param String str message string like &lt;M>&lt;C>&lt;/C>&ltR>&lt;F>&lt;/F>&lt;/R>&lt;/M>
 */
function HJWebClMsgStringMsg(str) {
	/**
	 * 消息字符串
	 */
	this.string = str;
	/**
	 * 消息ID
	 */
	this.msgId = "";
	/**
	 * 消息命令段数组
	 */
	this.commands = new Array();
	/**
	 * 消息数据段数组
	 */
	this.datas = new Array();	
	this.parseCommands = HJWebClMsgStringMsg_parseCommands;
	this.parseDatas = HJWebClMsgStringMsg_parseDatas;
	this.parseRecords = HJWebClMsgStringMsg_parseRecords;
					
	var reCommand = /<C>(.*?)<\/C>/i;
	var matchedCommand = this.string.match(reCommand);
	if (matchedCommand && matchedCommand.length == 2) {
		this.parseCommands(matchedCommand[1]);
	}
	
	var reData = /<D>(.*?)<\/D>/i;
	var matchedData = this.string.match(reData);
	if (matchedData && matchedData.length == 2) {
		this.parseDatas(matchedData[1]);
	}	
}

/**
 * parse commands, get msgId, exception, commands array
 * @param String str commands string
 */
function HJWebClMsgStringMsg_parseCommands(str) {
	try {
		var aCommands = str.split(";");
		if (aCommands.length >= 1) {
			this.msgId = aCommands[0];
			for (var i = 1; i < aCommands.length; i++) {
				this.commands.push(aCommands[i]);
			}
		}
	} catch(e) {
		_common.alertDebug("HJWebClMsgStringMsg_parseCommands:" + e);
		this.msgId = "";
		this.commands = new Array();
	}
}

/**
 * parse datas, get datas array
 * @param String str records string
 */
function HJWebClMsgStringMsg_parseDatas(str) {
	try {
		var reRecords = /<R>(.*?)<\/R>/g;
		var matchedRecords = str.match(reRecords);
		if (matchedRecords) {
			for (var i = 0; i < matchedRecords.length; i++) {
				var fields = this.parseRecords(matchedRecords[i]);
				if (fields.length > 0) this.datas.push(fields);
			}
		} else {			
			this.datas = new Array();
		}
	} catch (e) {
		_common.alertDebug("HJWebClMsgStringMsg_parseDatas:"+e);
		this.datas = new Array();
	}
}

/**
 * parse data record, get fields
 * @param String str fields String
 */
function HJWebClMsgStringMsg_parseRecords(str) {	
	try {
		var aFields = new Array();
		var reFields = /<F>(.*?)<\/F>/g;
		var reField = /<F>(.*?)<\/F>/i;
		var matchedFields = str.match(reFields);
		if (matchedFields) {
			for (var i = 0; i < matchedFields.length; i++) {
				var matchedField = matchedFields[i].match(reField);
				if (matchedField && matchedField.length == 2) {
					aFields.push(matchedField[1]);
				}
			}
		}
		
		return aFields;
	} catch(e) {
		_common.alertDebug("HJWebClMsgStringMsg_parseRecords:"+e);
		return new Array();
	}
}
//-->