﻿//----------------------------------------
// my.js
//----------------------------------------
// my：各种命名空间

var my = new Object();

//通用函数包
my.common = new Object();

//自定义类型库
my.type = new Object();

//各种页面操作
my.ui = new Object();

my.ui.group = new Object();

my.ui.group.move = new Object();

my.ui.stock = new Object();

my.ui.trade = new Object();

my.ui.editor = new Object();

//各种Ajax数据操作
my.data = new Object();

my.data.group = new Object();

my.data.stock = new Object();

my.data.trade = new Object();

my.realtime = new Object();

//存放各种操作的状态
my.status = new Object();

//存放各个页面对应的模板id
my.model = new Object();

my.cookie = new Object();

//缓存各种数据，如页面DOM对象等
my.cache = new Object();
//存放股票详细信息对应的cache对象名
my.model.cache = new Object();

//数据验证器
my.validator = new Object();

//当前用户id
my.userName = null;

//兼容旧的自选股数据接口函数
var QuoteData = new Object();

//my的初始化及启动函数，同时也是整个自选股的javascript入口函数
my.init = function(){
	//兼容旧的自选股数据接口函数
	QuoteData.show_quote = page.data.loadStockFinish;
	//全局组合列表，存放组合及其包含的自选股
	my.groups = new my.type.HashList();
	//全局遮罩层
	my.ui.cover = new my.type.PageCover();
	//全局的上证和深成对象
	my.data.stock.sh = new my.type.Stock();
	my.data.stock.sh.set("code", "0000001");my.data.stock.sh.set("short_code", "000001");
	my.data.stock.sz = new my.type.Stock();
	my.data.stock.sz.set("code", "1399000");my.data.stock.sz.set("short_code", "399000");
	//page的模板id
	my.model.page1 = 'model_chicang';
	my.model.page2 = 'model_zoushi';
	my.model.page3 = 'model_jibenmian';
	my.model.page4 = 'model_dongxiang';
	my.model.page5 = 'model_duotu';
	
	//缓存到cache的stockDetail页面对象名称
	my.model.cache.page1 = 'cache_cicang_detail';
	my.model.cache.page2 = 'cache_zoushi_detail';
	my.model.cache.page3 = 'cache_jibenmian_detail';
	my.model.cache.page4 = 'cache_dongxiang_detail';

	page.status.groupViewChanged = false;//标记组合视图是否改变了，用于判断应否刷新组合视图
	page.status.loadGroupOnce = false;//调用过一次加载组合与自选股
	page.status.loadStockOnce = false;//调用过一次my.data.loadStock，用于判断刷新
	page.status.loadBasicOnce = false;//调用过一次加载基本面信息
	page.status.loadingBasic = false;//正在下载基本面信息
	my.status.loadingAllTrade = false;//正在下载全部交易记录
	my.status.loadAllTradeOnce = false;//调用过一次下载全部交易记录
	my.status.loadingStockSearch = false;//正在下载全部股票列表
	my.status.loadStockSearchOnce = false;//调用过一次下载全部股票列表
	my.status.tradeEditSaving = false;//正在修改交易记录
	my.status.shouldLoadTrade = false;//标记需要重新下载交易记录
	//载入组合及股票列表
	page.data.loadGroup(
					   function(){
						   //载入完成后创建组合列表
						   page.groupManager.create();
						   //接着异步载入实时数据
						   page.data.loadStock();
						   //调用点击标签的事件创建页面，先创建第二个页面
						   page.panel.tabClick(1);
						   page.quickTrade.onTabClick(0);//快速交易的地方
						   //启动定时器加载实时数据
						   window.setInterval('page.data.loadStock()', 10000);
						   //填充快速交易的添加关注里的组合列表
						   page.quickTrade.refreshGroupList();
					   });
	//初始化交易管理面板
	my.ui.trade.tradeMgr = $('#pageTradeMgr');
	//从cookie中获取通行证用户名
	my.userName = my.cookie.getValue('P_INFO').split('|')[0];;
	if (my.userName.length > 8 && my.userName.substr(my.userName.length-8)=='@163.com') {
		my.userName = my.userName.substr(0, my.userName.length-8);
	}
	$("#spanUsername").text(my.userName);
	//先伪装一下最新时间,之后交给page.main.refreshIndex更新
	$("#info_realtime").text((new Date()).toLocaleString());
	//初始化股票代码自动完成框
	initUI("keyWordInput");
	initUI("keyWordInput2");
}

//----------------------------------------
// my.type.js
//----------------------------------------
// my.type


//组合对象类型
my.type.Group = function(){
	this.id = null;
	this.name = null;
	this.visible = null;
	this.weight = null;
	//是否被修改标志
	this.changed = false;
	//展开？
	this.expanded = false;
	//该组合下的自选列表
	this.stocks = new my.type.HashList();
}


//加强型列表(仿Hash), 用于表示组合列表和股票列表
my.type.HashList = function(){
	this.keys = new Array();
	this.values = new Array();
	this.getLength = function(){
		return this.keys.length;
	}
	
	this.clear = function(){
		this.keys.length=0;
		this.values.length=0;
	}
	
	this.getKeyString = function(separator){
		var list = '';
		for(var i=0; i<this.keys.length; i++){
			list += this.keys[i];
			if(separator != undefined){
				list += separator;
			}
		}
		return list;
	}
	
	//找到key的位置
	this.indexOf = function(key){
		for(var i=0; i<this.keys.length; i++){
			if(this.keys[i] == key){
				return i;
			}
		}
		return -1;
	}
	
	this.add = function(key, valueObj){
		for(var i=0; i<this.keys.length; i++){
			if(this.keys[i] == key){
				this.values.splice(i,1,valueObj);//替换已有的对象
				return;
			}
		}
		//新插入数据
		this.keys.push(key);
		this.values.push(valueObj);
	}
	
	this.set = this.add;
	
	this.getByIndex = function(index){
		return this.values[index];
	}
	
	this.get = function(key){
		for(var i=0; i<this.keys.length; i++){
			if(this.keys[i] == key){
				return this.values[i];
			}
		}
		return null;
	}
	
	this.contains = function(key){
		return (this.get(key) != null);
	}
	
	//移除并返回被移除的数据
	this.remove = function(key){
		for(var i=0; i<this.keys.length; i++){
			if(this.keys[i] == key){
				this.keys.splice(i,1);
				return this.values.splice(i,1)[0]; 
			}
		}
		return null;
	}
	
	this.insert = function(key, value, index){
		this.keys.insert(key, index);
		this.values.insert(value, index);
	}
	
	//移动数据到指定位置
	this.move = function(key, index){
		var value = this.remove(key);
		this.insert(key, value, index);
	}
	
}

//Javascript的哈希表
my.type.Hash = function()
{
	this.length = 0;
	this.items = new Array();
	for (var i = 0; i < arguments.length; i += 2) {
		if (typeof(arguments[i + 1]) != 'undefined') {
			this.items[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}
   
	this.toString = function(){
	   var list = '';
	   for(var key in this.items){
		   list += key;
		   list += '=';
		   list += this.items[key];
		   list += ';'
	   }
	   return list;
   	}
   
	this.remove = function(in_key)
	{
		var tmp_value;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			var tmp_value = this.items[in_key];
			delete this.items[in_key];
		}
		return tmp_value;
	}

	this.get = function(in_key) {
		return this.items[in_key];
	}

	this.set = function(in_key, in_value)
	{
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.items[in_key]) == 'undefined') {
				this.length++;
			}
			this.items[in_key] = in_value;
		}
		return in_value;
	}

	this.contains = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
}

//股票类型即为哈希表
my.type.Stock = my.type.HashList;

my.type.TradeList = my.type.HashList;

my.type.TradeInfo = Object;

//一条交易记录
my.type.TradeItem = function(){
	//交易记录id，code，日期，类型（买入true/卖出false），数量，价格，佣金，手续费，印花税；
	this.id = null;
	this.code = null;
	this.date = null;
	this.type = null;//true or false
	this.amount = null;
	this.price = null;
	this.commission_rate = null;//佣金
	this.commission = null;//手续费
	this.stamptax = null;//印花税
}

//页面遮罩类
my.type.PageCover = function(){
	this.zIndex = 10000;
	this.div = null;
	var _self = this;
	this.show = function(){
		if(this.div == null){
			this.div = document.createElement("div");
		}
		var sWidth,sHeight;
		sWidth=document.body.offsetWidth;
		//sHeight=screen.height;
		sHeight=document.body.scrollHeight;

		this.div.style.position="absolute";
		this.div.style.top="0";
		this.div.style.background="#777";
		this.div.style.filter="progid:DXImageTransform.Microsoft.Alpha(style=3,opacity=25,finishOpacity=75";
		this.div.style.opacity="0.6";
		this.div.style.left="0";
		this.div.style.width=sWidth + "px";
		this.div.style.height=sHeight + "px";
		this.div.style.zIndex = this.zIndex;
		this.div.onclick = function(){
			_self.onclick();
		}
		
		document.body.appendChild(this.div);
	}
	my.type.PageCover.prototype.hide = function() {
		document.body.removeChild(this.div);
	}
	my.type.PageCover.prototype.onclick = function(){
		this.hide();
	}
}

//html页面调试
my.type.Logger = function(){
	this.disabled = false;
	
	this.window = null;
	
	this.start = function(){
		this.window = window.open('about:blank');
		this.window.document.write('Html页面调试器:<br/>');
	}
	
	this.close = function(){
		
	}
	
	this.debug = function(txt){
		if(!this.disabled){
			return;
		}
		if(this.window == null){
			//alert('未初始化debug window');
			return;
		}
		this.window.document.write((new Date()).toString());
		this.window.document.write(txt + '<br/>');
	}
}




//----------------------------------------
// my.common.js
//----------------------------------------
/*
 * History
 * 
 * Version		Date		By			Description
 * ======================================================================================
 * 				080617		hrchen		修改getStockExchange()方法，将不使用该方法，暂时性修改
 */

// my.common, 存放通用函数或设置

/* 分割字符串并忽略空串，autoTrim=true时自动去除元素两边空格*/
my.common.split = function(string, separator, autoTrim){
	var arr = string.split(separator);
	var result = new Array();
	if(autoTrim == true){
		for(var i=0; i<arr.length; i++){
			var txt = arr[i].trim();
			if(txt=='') continue;
			result.push(txt);
		}
	}else{
		for(var i=0; i<arr.length; i++){
			if(arr[i]=='') continue;
			result.push(arr[i]);
		}
	}
	return result;
}

