/********************************
同花顺客户端js扩展引擎
author: 何玮<away@myhexin.com>
date:	2009-07-06
history:
	2009-07-29
		1. 修改了Passport类。增加了多个通行证读取的功能。
		2. 完善了注释
*********************************/
(function(){
	/*
	* 全局内部函数
	* 1. 获取hexin主程序所在主目录
	* external.getModulePath()
	* @return String
	*
	* 2. 获取当前用户使用的目录
	* external.getuserPath()
	* @return String
	*/
	thsAjax		= external.createObject('Ajax');
	thsQuote	= external.createObject('Quote');
	/**
	* 和thsQuote相关的内部函数
	* 1. 页面切换函数
	* thsQuote.switchPage(param)
	* @param param	Object
	*		param.id		Int		页面id
	*		param.code		String	切换代码
	*		param.period	Int		切换周期
	* @param param	Int		页面id
	* @return void
	*
	* 2. 切换板块函数
	* theQuote.switchBlock(param)
	* @param param	Object
	*		param.id			板块id
	*		param.code			切换后的当前代码
	* @param param	Int			板块id
	* @param param	String		板块名称
	* @return void
	*
	* 3. 调用一个菜单命令
	* theQuote.actionCommand(cmdId)
	* @param cmdId	Int			菜单的资源Id
	*
	* 4. 切换当前页面的标签
	* theQuote.switchTab(tabName)
	* @param tabName String		标签名称
	* @return boolean
	*
	* 5. 向指定绘图对象发起命令
	* theQuote.setWindowCommand(param)
	* @param param	Object
	*			param.name		窗口名称
	*			param.cmd		发起的命令
	*			param.code		切换窗口当前代码
	*			param.period	切换窗口当前周期
	*
	*/

	thsPassport	= external.createObject('Passport');

	thsUtil		= external.createObject('Util');
	/**
	* 和thsUtil相关的函数
	* 1. 打开url
	* thsUtil.openURL(url, mode);
	* @param url	String	打开的目标url
	* @param mode	Int		打开的类型。0： 在资讯中心打开；1: 在资讯对话框中打开
	* @return void
	*
	* 2. 键盘精灵代码表
	* thsUtil.filterStock(param)
	* @param param Object
	*		param.filter	键盘精灵过滤字符串
	*		param.count		返回的个数限制。如果不指定或指定0，则返回15条
	* @return String	eval后，为一个数组。数组中放置的是对象。每个对象包含以下属性：
	*				stock:	股票代码
	*				name:	股票名称
	*				py:		拼音简称
	*/
})();

// 使用同花顺资讯连接请求数据的对象
ThsHttpRequest = function(){

	var _timeOut	= null;		// private
	var _requestObj	= null;		// private
	var _requestId	= 0;		// private
	var _lastError	= '';		// private

	// 重置请求
	var _reset = function() {
		_timeOut	= null;
		_requestObj	= null;
		_requestId	= 0;
	}

	// 超时处理
	var _onTimeout = function() {
		thsAjax.cancel(_requestId);
		_lastError = 'timeout';
		if (typeof _requestObj.onfail == 'function') {
			_requestObj.onfail();
		}
		_reset();
	};

	// 清除超时
	var _clearTimeout = function() {
		if (_timeOut != null){
			clearTimeout(_timeOut);
			_timeOut = null;
		}
	};

	// 数据处理
	var _onReady = function(data) {
		_clearTimeout();
		if (_requestObj != null && typeof _requestObj._onready == 'function') {
			var scope = _requestObj.scope || window;
			_requestObj._onready.call(scope, data);
			scope = null;
		}
		_reset();
	};
	
	return {
		/* public 请求接口.
		 * @param obj object 请求的参数
		 *		obj.url:			请求的uri
		 *		obj.type:			资讯服务器类型
		 *		obj.onready(data)	数据收到后的处理函数
		 *		obj.onfail			失败处理函数
		 */
		'request': function(obj) {
			if (_requestObj != null) {
				_lastError = 'busy';
				return false;
			}
			obj._onready = obj.onready;
 			obj.onready = _onReady;
			_requestObj = obj;
			_timeOut = setTimeout(function(){_onTimeout();}, 2000);
			_requestId = thsAjax.request(obj);

			return _requestId != 0;
		},
		
		// public 根据type获取服务器http地址
		'getServer': function(type) {
			return thsAjax.getServer(type);
		},

		// public 返回最后一个错误
		'lastError': function() {
			return _lastError;
		}
	};
};

/**
* 从文件读取内容的类。
* 读取的文件编码必须为gbk。不支持utf-8
*/
FileStreamInput = function() {
	var fsi = external.createObject('FileInputStream');
	return {
		/**
		* 打开用于读取的文件
		* @param filename String 需要打开的文件名
		* @return boolean
		*/
		'open':	function(filename) {
			return fsi.open(filename);
		},

		/**
		* 读取文件内容
		* @return String
		*/
		'read':	function() {
			return fsi.read();
		},

		/**
		* 关闭
		* @return void
		*/
		'close': function() {
			fsi.close();
		}
	};
};

/**
* 将数据写入到文件的类
* 写入到文件后，文件的编码为gbk
*/
FileStreamOutput = function() {
	var fso = external.createObject('FileOutputStream');
	return {
		/**
		* 打开用于写盘的文件
		* @param filename String 需要打开的文件名
		* @return boolean
		*/
		'open': function(filename) {
			return fso.open(filename);
		},
		
		/**
		* 写入内容
		* @param str String 需要写盘的文件内容
		* @return int|boolean 如果成功返回写入的长度。否则返回false
		*/
		'write': function(str) {
			return fso.write(str);
		},

		/**
		* 关闭文件
		* @return void
		*/
		'close': function() {
			fso.close();
		}
	};
};

Passport = function() {
	return {
		/**
		* 获得自选股列表
		* @return array|false
		*/
		'selfStocks': function() {
			try	{	
				return thsPassport.selfStocks();
			}
			catch (e) {
			}
			return false;
		},
		
		/**
		* 获得持仓股列表
		* @return array()|false
		*/
		'holdStocks': function() {
			try {
				return eval(thsPassport.holdStocks());
			}
			catch (e){
			}
			return false;
		},
		
		/**
		* 获得持仓行业列表
		* @return array()|false
		*/
		'selfIndustries': function() {
			try{
				return thsPassport.selfIndustries().split(',');
			} catch(e){
			}
			return false;
		},

		/*
		* 获得通行证签名段的文本
		* @param passType char 1委托通行证 6同花顺通行证
		* @return String
		*/
		'ppValue':function(passType) {
			return thsPassport.getValue(passType);
		},

		/*
		* 获得通行证签名
		* @param passType char 1委托通行证 6同花顺通行证
		* @return String
		*/
		'ppSignature': function(passType) {
			return thsPassport.getSignature(passType);
		},

		/*
		* 获得通行证中一个键的值
		* @param key 键名
		* @return String
		*/
		'ppGetValue': function(key) {
			return thsPassport.get(key);
		}
	};
};