//适用于所有html类型的元素列表排序,如ul>li，table>tr等(jQuery专用)
//elemsArray 要排序的元素集合（li或tr的集合）
//指定排序是基于集合里的哪个子元素（该元素带有属性baseAttr且该属性值=baseAttrValue）
//如果compareAttr=null，表示排序依据是子元素的innerHTML，否则读取子元素的属性compareAttr为排序依据
//type指定排序是基于数值、百分数还是文本，可能值为number、string、percent
//asc=true为升序排列，否则为降序
my.common.sort = function(elemsArray, baseAttr, baseAttrValue, compareAttr, type, asc){
	if(elemsArray.length <= 1) return; //不必排序
	var keyOld = new Array();
	var keyNew = new Array();
	var valueOld = new Array();
	for(var i=0; i<elemsArray.length; i++){
		var elem = $(elemsArray[i]); 
		//获取排序依据
		var obj = elem.find("*["+baseAttr+"='"+baseAttrValue+"']");
		var value;//存放格式正确的值
		var txtValue;//取要判断的值的文本格式
		if(compareAttr == null){
			txtValue = obj.text();
		}else{
			txtValue = obj.attr(compareAttr);
		}
		if(type == "number"){
			if(isNaN(txtValue)){//非数字一律视为0
				value = 0;
			}else{
				value = Number(txtValue);//将innerHTML转换成数值
			}
		}else if(type == "string"){
			value = txtValue;//获取innerHTML
		}else if(type == "percent"){
			if(isNaN(my.common.percentToNumber(txtValue))){//非数字一律视为0
				value = 0;
			}else{
				value = my.common.percentToNumber(txtValue);//将百分数格式化成数字比较
			}
		}else{
			value = txtValue;
		}
		//插入原始数据
		keyOld.push(value);
		keyNew.push(value);
		valueOld.push(elem);
	}
	//复制原始键用于排序
	//keyNew = keyOld.concat();
	//按值排序
	if(type == "number"){
		keyNew.sort(
			function(left, right){return left-right;}
		);
	}else if(type == "string"){
		keyNew.sort();
	}else if(type == "percent"){
		keyNew.sort(
			function(left, right){return left-right;}
		);
	}else{
		keyNew.sort();
	}
	//Array.sort()默认是asc的，这里进行倒序
	if(!asc){
		keyNew.reverse();
	}
	//alert(keyNew + "|" + keyOld);
	var pMove = null;
	var pFirst = null;
	do{
		//获取第一个元素值
		var f = keyNew[0];
		var index = keyOld.indexOfValue(f);
		if(index == -1) break;
		
		keyOld.splice(index,1);//在old数组移除
		keyNew.splice(0,1);//在new数组移除
		pMove = valueOld[index];//获取刚才弹出的元素
		valueOld.splice(index,1);//在obj数组移除
		//移动
		if(pFirst==null){
			pFirst = pMove;
		}else{
			pMove.insertAfter(pFirst);
			pFirst = pMove;
		}
	} while(valueOld.length > 0);//最后三个数组均为空
	//alert(keyNew + "|" + keyOld);
}

//将格式如-80%的百分比字符转成数字
my.common.percentToNumber = function(percent){
	var txt = percent.replace('%','');
	var num = Number(txt)/100;
	return num;
}

//将格式为 2008-4-24 这样的字符串转成Date
my.common.parseDate = function(str){    
	if(typeof str == 'string'){    
		var results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) *$/);    
		if(results && results.length>3)    
			return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]));    
		results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/);    
		if(results && results.length>6)    
			return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]),parseInt(results[4]),parseInt(results[5]),parseInt(results[6]));    
		results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/);    
		if(results && results.length>7)    
			return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]),parseInt(results[4]),parseInt(results[5]),parseInt(results[6]),parseInt(results[7]));    
	}
	return null;    
}

//返回array由seperator分割元素的字符串
my.common.toListString = function(array, seperator){
	var list = '';
	for(var i=0; i<array.length; i++){
		list += array[i];
		list += seperator;
	}
	return list;
}

//枚举对象的所有属性，返回列表
my.common.getObjectAttr = function(obj){
	var list = '';
	for(var attr in obj){
		list += attr;
		list += '=';
		list += obj[attr];
		list += ';';
	}
	return list;
}

//从字符串数据创建组合对象
my.common.getGroup = function(groupData){
	var group = new my.type.Group();
	if(groupData != null){
		var attrs = my.common.split(groupData, ',');//102,金融股组合,true,1
		group.id = attrs[0];
		group.name = attrs[1];
		group.visible = attrs[2];
		group.weight = attrs[3];
	}
	return group;
}

//从字符串数据创建股票对象
my.common.getStock = function(stockData){
	if(stockData == null) return null;
	var stock = new my.type.Stock();
	var attrs = my.common.split(stockData, ',');//0000002,4444.0,400;
	stock.set('code', attrs[0]);//0600183
	stock.set('short_code', attrs[0].substr(1));//600183
	//初始化交易管理相关信息
	stock.set('trades', new my.type.TradeList());//交易记录列表
	//初步计算买入均价
	var buy_cost = Number(attrs[1]);
	var hold_amount = Number(attrs[2]);
	stock.set('buy_cost', buy_cost);
	stock.set('hold_amount', hold_amount);
	var buy_cost_avg = 0;
	if(hold_amount>0){
		buy_cost_avg = (buy_cost / hold_amount).toFixed(2); //买入均价
	}
	stock.set('buy_cost_avg', buy_cost_avg);
	return stock;
}

//从交易记录字符串中创建交易记录对象
my.common.getTradeItem = function(tradeData){
	var trade = new my.type.TradeItem();
	var a = my.common.split(tradeData, ",");
	trade.id = Number(a[0]);
	trade.code = a[1];
	trade.date = a[2];
	trade.type = a[3];
	trade.amount = Number(a[4]);
	trade.price = Number(a[5]);
	trade.commission_rate = Number(a[6])*1000;
	trade.commission = Number(a[7]);
	trade.stamptax = Number(a[8])*1000;
	return trade;
}
//从所有组合里找到股票
my.common.findStock = function(stockCode){
	for(var i=0; i<my.groups.getLength(); i++){
		var group = my.groups.getByIndex(i);
		var stock = group.stocks.get(stockCode);
		if(stock != null){
			return stock;
		}
	}
	return null;
}

//获取6位证券代码的市场代码1或0
//上海市场：600，601，900 开头
//深圳市场：00，20开头
my.common.getStockExchange = function(stockCode){
	if(!stockCode) return "";
	if(stockCode.length != 6) return "";
	if(stockCode.indexOf("600")==0) return "0";
	if(stockCode.indexOf("601")==0) return "0";
	if(stockCode.indexOf("900")==0) return "0";
	if(stockCode.indexOf("00")==0) return "1";
	if(stockCode.indexOf("20")==0) return "1";
// 080617 update start
	return "0";	// 将不使用该函数，暂时这样处理
// 080617 update end
}

//返回短日期格式 2008-4-22
my.common.getShortDate = function(){
	var dt = new Date();
	var txt = dt.getFullYear() + "-" + (dt.getMonth()+1) + "-" + dt.getDate();
	return txt;
}

//返回my.groups.stocks里以separator分割的字符串，用于查询实时数据
my.common.getStockList = function(separator){
	var list = '';
	for(var i=0; i<my.groups.getLength(); i++){
		var group = my.groups.getByIndex(i);
		for(var j=0; j<group.stocks.getLength(); j++){
			var stock = group.stocks.getByIndex(j);
			list += stock.get('code');
			if(separator != undefined){
				list += separator;
			}
		}
	}
	return list;
}

//获取时间字符串 125959
my.common.getTimeString = function(){
	var dt = new Date();
	var result = dt.getHours().toString() + dt.getMinutes().toString() + dt.getSeconds().toString();
	return result;
}

Array.prototype.insert = function(value,index) { 
	var arrTemp = this; 
	if(index > arrTemp.length) index=arrTemp.length; 
	if(index < -arrTemp.length) index=0; 
	if(index < 0) index = arrTemp.length + index; 
	for(var ii=arrTemp.length; ii>index; ii--) { 
		arrTemp[ii]= arrTemp[ii-1]; 
	} 
	arrTemp[index]=value; 
	return arrTemp; 
}

Array.prototype.indexOfValue = function(value) { 
	var arr = this; 
	for(var i=0; i<arr.length; i++) { 
		if(arr[i] == value){
			return i;
		}
	}
	return -1; 
}

//获取中英混合字符长度
String.prototype.getCharLength = function(){
	return this.match(/[^ -~]/g) == null ? this.length : this.length + this.match(/[^ -~]/g).length;
}

String.prototype.trim = function(){
	return this.replace(/(^\s*)|(\s*$)/g, '');
}

String.prototype.lTrim = function(){
	return this.replace(/(^\s*)/g, "");
}

String.prototype.rTrim = function(){
	return this.replace(/(\s*$)/g, "");
}


//----------------------------------------
// my.cookie.js
//----------------------------------------
// my.cookie

//获取Cookie值
my.cookie.getValue = function(name){
	var cookieString = document.cookie;
	var start = cookieString.indexOf(name + '=');
	if (start == -1) return null;
	
	start += name.length + 1;
	var end = cookieString.indexOf(';', start);
	if (end == -1) return unescape(cookieString.substring(start));
	return unescape(cookieString.substring(start, end));
}

//expires 不设置的话默认是1年
my.cookie.setValue = function(name, value, expires){
	if(typeof(expires) == 'undefined') {
		expires = new Date();
		expires.setFullYear(expires.getFullYear() + 1);
	}
	document.cookie = name + '=' + escape(value) + ';expires=' + expires.toGMTString();
}

//----------------------------------------
// my.data.group.js
//----------------------------------------
// my.data, 存放各种Ajax数据操作



//移动股票位置
my.data.group.moveStock = function(srcgroupid, stockArray, destgroupid, callback_success, callback_fail){//?action=move&list=code,new_groupid; code, new_groupid… 
	var list = '';
	for(var i=0; i<stockArray.length; i++){
		list += stockArray[i];
		list += ',';
		list += destgroupid;
		list += ';';
	}
	$.get('ajax/stock_mgr.do?action=move&list=' + list  + "&t=" + (new Date()).getTime(),
		function(result){ //result格式:code,new_groupid,1;code, new_groupid,0;…
			//检查返回结果
			page.data.checkResult(result);
			//var s_list = my.common.split(result, ';');
			
			callback_success(result);
		}
	);
}



my.data.group.changeView = function(callback_success, callback_fail){
	var list = my.ui.group.move.getGroupViewList();
	$.get('ajax/group_mgr.do?action=change_view&list=' + list + "&t=" + (new Date()).getTime(),
		function(result){ //result格式：(结果,id,name)
			//检查返回结果
			page.data.checkResult(result);
			callback_success(result);
		}
	);
}


//----------------------------------------
// my.data.stock.js
//----------------------------------------
// my.data.stock

//保存股票评级
my.data.stock.rankSave = function(stockCode, value, callback_success, callback_fail){
	$.get('temp/dorank.jsp?code=' + stockCode + '&rank=' + value,
		function(result){ //result格式: success
			callback_success(stockCode, value);
		}
	);
}

my.data.stock.deleteStock = function(groupid, stockArray, callback_success, callback_fail){
	var list = my.common.toListString(stockArray, ';');
	$.get('ajax/stock_mgr.do?action=delete&list=' +list + '&t=',
		function(result){ //result格式: code,1;code,0;…
			//检查返回结果
			page.data.checkResult(result);
			var arr = new Array();
			var group = my.groups.get(groupid);
			var s_list = my.common.split(result, ';');
			for(var i=0; i<s_list.length; i++){
				var s_info = my.common.split(s_list[i], ',');
				arr.push(s_info[0]);
				group.stocks.remove(s_info[0]);
			}
			callback_success(groupid, arr);
		}
	);
}

//填充空数据，有时无法初始化但要求获取数据（例如停牌）
my.data.stock.fillEmptyStockInfo = function(stock){
	stock.set('name', 0);
	stock.set('previousclose',0);
	stock.set('openprice', 0);
	stock.set('openprice-previousclose',0);
	stock.set('shareamount', 0);
	stock.set('shareamount1', 0);
	stock.set('sharevolume', 0);
	stock.set('sharevolume1', 0);
	stock.set('sharecount',0);
	stock.set('updown', 0);
	
	stock.set('todayhigh', 0);
	stock.set('todaylow', 0);
	stock.set('price', 0);
	stock.set('pe', 0);

	stock.set("buyprice1", 0);
	stock.set("buycount1", 0);
	stock.set("buyprice2", 0);
	stock.set("buycount2", 0);
	stock.set("buyprice3", 0);
	stock.set("buycount3", 0);
	stock.set("buyprice4", 0);
	stock.set("buycount4", 0);
	stock.set("buyprice5", 0);
	stock.set("buycount5", 0);
	stock.set("sellprice1", 0);
	stock.set("sellcount1", 0);
	stock.set("sellprice2", 0);
	stock.set("sellcount2", 0);
	stock.set("sellprice3", 0);
	stock.set("sellcount3", 0);
	stock.set("sellprice4", 0);
	stock.set("sellcount4", 0);
	stock.set("sellprice5", 0);
	stock.set("sellcount5", 0);
	stock.set("time", 0);
	stock.set("avg", 0);

	stock.set('arrow', '　');
		
	stock.set("market_price", 0);
	stock.set("profit", 0);
	stock.set("profit_rate", 0);
	stock.set("updown_rate",0);//涨跌额， 最新价 - 昨收
}
//用实时数据分析股票数据(参考quote2.js)
my.data.stock.fillStockInfo = function(stock, a){
	var code=a[0];
	if(stock.get('code') != code){
		//alert('分析股票数据出错:' + stock.get('code') + " != " + code);
		return;
	}
	var _num=3;
	if(code.indexOf("060")==0 || code.indexOf("100")==0|| code.indexOf("0000100")==0|| code.indexOf("1399000")==0)_num=2;
	
	var price = (a[10]*1).toFixed(_num);
	
	//stock.set('code', a[0]);//已在载入分组时设置了
	stock.set('name', a[1]);
	var previousclose = Number(a[2]);
	stock.set('previousclose', previousclose);
	stock.set('openprice', (a[3]*1).toFixed(_num));
	stock.set('openprice-previousclose', a[3]-previousclose);
	stock.set('shareamount', (a[4]/10000).toFixed(0));//+"万"
	stock.set('shareamount1', (a[4]/100000000).toFixed(0));
	stock.set('sharevolume', (a[5]/100).toFixed(0));//+"手"
	stock.set('sharevolume1', (a[5]/10000).toFixed(_num));
	stock.set('sharecount', a[6]);
	stock.set('updown', Number(a[7]));
	
	stock.set('todayhigh', (a[8]*1).toFixed(_num));
	stock.set('todaylow', (a[9]*1).toFixed(_num));
	
	stock.set('pe', a[11]);

	stock.set("buyprice1", (a[12]*1).toFixed(_num));
	stock.set("buycount1", (a[13]/100).toFixed(0));
	//stock.set("buywidth1", QuoteData.buyImgWidth(a[13], a));
	stock.set("buyprice2", (a[14]*1).toFixed(_num));
	stock.set("buycount2", (a[15]/100).toFixed(0));
	//stock.set("buywidth2", QuoteData.buyImgWidth(a[15], a));
	stock.set("buyprice3", (a[16]*1).toFixed(_num));
	stock.set("buycount3", (a[17]/100).toFixed(0));
	//stock.set("buywidth3", QuoteData.buyImgWidth(a[17], a));
	stock.set("buyprice4", (a[18]*1).toFixed(_num));
	stock.set("buycount4", (a[19]/100).toFixed(0));
	//stock.set("buywidth4", QuoteData.buyImgWidth(a[19], a));
	stock.set("buyprice5", (a[20]*1).toFixed(_num));
	stock.set("buycount5", (a[21]/100).toFixed(0));
	//stock.set("buywidth5", QuoteData.buyImgWidth(a[21], a));
	stock.set("sellprice1", (a[22]*1).toFixed(_num));
	stock.set("sellcount1", (a[23]/100).toFixed(0));
	//stock.set("sellwidth1", QuoteData.sellImgWidth(a[23], a));
	stock.set("sellprice2", (a[24]*1).toFixed(_num));
	stock.set("sellcount2", (a[25]/100).toFixed(0));
	//stock.set("sellwidth2", QuoteData.sellImgWidth(a[25], a));
	stock.set("sellprice3", (a[26]*1).toFixed(_num));
	stock.set("sellcount3", (a[27]/100).toFixed(0));
	//stock.set("sellwidth3", QuoteData.sellImgWidth(a[27], a));
	stock.set("sellprice4", (a[28]*1).toFixed(_num));
	stock.set("sellcount4", (a[29]/100).toFixed(0));
	//stock.set("sellwidth4", QuoteData.sellImgWidth(a[29], a));
	stock.set("sellprice5", (a[30]*1).toFixed(_num));
	stock.set("sellcount5", (a[31]/100).toFixed(0));
	//stock.set("sellwidth5", QuoteData.sellImgWidth(a[31], a));
	stock.set("time", a[32]);
	var avg=(a[4]/a[5]).toFixed(2);
	stock.set("avg", avg);
	//取上一次价格
	var lastprice = stock.get('price');
	if(lastprice==null){
		lastprice = price; 
	}
	//最新价
	stock.set('price', price);
	//设置趋势箭头
	var trend = price - lastprice; //升降
	if(price == 0){
		stock.set('updown', 0);	//现价为零表示停牌之类，涨跌已经没有意义
		stock.set('price', previousclose.toFixed(_num));//现价等于昨收
		trend = 0;//没有价格就将趋势置0
	}
	
	if(trend>0){
		stock.set('arrow', '↑');
	}else if(trend<0){
		stock.set('arrow', '↓');
	}else{
		stock.set('arrow', '　');
	}
	
	//结合持仓计算
	if(stock.get("hold_amount")!=null){	//上证深成不含持仓信息
		var market_price = stock.get("price") * stock.get("hold_amount");//当前市价,持仓 * 当前最新价
		stock.set("market_price", market_price.toFixed(2));
	}
	if(stock.get("buy_cost")!=null){
		//盈亏额度  =  当前市值 – 买入成本 = 持有量 * 最新价 - 买入成本
		var profit = market_price - stock.get("buy_cost");
		stock.set("profit", profit.toFixed(2));
		//盈亏率 = 每股盈亏 / 买入均价 = （最新价 – 买入均价）/ 买入均价 = 盈亏额度 / 买入成本
		if(stock.get("buy_cost")==0){
			stock.set("profit_rate", 0);
		}else{
			var profit_rate = stock.get("profit") / stock.get("buy_cost");
			stock.set("profit_rate", profit_rate.toFixed(2));
		}
	}
	var updown_rate = stock.get("updown") / previousclose;
	stock.set("updown_rate",updown_rate);//涨跌额， 最新价 - 昨收

}

//填充股票基本面信息
my.data.stock.fillStockBasic = function(stock, a){
	//code=每股收益，净资产收益率，市盈率LYR，市盈率TTM，市净率，总市值，总股本，主营收入，净利润;code=
	stock.set('每股收益', a[0]);
	stock.set('净资产收益率', a[1]);
	stock.set('市盈率LYR', a[2]);
	stock.set('市盈率TTM', a[3]);
	stock.set('市净率', a[4]);
	stock.set('总市值', a[5]);
	stock.set('总股本', a[6]);
	stock.set('主营收入', a[7]);
	stock.set('净利润', a[8]);
}

//获取机构散户动向里的胜龙分析页面
my.data.stock.getAnalysisLeft = function(stockCode, callback_success, callback_fail){
	var url = "temp/getanalysis.jsp?left_right=left&code=" + stockCode;
	$.get(url,
		function(result){
			if(result=='你所请求的股票不存在!'){
				//return;
			}else{
				//个股分析内涵script代码，这里去掉
				result = result.replace(/<script(.+?)\/script>/gi,"");
			}
			callback_success(stockCode, result);
		}
	);
}
//获取机构散户动向里的胜龙分析页面
my.data.stock.getAnalysisRight = function(stockCode, callback_success, callback_fail){
	var url = "temp/getanalysis.jsp?left_right=right&code=" + stockCode;
	$.get(url,
		function(result){
			if(result=='你所请求的股票不存在!'){
				//return;
			}
			callback_success(stockCode, result);
		}
	);
}

//http://quotes.money.163.com/alert/forcustom/0600183.html
my.data.stock.getAlert = function(stockCode, callback_success, callback_fail){
	var url = "htmlfile/alert/"+stockCode+".html";
	$.get(url,
		function(result){
			if(result=='你所请求的股票不存在!'){
				//return;
			}
			page.caching.cache.set('alert_' + stockCode, result);
			callback_success(stockCode, result);
		}
	);
}

//http://quotes.money.163.com/js/rank/1000031.html
my.data.stock.getWeekRank = function(stockCode, callback_success, callback_fail){
	var url = "temp/getrank.jsp?code="+stockCode;
	$.get(url,
		function(result){ 
			if(result=='你所请求的股票不存在!'){
				//return;
			}
			page.caching.cache.set('weekrank_' + stockCode, result);
			callback_success(stockCode, result);
		}
	);
}

//获取所有股票的数组
my.data.stock.getAllStocks = function(){
	var list = new Array();
	for(var i=0; i<my.groups.getLength(); i++){
		var group = my.groups.getByIndex(i);
		for(var j=0; j<group.stocks.getLength(); j++){
			var stock = group.stocks.getByIndex(j);
			list.push(stock);
		}
	}
	return list;
}

//----------------------------------------
// my.data.trade.js
//----------------------------------------
// my.data.trade

//快速交易：股票买入param?action=trade&type=(1买入0卖出)&code=0600183&date=2008-2-29&amount=1000&price=10.4&commission_rate=0.002&commission=10.0&stamptax=0.001
my.data.trade.quickTrade = function(tradeInfo, callback_success, callback_fail){	
	var query = "action=trade&groupid="+tradeInfo.groupid+"&type="+tradeInfo.type+"&code="+tradeInfo.code+"&date="+tradeInfo.date+"&amount="+tradeInfo.amount+"&price="+tradeInfo.price+"&commission_rate="+tradeInfo.commission_rate+"&commission="+tradeInfo.commission+"&stamptax="+tradeInfo.stamptax;
	$.get("ajax/trade.do?" + query  + "&t=" + (new Date()).getTime(),
		  function(result){	//code, type,result
				//检查返回结果
				page.data.checkResult(result);
				var arr = my.common.split(result, ",");
				var code = arr[0];
				var type = arr[1]=="true" ? "买入" : "卖出";
				var status = arr[2];
				var inserted = arr[3]=="1" ? true : false;//有否插入新持仓
				callback_success(tradeInfo, type, status, inserted);
			}
	)
}

//修改交易记录 ?action=modify&tradeid=10& type=(1买入0卖出)&code=0600183&date=2008-2-29&amount=1000&price=10.4&commission_rate=0.002&commission=10.0&stamptax=0.001
my.data.trade.tradeModify = function(tradeInfo, callback_success, callback_fail){	
	if(!my.ui.trade.validateTradeInfo(tradeInfo)){
		return;
	}
	var query = "action=modify&tradeid="+tradeInfo.id+"&type="+tradeInfo.type+"&code="+tradeInfo.code+"&date="+tradeInfo.date+"&amount="+tradeInfo.amount+"&price="+tradeInfo.price+"&commission_rate="+tradeInfo.commission_rate+"&commission="+tradeInfo.commission+"&stamptax="+tradeInfo.stamptax;
	//标识修改状态
	my.status.tradeEditSaving = true;
	$.get("ajax/trade.do?" + query  + "&t=" + (new Date()).getTime(),
		  function(result){	//result(1 for success/-1 for 数量不符而失败 0 其它失败)
				//检查返回结果
				page.data.checkResult(result);
				my.status.tradeEditSaving = false;
				callback_success(result);
			}
	)
}



//返回按日期排序的全部交易记录
my.data.trade.getAllTradeArray = function(){
	var array = new Array();
	var list = my.data.stock.getAllStocks();
	for(var i=0; i<list.getLength(); i++){
		var tradeList = list[i];
		for(var j=0; j<tradeList.getLength(); j++){
			var trade = tradeList.getByIndex(j);
			array.push(trade);
		}
	}
	/*
	array.sort(
		function(left,right){
			
		});
	*/
	return array;
}

//----------------------------------------
// my.ui.js
//----------------------------------------
// my.ui 界面操作与初始化

//因其特殊性，这里单独创建多图同列的组合视图
my.ui.createGroupAreaImage = function(modelid, pageid, group, visible){
	var modelPage = $('#'+modelid);
	var groupArea = modelPage.find("div[mytype='groupArea']").clone();//复制一份
	
	groupArea.attr('groupid', group.id);
	var title = groupArea.find('.lefttitle5');
	title.attr("pageid",pageid);
	title.attr("groupid",group.id);
	title[0].onclick = function(){
		my.ui.group.titleClick($(this).attr("pageid"),$(this).attr("groupid"));
	}
	
	//设置组合名称
	var name = title.find("a[mytype='groupname']");
	name.text(group.name);
	
	//股票列表
	var leftList4 = groupArea.find('.leftList4');
	leftList4.attr('mytype','listOfGroup');//标识组合列表，用于折叠
	leftList4.attr('id',pageid + '_group_' + group.id);
	leftList4.attr('groupid',group.id);
	//设置可见性
	var img = title.find("img");
	if(visible){
		leftList4.show();
		img.css("margin","5px 5px 0 0");
		img.attr("src","privyimg/bg50.gif");
	}else{
		leftList4.hide();
		img.css("margin","3px 5px 0 0");
		img.attr("src","privyimg/bg40.gif");
	}

	var stockLi = leftList4.find("li[mytype='stockItem']");
	leftList4.empty();//清空一下
	var dt = new Date();
	var txtDate =dt.getFullYear() + "-" + dt.getMonth() + "-" + dt.getDay();
	var ul = null;
	for(var i = 0; i < group.stocks.getLength(); i ++){
		var stock = group.stocks.getByIndex(i);
		var code = stock.get('code');
		var liData = stockLi.clone();//插入股票
		liData.attr('stockcode', code);
		var name = liData.find("a[mytype='stockname']");
		name.text(stock.get('name')+"["+stock.get('short_code')+"]");
		name.attr("href","http://quotes.money.163.com/"+code+".html");
		var imgLnk = liData.find("a[mytype='stockimage']");
		imgLnk.attr("href","http://quotes.money.163.com/"+code+".html");
		var imgUrl = "http://img1.quotes.ws.126.net/chart/stimechart/"+code+".png?" + dt.getTime();
		imgLnk.find('img').attr('src', imgUrl);
		
		liData.find("h3[mytype='date']").text(txtDate);
		
		//换行
		if(i % 4 == 0){ 
			var ul = $(document.createElement('ul'));
			leftList4.append(ul);
		}
		
		ul.append(liData);
	}
	return groupArea;
}
	
//创建组合区域
my.ui.createGroupArea = function(modelid, pageid, group, visible){
	var modelPage = $('#'+modelid);
	var divStockDetail = modelPage.find("div[mytype='stockDetail']");
	//alert(divStockDetail.html());
	if(divStockDetail.length==0){
		//divStockDetail = page.caching.cache.get(my.model.cache[pageid]);
	}else{
		//缓存股票详细信息div
		if(!page.caching.cache.contains(my.model.cache[pageid])){
			page.caching.cache.add(my.model.cache[pageid], divStockDetail.clone());
		}
		divStockDetail.remove();//这里的这句似乎对ie无效
	}
	
	var groupArea = modelPage.find("div[mytype='groupArea']").clone();//复制一份
	
	groupArea.attr('groupid', group.id);
	var title = groupArea.find('.lefttitle5');
	title.attr("id",pageid + '_title_' + group.id);
	title.attr("pageid",pageid);
	title.attr("groupid",group.id);
	title[0].onclick = function(){
		my.ui.group.titleClick($(this).attr("pageid"),$(this).attr("groupid"));
	}
	
	//设置组合名称
	var name = title.find("a[mytype='groupname']");
	name.text(group.name);

	//股票列表
	var leftList3 = groupArea.find('.leftList3');
	leftList3.attr('mytype','listOfGroup');//标识组合列表，用于折叠
	leftList3.attr('id',pageid + '_group_' + group.id);
	leftList3.attr('groupid',group.id);
	//设置可见性
	var img = title.find("img");
	if(visible){
		leftList3.show();
		img.css("margin","5px 5px 0 0");
		img.attr("src","privyimg/bg50.gif");
	}else{
		leftList3.hide();
		img.css("margin","3px 5px 0 0");
		img.attr("src","privyimg/bg40.gif");
	}
	//处理排序表头
	var ulTop = leftList3.find("ul[mytype='top']");
	ulTop.find("a[mytype='title_name']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_name',null,'string');");
	ulTop.find("a[mytype='title_code']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_code',null,'string');");
	ulTop.find("a[mytype='title_price']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_price',null,'number');");
	ulTop.find("a[mytype='title_updown_rate']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_updown_rate',null,'percent');");
	ulTop.find("a[mytype='title_hold_amount']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_hold_amount',null,'number');");
	ulTop.find("a[mytype='title_buy_cost']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_buy_cost',null,'number');");
	ulTop.find("a[mytype='title_buy_cost_avg']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_buy_cost_avg',null,'number');");
	ulTop.find("a[mytype='title_market_price']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_market_price',null,'number');");
	ulTop.find("a[mytype='title_profit_rate']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_profit_rate',null,'percent');");
	ulTop.find("a[mytype='title_profit']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_profit',null,'number');");
	//走势专用
	if(pageid=="page2" || pageid=="page4"){
		ulTop.find("a[mytype='title_updown']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_updown',null,'number');");
		ulTop.find("a[mytype='title_shareamount']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_shareamount',null,'number');");
		ulTop.find("a[mytype='title_sharevolume']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_sharevolume',null,'number');");
		ulTop.find("a[mytype='title_close_open']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_close_open',null,'string');");
		ulTop.find("a[mytype='title_high_low']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_high_low',null,'string');");
	}
	//基本面和动向专用
	if(pageid=="page3"){
		ulTop.find("a[mytype='title_总市值']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_总市值',null,'number');");
		ulTop.find("a[mytype='title_总股本']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_总股本',null,'number');");
		ulTop.find("a[mytype='title_主营收入']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_主营收入',null,'number');");
		ulTop.find("a[mytype='title_净利润']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_净利润',null,'number');");
		ulTop.find("a[mytype='title_市盈率LYR']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_市盈率LYR',null,'number');");
		ulTop.find("a[mytype='title_市净率']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_市净率',null,'number');");
		ulTop.find("a[mytype='title_每股收益']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_每股收益',null,'number');");
		ulTop.find("a[mytype='title_净资产收益率']").attr('href',"javascript:page.main.sort('"+pageid+"','"+group.id+"','info_净资产收益率',null,'percent');");
	}
	
	var ulStock = leftList3.find("ul[mytype='stockList']");
	//var liDataModel = ulStock.find("li[mytype='stockItem']");
	
	
	var ulBottom = leftList3.find("ul[mytype='bottom'] ");
	//移除模板
	ulStock.remove();
	ulBottom.remove();//暂时移除

	//var ulStock = ulStockModel.clone();
	ulStock.empty();//
	ulStock.attr('groupid', group.id);//标记该列表
	leftList3.append(ulStock);
	leftList3.append(ulBottom);
	
	for(var gIndex = 0; gIndex < group.stocks.getLength(); gIndex ++){
		var stock = group.stocks.getByIndex(gIndex);
		var liData = my.ui.createStockLi(modelid, pageid, group, stock);//插入股票
		ulStock.append(liData);
	}
	
	//leftList3.append('<div class="clear"></div>');
	//绑定删除和移动的操作
	var chkSelectAll = ulBottom.find("input[mytype='input_select_all']");
	//alert(chkSelectAll.parent().html());
	chkSelectAll.attr('pageid',pageid);
	chkSelectAll.attr('groupid',group.id);
	chkSelectAll[0].onclick = function(){
		my.ui.group.selectAll($(this).attr('pageid'), $(this).attr('groupid'), this.checked);
	};
	
	var butDelete = ulBottom.find("input[mytype='input_delete']");
	butDelete.attr('pageid',pageid);
	butDelete.attr('groupid',group.id);
	butDelete[0].onclick = function(){
		my.ui.stock.deleteSelected($(this).attr('pageid'),$(this).attr('groupid'));
	};

	//插入移动到其它位置的列表
	var selectMove =ulBottom.find("select[mytype='select_move']");
	selectMove.attr('groupid', group.id)
	for(var j=0; j<my.groups.getLength(); j++){
		var gp = my.groups.getByIndex(j);
		selectMove.append('<option value='+gp.id+'>&nbsp;&nbsp;'+gp.name+'</option>');
	}
	selectMove.prepend('<option selected value=-1>移动到</option>');
	selectMove[0].selectedIndex = 0;
	selectMove[0].onchange = function(){
		my.ui.group.moveStockStart(this);
	}
	//返回对象
	return groupArea;
}

//创建股票数据行
my.ui.createStockLi = function(modelid, pageid, group, stock){
	var modelPage = $('#'+modelid);
	var groupArea = modelPage.find("div[mytype='groupArea']");
	var stockUl = groupArea.find("ul[mytype='stockList']");
	var stockLi = stockUl.find("li[mytype='stockItem']").clone();//复制一条
	//alert(modelid + "," + pageid + "," + group.name + "," + stock.getKeyString());
	var code = stock.get('code');
	stockLi.attr('groupid', group.id);
	stockLi.attr('stock', code);
	stockLi.find('div[mytype="info_name"] > a').text(stock.get('name'));
	stockLi.find('div[mytype="info_name"] > a').attr('href','http://quotes.money.163.com/'+code+'.html');
	stockLi.find('div[mytype="info_code"] > a').text(stock.get('short_code'));
	stockLi.find('div[mytype="info_code"] > a').attr('href','http://quotes.money.163.com/'+code+'.html');
	stockLi.find('div[mytype="info_"]').text("-");
	var itemExpand = stockLi.find('div[myexpand="true"]');
	for(var i=0; i<itemExpand.length; i++){
		itemExpand[i].onclick = function(){
			var li = $(this).parent("li");
			my.ui.stock.toggleDetail(pageid,li.attr('groupid'),li.attr('stock'))
		}
	}
	
	//评级星星
	var spanRank = stockLi.find("div[mytype='rank'] > h3");
	var rank = new StarRank();//创建评级星星
	rank.create(spanRank.get(0), code);
	rank.rankClick = my.ui.stock.rankClick;
	rank.setRankValue(my.cookie.getValue("rank_"+code));
	//买卖操作
	var tradeMgr = stockLi.find("div[mytype='trademgr'] > a");
	tradeMgr.attr('href','javascript:page.tradeManager.show("' + code + '");');
	return stockLi;
}

my.ui.reCreateTradePanel = function(){
	my.ui.trade.resetTradePanel();//清空旧数据
		my.ui.trade.createTradePanel();
}

//重建页面,更改组合显示属性、位置，添加删除组合时调用
my.ui.reCreatePage = function(pageid){
	//对于交易管理做特别处理
	if(pageid=="page6"){
		my.ui.trade.resetTradePanel();//清空旧数据
		my.ui.trade.createTradePanel();
		my.ui.trade.loadTrade();//载入数据
		return;
	}
	var panel = $('#'+pageid);
	panel.empty();
	for(var i = 0; i < my.groups.getLength(); i ++){
		var group = my.groups.getByIndex(i);
		if(group.visible != 'true') continue;
		switch(pageid){
			case 'page1':
			case 'page2':
			case 'page3':
			case 'page4':
				var groupArea = my.ui.createGroupArea(my.model[pageid], pageid, group, group.expanded);
				panel.append(groupArea);
				break;
			case "page5":
				var groupArea = my.ui.createGroupAreaImage(my.model[pageid], pageid, group, group.expanded);
				panel.append(groupArea);
				break;
		}
	}
}

//更新组合后，page index 被立刻my.ui.reCreatePage(),其它页面也需要重置
my.ui.resetOtherPage = function(except_index){
	for(var i=0; i<6; i++){
		if(i != except_index){
			my.ui.resetPage(i);
		}
	}
}

//清空page的内容，一般用于在其它地方添加修改后调用
my.ui.resetPage = function(index){
	var panel = $('#page'+(index+1));
	panel.attr('created', 'false');//取消已创建的标记，让点击标签时再次创建
	//交易管理做特殊处理
	if(index==5){
		my.ui.trade.resetTradePanel();
		my.ui.trade.createTradePanel();
	}else{
		panel.empty();
	}
}

//更新页面的信息，不涉及添加删除行，在获得实时数据时使用
my.ui.refreshPageInfo = function(pageid){
	if(!page.status.loadStockOnce) return;//没有载入过实时数据就无法刷新
	//先刷新上证深成指数
	page.main.refreshIndex(my.data.stock.sh);
	page.main.refreshIndex(my.data.stock.sz);
	//刷新页面信息
	var panel = $('#'+pageid);
	//如果还没创建完成就退出
	if(panel.attr('created') != 'true') return;
	switch(pageid){
		case 'page1':
			page.panel1.refresh();
			break;
		case 'page2':
			page.panel2.refresh();
			break;
		case 'page3':
			if(page.status.loadBasicOnce){//已加载完成，立刻刷新
				page.panel3.refresh();
			}else if(!page.status.loadingBasic){//未加载完成，并且不是加载ing，就启动加载
				page.data.loadBasic(function(){if(page.currentPanel.id=="page3") page.currentPanel.refresh();});
			}
			break;
		case 'page4':
			page.panel4.refresh();
			break;
		case 'page5':
			page.panel5.refresh();
			break;
		case 'page6':
			page.panel6.refresh();
			break;
	}
	//刷新完成后启动小定时器清空走势箭头
	page.main.clearArrowTimer = window.setTimeout("page.panel.clearTrendArrow()",5000);
}

//居中显示div
my.ui.showCenter = function(div, zindex, width){
	div.style.position = "absolute";
	if(zindex != undefined){
		div.style.zIndex = zindex;
	}else{
		div.style.zIndex = 100001;
	}
	if(!width){
		width = 960;
	}
	div.style.left = (document.body.clientWidth - width)/2 + 'px';
    div.style.top =  document.documentElement.scrollTop + 100 + 'px';
	//div.style.marginLeft = "-225px";
	//div.style.marginTop = -75 + document.documentElement.scrollTop + 'px';
}

//根据value的正负返回红色、黑色或绿色的css样式名
my.ui.getColorCss = function(value){
	if(value>0) return "cRed";
	if(value==0) return "cBlack";
	if(value<0) return "cGreen";
}


//----------------------------------------
// my.ui.editor.js
//----------------------------------------
// my.ui.editor 界面编辑器(jQuery)

//用带cssName的文本框编辑指定的html元素
my.ui.editor.inputEdit = function(jElem, cssName){
	var input = document.createElement('input');
	input.type = 'text';
	input.value = jElem.text();//设置value
	input.className = cssName;
	jElem.text("");
	jElem.attr("oldvalue",input.value);
	jElem.append(input);//插入到紧接着的位置
}

//用带cssName的下拉框(含预设的array)编辑指定的html元素
my.ui.editor.selectEdit = function(jElem, array, cssName){
	var selObj = document.createElement('select');
	var value = jElem.text();//设置value
	selObj.className = cssName;
	jElem.text("");
	for(var i=0; i<array.length; i++){
		selObj.options.add(new Option(array[i],i));
		if(array[i] == value){
			selObj.value = i;//选中
		}
	}
	jElem.attr("oldvalue",value);
	jElem.append(selObj);//插入到紧接着的位置
}
//完成下拉编辑
my.ui.editor.selectEditFinish = function(jElem, array){
	var selObj = jElem.find("select:last-child")[0];
	var selectedValue = selObj.value;
	var text = array[selectedValue];
	$(selObj).remove();
	jElem.text(text);
}

//取消下拉编辑
my.ui.editor.selectEditCancel = function(jElem, array){
	var selObj = jElem.find("select:last-child")[0];
	$(selObj).remove();
	jElem.text(jElem.attr("oldvalue"));
}

//完成文本编辑
my.ui.editor.inputEditFinish = function(jElem){
	var input = jElem.find("input:last-child")[0];
	var value = input.value;
	$(input).remove();
	jElem.text(value);
}

//取消文本编辑
my.ui.editor.inputEditCancel = function(jElem){
	var input = jElem.find("input:last-child")[0];
	$(input).remove();
	jElem.text(jElem.attr("oldvalue"));
}

//获取文本编辑中的值
my.ui.editor.getInputValue = function(jElem){
	var input = jElem.find("input:last-child")[0];
	var value = input.value;
	return value;
}

//获取编辑中的值
my.ui.editor.getSelectValue = function(jElem){
	var selObj = jElem.find("select:last-child")[0];
	var value = selObj.options[selObj.selectedIndex].text;
	return value;
}

//验证编辑的数据是否合法
//validator数据验证器
//{type:'input',dataType:'number',minimum:0,maximum:1000,allowEmpty:false,msg:'请输入正确的..'}
//{type:'input',dataType:'string',length_min:0,length_max:1000,allowEmpty:false,msg:'请输入正确的..'}
//{type:'input',dataType:'date',reg:/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/,allowEmpty:false,msg:'请输入正确的..'}
//{type:'select',dataType:'array',array:[1,2,3],msg:'请输入正确的..'}
//{type:'radio',dataType:'array',array:[1,2,3],msg:'请输入正确的..'}
my.ui.editor.validateInput = function(jElem, validator){
	//validator.type=='input'
	var input = jElem.next()[0];
	var value = input.value;

	if(validator.dataType=='number'){
		if(!validator.allowEmpty && (value==undefined || value.trim()=='')){
			alert(validator.msg);
			return false;
		}
		if(isNaN(value)){	//并非数字
			alert(msg);
			return false;
		}
		if(num<validator.minimum){
			alert(msg);
			return false;
		}else if(num>validator.maximum){
			alert(msg);
			return false;
		}
	}else if(validator.dataType=='string'){
		alert('暂时未使用');
	}else if(validator.dataType=='date'){
		alert('暂时未使用');
	}
	return true;
}

//----------------------------------------
// my.ui.group.js
//----------------------------------------
// my.ui.group, 和组合相关的所有界面操作或事件


//点击标题折叠
my.ui.group.titleClick = function(pageid, groupid){
	var title = $("#"+pageid+"_title_"+groupid);
	var listOfGroup = $("#"+pageid+"_group_"+groupid);
	var group = my.groups.get(groupid);
	if(listOfGroup.css('display')=='none'){//切换group的显示状态
		group.expanded = true;
		var img = title.find("img");
		img.css("margin","5px 5px 0 0");
		img.attr("src","privyimg/bg50.gif");
	}else{
		group.expanded = false;
		var img = title.find("img");
		img.css("margin","3px 5px 0 0");
		img.attr("src","privyimg/bg40.gif");
	}
	listOfGroup.slideToggle('fast');
}

//点击移动股票的select下拉列表时触发
my.ui.group.moveStockStart = function(selectObj){
	var index = selectObj.selectedIndex;
	if(index == 0) return;
	var groupid = selectObj.options[index].value;
	var src_groupid = $(selectObj).attr('groupid');
	var stockArr = my.ui.stock.getSelectedArray(page.currentPanel.id, src_groupid);
	if(stockArr.length == 0){
		alert('请先选中你要移动的股票:>');
		selectObj.selectedIndex = 0;
		return;
	}else if(src_groupid == groupid){
		alert('股票已经在这个组了 ^_^;');
		selectObj.selectedIndex = 0;
		return;
	}
	
	//立刻移动，制造烟幕 :>
	var g_src = my.groups.get(src_groupid);
	var g_dest = my.groups.get(groupid);
	for(var i=0; i<stockArr.length; i++){
		var stock = g_src.stocks.remove(stockArr[i]);
		g_dest.stocks.add(stockArr[i], stock);
	}
	alert("股票成功转移到 "+g_dest.name+" 组合 ^_^");
	my.ui.reCreatePage(page.currentPanel.id);
	my.ui.resetOtherPage(page.currentPanel.index);
	//现在才发送转移请求
	my.data.group.moveStock(src_groupid, stockArr, groupid, my.ui.group.moveStockFinish);
	//立刻刷新一下
	window.setTimeout(function(){my.ui.refreshPageInfo(page.currentPanel.id);}, 50);
}

my.ui.group.moveStockFinish = function(result){
	//alert(result);
	//不需要的呃
}


//选中或取消选中组合里的全部股票
my.ui.group.selectAll = function(pageid, groupid, selected){
	var panel = $('#'+pageid);
	var ul = panel.find("ul[mytype='stockList'][groupid='"+groupid+"']");//查找组合列表
	var list = ul.find("li[mytype='stockItem']");
	var checks = list.find("input[mytype='info_select']");//查找前面的checkbox
	for(var index=0; index <checks.length; index ++){
		var chk = checks.get(index);
		chk.checked = selected;//统一设置选中状态
	}
}

//搜索组合所在的div
my.ui.group.findGroupArea = function(pageid, groupid){
	var panel = $('#'+pageid);
	var groupArea = panel.find("div[mytype='groupArea'][groupid='"+groupid+"']");
	return groupArea;
}

my.ui.group.changeViewFinish = function(result){
	page.groupManager.hide();
	my.ui.reCreatePage(page.currentPanel.id);
	my.ui.resetOtherPage(page.currentPanel.index);
	page.status.groupViewChanged = false;
	//刷新
	window.setTimeout(function(){my.ui.refreshPageInfo(page.currentPanel.id);}, 50);
}

//获取当前分组的顺序信息，用于ajax更新,格式?action=change_view&list=id,index,visible;id,index+1,visible;id..
my.ui.group.move.getGroupViewList = function(){
	var list = '';
	for(var i=0; i<my.groups.getLength(); i++){
		var group = my.groups.getByIndex(i);
		list += group.id;
		list += ',';
		list += i;//index
		list += ',';
		list += group.visible;
		list += ';';
	}
	return list;
}




//----------------------------------------
// my.ui.stock.js
//----------------------------------------
// my.ui.stock

//点击评级星星
my.ui.stock.rankClick = function(sender, stockCode, value){
	//发出保存请求
	my.data.stock.rankSave(stockCode, value, my.ui.stock.rankFinish);
	sender.disabled = true;//刷新一次页面只运行一次评级
	sender.disabledEvent = function(message){
		alert(message);
	}
	var stock = my.common.findStock(stockCode);
		//立刻显示反馈
	alert("感谢你对 "+stock.get('name')+"的评级:>");
}

//评级成功
my.ui.stock.rankFinish = function(code, value){
	//成功后保存到cookie
	my.cookie.setValue("rank_"+code, value);
}

//搜索股票所在的li行
my.ui.stock.findStockLi = function(pageid, groupid, stockCode){
	var groupArea = my.ui.group.findGroupArea(pageid, groupid);
	var stockLi = groupArea.find("li[mytype='stockItem'][stock='"+stockCode+"']");
	return stockLi;
}

//获取选中的股票数组
my.ui.stock.getSelectedArray = function(pageid, groupid){
	var arr = new Array();//构造?action=delete&list= code;code… 
	
	var groupArea = my.ui.group.findGroupArea(pageid, groupid);
	var list = groupArea.find("li[mytype='stockItem']");
	
	for(var i=0; i <list.length; i ++){
		var check = $(list[i]).find("input[mytype='info_select']");//查找前面的checkbox
		if(check[0].checked){
			arr.push($(list[i]).attr('stock'));
		}
	}
	
	return arr;
}
//删除选中的股票
my.ui.stock.deleteSelected = function(pageid, groupid){
	var arr = my.ui.stock.getSelectedArray(pageid, groupid);
	
	if(arr.length == 0){
		alert('请先选中要删除的股票:>');
		return;
	}
	if(confirm('你确定要删除选中的股票吗？')){
		my.data.stock.deleteStock(groupid, arr, my.ui.stock.deleteFinish);
	}
}

my.ui.stock.deleteFinish = function(groupid, stockArray){
	for(var i=0; i<stockArray.length; i++){
		var stockLi = my.ui.stock.findStockLi(page.currentPanel.id, groupid, stockArray[i]);
		stockLi.remove();//移除
	}
	//重设其它页面
	my.ui.resetOtherPage(page.currentPanel.index);
	//刷新快速交易
	page.quickTrade.refreshGroupList();
}

//填充stock对象详细信息divDetail对象
my.ui.stock.fillDetail = function(pageid, divDetail, stock){
	
	var code = stock.get('code');
	if(pageid=="page4"){	//机构散户动向的详细信息有别于前三个
	
		var stockName = divDetail.find("span[mytype='stockname']");
		stockName.text(stock.get("name") + "("+stock.get("short_code")+")");
		var updateTime = divDetail.find("span[mytype='update_time']");
		updateTime.text(my.common.getShortDate());
		
		var info_l = divDetail.find("iframe[mytype='left_info']");
		info_l.attr("src","http://quotes.money.163.com/finance/Yeah2/zj/"+stock.get('short_code')+".html");
		var info_r = divDetail.find("iframe[mytype='right_info']");
		info_r.attr("src","http://quotes.money.163.com/finance/Yeah1/contrast/"+stock.get('short_code')+".html");
	}else{
		/*
		var name = divDetail.find("a[mytype='stockname']");
		name.text(stock.get('name') + "[" + code + "]");
		var dt = new Date();
		var txtDate = divDetail.find("h3[mytype='date']");
		txtDate.text(my.common.getShortDate());*/
		var imgLnk = divDetail.find('a[mytype="stockimage"]');
		imgLnk.attr('href','http://quotes.money.163.com/'+code+'.html');
		var imgUrl = "http://img1.quotes.ws.126.net/chart/stimechart/"+code+".png?" + (new Date()).getTime();
		var img = imgLnk.find('img');
		img.attr('src', imgUrl);
		my.ui.stock.getAlert(code,
			function(code, result){
				divDetail.find("div[mytype='alert']").empty();
				divDetail.find("div[mytype='alert']").append(result);
			}
		);
		my.ui.stock.getWeekRank(code,
			function(code, result){
				//alert(code + "," + result);
				divDetail.find("div[mytype='weekrank'] > dl").empty();
				result = result.replace(/li/g,'dd');
				result = result.replace(/stockimg/g,'privyimg');
				divDetail.find("div[mytype='weekrank'] > dl").append(result);
			}
		);
	}
}

//切换详细信息的显示状态
my.ui.stock.toggleDetail = function(pageid, groupid, stockCode){
	var li = my.ui.stock.findStockLi(page.currentPanel.id, groupid, stockCode);
	var cache_detail = "detail_" + pageid + "_" + stockCode;
	var divDetail = page.caching.stockDetail.get(cache_detail);
	//重新插入缓存
	if(divDetail == null){
		divDetail = page.caching.cache.get(my.model.cache[pageid]).clone();//重新复制一份
		page.caching.stockDetail.set(cache_detail,divDetail);

		var group = my.groups.get(groupid);
		var stock = group.stocks.get(stockCode);
		
		if(li.find("*[mytype='stockDetail']").length==0){
			divDetail.hide();
			li.append(divDetail);
		}
		
		divDetail.slideToggle('fast',function(){my.ui.stock.fillDetail(pageid, divDetail,stock);});
		
		return;
	}
	var img = divDetail.find('a[mytype="stockimage"]').find('img');
	var imgUrl = "http://img1.quotes.ws.126.net/chart/stimechart/"+stockCode+".png?" + (new Date()).getTime();
	img.attr('src', imgUrl);
	if(li.find("*[mytype='stockDetail']").length==0){
		divDetail.hide();
		li.append(divDetail);
	}

	divDetail.slideToggle('fast');
	
}


//从缓存里获取股票公告，找不到的话重新下载
my.ui.stock.getAlert = function(stockCode, callback_finish){
	var cache_alert = page.caching.cache.get('alert_' + stockCode);
	if(cache_alert != null){
		//如果存在股票的话立刻返回
		callback_finish(stockCode, cache_alert);
	}else{
		//将回调函数交给下载代器
		my.data.stock.getAlert(stockCode, callback_finish);
	}
}

//从缓存里获取周评级，找不到的话重新下载
my.ui.stock.getWeekRank = function(stockCode, callback_finish){
	var cache_rank = page.caching.cache.get('weekrank_' + stockCode);
	if(cache_rank != null){
		//如果存在股票的话立刻返回
		callback_finish(stockCode, cache_rank);
	}else{
		//将回调函数交给下载代理my.ui.stock.getWeekRankStart
		my.data.stock.getWeekRank(stockCode, callback_finish);
	}
}



//----------------------------------------
// my.ui.trade.js
//----------------------------------------
// my.ui.trade.js

//交易管理面板
my.ui.trade.tradeMgr = null;

//刷新交易信息:用于买入卖出后的页面更新
my.ui.trade.refreshTrade = function(inserted){
	//刷新自选股持仓信息
	page.data.refreshChiCang(function(){
		//刷新弹出的交易面板
		if(page.tradeManager.visible){
			page.data.loadAllTrade(function(){
				var stock = my.common.findStock(page.tradeManager.stockCode);
				page.tradeManager.fillTradeList(stock);
				my.ui.resetPage(6);
			});
		}
		
		if(inserted){ //有插入新股
			my.ui.reCreatePage(page.currentPanel.id);
			my.ui.resetOtherPage(page.currentPanel.index);
			if(page.status.loadBasicOnce){	//基本面数据要重新下载
				page.data.loadBasic(function(){my.ui.refreshPageInfo(page.currentPanel.id);});
			}else{
				my.ui.refreshPageInfo(page.currentPanel.id);
			}
		}else if(page.currentPanel.id=="page1"){
			page.panel1.refresh("page1");
		}else if(page.currentPanel.id=="page6"){ 
			my.ui.reCreatePage("page6");
		}else{
			my.ui.resetPage(6);//交易列表一定要更新
		}
	});
}





//切换显示交易管理中“查看全部”和“按个股查看”
my.ui.trade.curPanel = "alltrade";//singletrade
my.ui.trade.showTradePanel = function(panelname){
	var panel = $("#page6");
	my.ui.trade.curPanel = panel;
	var panel1 = panel.find("div[mytype='alltrade']");
	var panel2 = panel.find("div[mytype='singletrade']");
	if(panelname == "alltrade"){
		panel1.show();
		panel2.hide();
	}else{
		panel2.show();
		panel1.hide();
	}
}

//创建交易管理的面板
my.ui.trade.createTradePanel = function(){
	var panelall = $("#page6 > div[mytype='alltrade']");
	var tradeList = panelall.find("ul[mytype='tradeList']");
	var tradeItem = page.caching.cache.get("cache_alltrade_item");
	if(tradeItem==null){
		tradeItem = tradeList.find("li[mytype='tradeItem']");
		page.caching.cache.add("cache_alltrade_item", tradeItem);//放入缓存备用
		tradeItem.remove();
	}
	
	//singletrade-----------
	var panelsingel = $("#page6 > div[mytype='singletrade']");
	var stockAreaModel = page.caching.cache.get("cache_trade_stockArea");
	if(stockAreaModel==null){
		stockAreaModel = panelsingel.find("div[mytype='stockArea']");
		page.caching.cache.add("cache_trade_stockArea", stockAreaModel);//放入缓存备用
		stockAreaModel.remove();
	}
	
	var tradeList2 = stockAreaModel.find("ul[mytype='tradeList']");
	var tradeItemModel = page.caching.cache.get("cache_trade_stockitem");
	if(tradeItemModel==null){
		tradeItemModel = tradeList2.find("li[mytype='tradeItem']");
		page.caching.cache.add("cache_trade_stockitem", tradeItemModel);//放入缓存备用
		tradeItemModel.remove();
	}
	var stockAreaList = panelsingel.find("div[mytype='stockAreaList']");
	//获取所有股票
	var list = my.data.stock.getAllStocks();
	for(var i=0; i<list.length; i++){
		var stock = list[i];

		var code = stock.get('code');
		var stockArea = stockAreaModel.clone();
		stockArea.attr('stock', code);
		var areaTop = stockArea.find(".title2");
		areaTop.attr('stockcode', code);
		areaTop[0].onclick = function(){
			my.ui.trade.toggleTradeDetail($(this).attr('stockcode'));
		}
		var stockTitle = stockArea.find(".title2 a[mytype='stocktitle']");
		stockTitle.text(stock.get('name') + "("+stock.get('short_code')+")");
		var tradeinfo = stockArea.find(".title2 h3[mytype='tradeinfo']");
		tradeinfo.text("共持有"+stock.get("hold_amount")+"股，均价"+stock.get("buy_cost_avg")+"元");
		//全选按钮
		var check = stockArea.find("ul li input[mytype='selectAll']");
		check.attr("stockcode", code);
		check[0].onclick = function(){
			my.ui.trade.selectAllTrade($(this).attr('stockcode'),this.checked);
		}
		//删除按钮
		var del = stockArea.find("ul li input[mytype='butDelete']");
		del.attr("stockcode", code);
		del[0].onclick = function(){
			my.ui.trade.deleteSelected($(this).attr('stockcode'));
		}
		stockAreaList.append(stockArea);
	}
	my.ui.trade.cerateTradePanelOnce = true;
}

//是否创建过page6
my.ui.trade.cerateTradePanelOnce = false;
//清空交易管理
my.ui.trade.resetTradePanel = function(){
	if(my.ui.trade.cerateTradePanelOnce == false){
		return;
	}
	var panelall = $("#page6 > div[mytype='alltrade']");
	var tradeList = panelall.find("ul[mytype='tradeList']");
	//var tradeItem = tradeList.find("li[mytype='tradeItem']");
	tradeList.empty();
	
	//single
	var panelsingel = $("#page6 > div[mytype='singletrade']");
	var stockAreaList = panelsingel.find("div[mytype='stockAreaList']");
	stockAreaList.empty();
}

//删除选中的交易记录
my.ui.trade.deleteSelected = function(code, isPop){
	var tradeList = my.ui.trade.getTradeLiSelected(code, isPop);
	if(tradeList.length==0){
		alert("请先选中要删除的交易记录.");
		return;
	}
	var list = "";
	for(var i=0; i<tradeList.length; i++){
		var li = $(tradeList[i]);
		list += li.attr("stock");//获取属性
		list += ",";
		list += li.attr("tradeid");
		list += ";";
	}
	if(confirm("你确实要删除选中的" + tradeList.length + "条交易记录吗?")){
		page.tradeManager.deleteTrades(list,my.ui.trade.deleteSelectedFinish);
	}
}

//删除完成 result(1 for success/-1 for 数量不符而失败 0 其它失败)
my.ui.trade.deleteSelectedFinish = function(result){
	if(result=="-1"){
		alert("抱歉，持仓数量必须大于0，无法同时删除选中的交易记录. :<");
		return;
	}else if(result=="0"){
		alert("抱歉，出现未知错误.");
	}
	//删除成功,执行更新 false不涉及到新增持仓
	my.ui.trade.refreshTrade(false);
}

//折叠或展开交易记录明细
my.ui.trade.toggleTradeDetail = function(stockCode){
	if(/*!my.status.loadAllTradeOnce || */my.status.loadingAllTrade){
		alert("正在加载交易记录, 请稍等 :(");
		return;
	}
	var panelsingle = $("#page6 > div[mytype='singletrade']");
	var stockArea = panelsingle.find("div[mytype='stockArea'][stock='"+stockCode+"']");
	//alert(content.html());
	var content = stockArea.find("div[mytype='content']");
	//展开时才创建列表
	if(content.attr('created')!='true'){
		var ul = content.find("ul[mytype='tradeList']");
		ul.empty();
		
		var stock = my.common.findStock(stockCode);
		var code = stockCode;
		var trades = stock.get('trades');
		for(var i=0; i<trades.getLength(); i++){
			var trade = trades.getByIndex(i);
			var tradeItem = page.caching.cache.get("cache_trade_stockitem").clone();
			tradeItem.attr("tradeid",trade.id);
			tradeItem.attr("stock",code);
			var itemId = "panelsingle_"+code+"_"+trade.id;
			tradeItem.attr("id",itemId);//记录id
			tradeItem.find("div[mytype='date']").text(trade.date);
			tradeItem.find("div[mytype='tradetype']").text((trade.type=='true')?'买入':'卖出');
			tradeItem.find("div[mytype='amount']").text(trade.amount);
			tradeItem.find("div[mytype='price']").text(trade.price);
			tradeItem.find("div[mytype='commission_rate']").text(trade.commission_rate);
			tradeItem.find("div[mytype='commission']").text(trade.commission);
			tradeItem.find("div[mytype='stamptax']").text(trade.stamptax);
			//编辑交易记录
			var butEdit = tradeItem.find("a[mytype='butEdit']");
			butEdit.attr('itemId',itemId);
			butEdit.attr("href","javascript:my.ui.trade.startTradeEdit('"+itemId+"','"+code+"','"+trade.id+"');");
			//右键取消编辑
			butEdit[0].oncontextmenu = function(){
				if(my.status.tradeEditSaving){
					alert("正在保存你上一次的修改，请稍等.");
					return;
				}
				var _self = $(this);
				if(_self.attr('editing') != 'true') return;
				
				var parentItem = _self.parent("li[mytype='tradeItem']");
				my.ui.trade.cancelTradeEdit(_self.attr("itemId"), parentItem.attr("stock"), parentItem.attr("tradeid"));
				_self.find("img").attr("src","privyimg/bg49.gif");
				_self.attr('editing','false');
			}
			ul.append(tradeItem);
		}
		content.attr('created', 'true');
		
	}
	content.slideToggle("fast");
}

//开始加载交易数据
my.ui.trade.loadTrade = function(){
	page.data.loadAllTrade(my.ui.trade.loadTradeFinish);
}

//载入完成后刷新
my.ui.trade.loadTradeFinish = function(){
	var panelall = $("#page6_alltrade");
	var panelsingle = $("#page6_singletrade");
	var tradeList = panelall.find("ul[mytype='tradeList']");
	var tradeItemModel = page.caching.cache.get("cache_alltrade_item");
	
	var stocks = my.data.stock.getAllStocks();
	for(var i=0; i<stocks.length; i++){
		var stock = stocks[i];
		var code = stock.get("code");
		var trades = stock.get('trades');
		if(trades.getLength()==0){
			var stockArea = panelsingle.find("div[mytype='stockArea'][stock='"+code+"']");
			stockArea.hide();
		}
	}
	
	//全部交易记录
	var tradeAll = page.panel6.getAllTradeSorted();
	for(var j=0; j<tradeAll.length;j ++){
		var trade = tradeAll[j];
		var code = trade.code;
		var tradeItem = tradeItemModel.clone();
		tradeItem.attr("tradeid",trade.id);
		tradeItem.attr("stock",code);
		var itemId = "panelall_"+code+"_"+trade.id;
		tradeItem.attr("id",itemId);//记录id
		tradeItem.find("div[mytype='date']").text(trade.date);
		var stockname = tradeItem.find("a[mytype='stockname']");
		var stockcode = tradeItem.find("a[mytype='stockcode']");
		stockname.text("-");
		stockname.attr("href","http://quotes.money.163.com/"+code+".html");
		stockcode.text("-");
		stockcode.attr("href","http://quotes.money.163.com/"+code+".html");
		tradeItem.find("div[mytype='tradetype']").text((trade.type=='true')?'买入':'卖出');
		tradeItem.find("div[mytype='amount']").text(trade.amount);
		tradeItem.find("div[mytype='price']").text(trade.price);
		tradeItem.find("div[mytype='commission_rate']").text(trade.commission_rate);
		tradeItem.find("div[mytype='commission']").text(trade.commission);
		tradeItem.find("div[mytype='stamptax']").text(trade.stamptax);
		//编辑交易记录
		var butEdit = tradeItem.find("a[mytype='butEdit']");
		butEdit.attr('itemId',itemId);
		butEdit.attr("href","javascript:my.ui.trade.startTradeEdit('"+itemId+"','"+code+"','"+trade.id+"');");
		//右键取消编辑
		butEdit[0].oncontextmenu = function(){
			if(my.status.tradeEditSaving){
				alert("正在保存你上一次的修改，请稍等.");
				return;
			}
			var _self = $(this);
			if(_self.attr('editing') != 'true') return;
			
			var parentItem = _self.parent("li[mytype='tradeItem']");
			my.ui.trade.cancelTradeEdit(_self.attr("itemId"), parentItem.attr("stock"), parentItem.attr("tradeid"));
			_self.find("img").attr("src","privyimg/bg49.gif");
			_self.attr('editing','false');
		}
		tradeList.append(tradeItem);
	}
	//刷新股票名称
	if(page.currentPanel.id=="page6"){
		page.currentPanel.refresh();
	}
}

//取消编辑
my.ui.trade.cancelTradeEdit = function(itemId, stockCode, tradeid){
	var tradeItem = $("#"+itemId);
	var date = tradeItem.find("div[mytype='date']");
	//不修改日期
	//my.ui.editor.inputEditCancel(date);
	var tradetype = tradeItem.find("div[mytype='tradetype']");
	my.ui.editor.selectEditCancel(tradetype,['买入','卖出']);
	var amount = tradeItem.find("div[mytype='amount']");
	my.ui.editor.inputEditCancel(amount);
	var price = tradeItem.find("div[mytype='price']");
	my.ui.editor.inputEditCancel(price);
	var commission_rate = tradeItem.find("div[mytype='commission_rate']");
	my.ui.editor.inputEditCancel(commission_rate);
	var commission = tradeItem.find("div[mytype='commission']");
	my.ui.editor.inputEditCancel(commission);
	var stamptax = tradeItem.find("div[mytype='stamptax']");
	my.ui.editor.inputEditCancel(stamptax);
	
	var butEdit = tradeItem.find("a[mytype='butEdit']");
	butEdit.attr("href","javascript:my.ui.trade.startTradeEdit('"+itemId+"','"+stockCode+"','"+tradeid+"');");
	butEdit.find("img").attr("src","privyimg/bg49.gif");
	butEdit.attr('editing','false');
}

//开始编辑
my.ui.trade.startTradeEdit = function(itemId, stockCode, tradeid){
	var tradeItem = $("#"+itemId);
	//不修改日期
	//var date = tradeItem.find("div[mytype='date']");
	//my.ui.editor.inputEdit(date,'input017');
	var tradetype = tradeItem.find("div[mytype='tradetype']");
	my.ui.editor.selectEdit(tradetype,['买入','卖出'], 'select012');
	var amount = tradeItem.find("div[mytype='amount']");
	my.ui.editor.inputEdit(amount,'input016');
	var price = tradeItem.find("div[mytype='price']");
	my.ui.editor.inputEdit(price,'input016');
	var commission_rate = tradeItem.find("div[mytype='commission_rate']");
	my.ui.editor.inputEdit(commission_rate,'input016');
	var commission = tradeItem.find("div[mytype='commission']");
	my.ui.editor.inputEdit(commission,'input016');
	var stamptax = tradeItem.find("div[mytype='stamptax']");
	my.ui.editor.inputEdit(stamptax,'input016');
	
	var butEdit = tradeItem.find("a[mytype='butEdit']");
	butEdit.attr("href","javascript:my.ui.trade.finishTradeEdit('"+itemId+"','"+stockCode+"','"+tradeid+"');");
	butEdit.find("img").attr("src","privyimg/bg48.gif");
	butEdit.attr('editing','true');
}

//结束编辑
my.ui.trade.finishTradeEdit = function(itemId, stockCode, tradeid){
	if(my.status.tradeEditSaving){
		alert("正在保存你上一次的修改，请稍等.");
		return;
	}
	
	my.ui.trade.tradeModify(itemId, stockCode, tradeid);
}

//修改交易记录
my.ui.trade.tradeModify = function(itemId, stockCode, tradeid){
	var tradeItem = $("#"+itemId);
	var date = tradeItem.find("div[mytype='date']");
	var tradetype = tradeItem.find("div[mytype='tradetype']");
	var amount = tradeItem.find("div[mytype='amount']");
	var price = tradeItem.find("div[mytype='price']");
	var commission_rate = tradeItem.find("div[mytype='commission_rate']");
	var commission = tradeItem.find("div[mytype='commission']");
	var stamptax = tradeItem.find("div[mytype='stamptax']");
	
	//TODO: 这里还未处理数据验证
	var tradeInfo = new my.type.TradeInfo();
	tradeInfo.id = tradeid;
	tradeInfo.code = stockCode;
	//不修改日期
	//tradeInfo.date = my.ui.editor.getInputValue(date);
	tradeInfo.date = date.text();
	tradeInfo.type = (my.ui.editor.getSelectValue(tradetype)=="买入" ? 1 : 0);
	tradeInfo.amount = my.ui.editor.getInputValue(amount);
	tradeInfo.price = my.ui.editor.getInputValue(price);
	tradeInfo.commission_rate = my.ui.editor.getInputValue(commission_rate);
	tradeInfo.commission = my.ui.editor.getInputValue(commission);
	tradeInfo.stamptax = my.ui.editor.getInputValue(stamptax);
	
	//ajax请求
	my.data.trade.tradeModify(tradeInfo,
			function(result){
				if(result=='-1'){
					alert("修改失败，总持仓数不能少于0.");
					return;
				}
				if(result!='1'){
					alert("出现未处理的错误, 修改失败.");
					//return;
				}
				//刷新持仓
				page.data.refreshChiCang(function(){});
				//result==1
				if(page.tradeManager.visible){
					//这是弹出交易面板
					page.data.loadAllTrade(function(){
						var stock = my.common.findStock(page.tradeManager.stockCode);
						page.tradeManager.fillTradeList(stock);
						my.ui.trade.resetTradePanel();//清空旧数据
						my.ui.trade.createTradePanel();
						my.ui.trade.loadTradeFinish();
					});
				}else{
					//没有弹出交易面板而又发出修改请求，只发生在page6上，所以只重建page6
					my.ui.reCreatePage("page6");//重建页面
				}
			}
	);
}

//选中全部交易记录（同时兼容：全部交易记录，单只股票全部，弹出管理面板）
my.ui.trade.selectAllTrade = function(code, check, isPopMgr){
	var checks = null;
	var listUl = null;
	if(typeof(isPopMgr)==undefined || !isPopMgr){
		if(code==null){
			var panelall = $("#page6 > div[mytype='alltrade']");
			listUl = panelall.find("ul[mytype='tradeList']");
		}else{
			var panelsingle = $("#page6 > div[mytype='singletrade']");
			var stockArea = panelsingle.find("div[mytype='stockArea'][stock='"+code+"']");
			listUl = stockArea.find("ul[mytype='tradeList']");
		}
	}else{
		var panel = my.ui.trade.tradeMgr;
		listUl = panel.find("ul[mytype='tradeList']");
	}
	//alert("listUl:\n" + listUl.html());
	var lis = listUl.find("li[mytype='tradeItem']");
	checks = lis.find("input[mytype='chkSelect']");
	for(var i=0; i<checks.length; i++){
		checks[i].checked = check;
	}
}

//获取选中的交易记录的li(Array):（兼容同上）
my.ui.trade.getTradeLiSelected = function(code, isPopMgr){
	var array = new Array();
	var listUl = null;
	if(typeof(isPopMgr)==undefined || !isPopMgr){
		if(code==null){
			var panelall = $("#page6 > div[mytype='alltrade']");
			listUl = panelall.find("ul[mytype='tradeList']");
		}else{
			var panelsingle = $("#page6 > div[mytype='singletrade']");
			var stockArea = panelsingle.find("div[mytype='stockArea'][stock='"+code+"']");
			listUl = stockArea.find("ul[mytype='tradeList']");
		}
	}else{
		var panel = my.ui.trade.tradeMgr;
		listUl = panel.find("ul[mytype='tradeList']");
	}
	var lis = listUl.find("li[mytype='tradeItem']");
	for(var i=0; i<lis.length; i++){
		var li = $(lis[i]);
		check = li.find("input[mytype='chkSelect']");
		if(check[0].checked){
			array.push(li);
		}
	}
	return array;
}


//----------------------------------------
// my.validator.js
//----------------------------------------
// my.validator

//检查是否数字及范围：大于最小值，且不超过最大值
my.validator.checkNumber = function(number, minimum, maximum){
	if(isNaN(number)) return false;//非数字
	var num = Number(number);
	if(minimum!=null && minimum!=undefined && num<minimum){
		return false;
	}else if(maximum!=null && maximum!=undefined && num>maximum){
		return false;
	}
	return true;
}

//检查是否为2008-1-1这样的日期格式
my.validator.checkShortDate = function(date){
	var pattern = /^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/;
	return pattern.test(date);
}

//检查输入值是否为undefined或"空"或等于预设无效字符串
my.validator.checkInput = function(txt, emptyString){
	//alert(txt + "," + typeof(txt));
	if(!txt){
		return false;
	}else	if(txt.trim()==""){
		return false;
	}else	if(txt.trim()==emptyString){
		return false;
	}else{
		return true;
	}
}



