var xh = {};
xh.number = [];				//号码列表
xh.textIdx = [];			//纯号码列表
xh.nb = [];					//已选择的号码列表
xh.tl = [];					//tradeList里的号码列表
xh.startIdx = 0;			//号码起始索引
xh.diff = true;				//单复式是否不能混合

xh.onGetTempCount = new Function();			//获取临时注数接口
xh.onNumberGroup = new Function();			//判断号码是否可以组合的接口
xh.onNumberSplit = new Function();				//拆分列表接口
xh.onNumberToString = new Function("return ''");		//获取已选择的号码字符串接口
xh.onStringToNumber = new Function("return []");		//获取
xh.onSelectBefore = new Function("return true");		//选号之前的事件
xh.onSelectAfter = new Function("return true");			//选号之后的事件
xh.onJixuan = new Function();				//机选接口
xh.onDdjixuan = new Function();				//定胆机选接口
xh.onJixuanBack = false;
xh.rule = false;

//选号初始化
xh.init = function(){
	if (xh.obj) return;

	xh.obj = fw.dom.getToObject(
		"tradeList"					//投注列表框
	);
	xh.css = ["ball_r", "ball_"];
	trade.getList = xh.getList;
	if(fw.getId("numberList"))
		xh.isyt = fw.dom.getObjTag("numberList", "input").length>30;
	fw.callEach([
		{ obj:"addToTradeListBtn", handle:xh.addToTradeList },						//添加到投注列表
		{ obj:"clearNumberListBtn", handle:xh.clearNumberList },					//清除选号区
		{ obj:"tradeList", handle:xh.selectSingle, evt:"change" },					//选择单注
		{ obj:"editSingleBtn", handle:xh.editSingle },								//修改单注
		{ obj:"removeSingleBtn", handle:xh.removeSingle },							//删除单注
		{ obj:"clearTradeListBtn", handle:xh.clearList },							//清空列表
		{ obj:"paserTradeListBtn", handle:xh.splitList },							//拆分列表
		{ obj:"jixuan1Btn", handle:xh.autoGenerate(1) },							//机选1注
		{ obj:"jixuan5Btn", handle:xh.autoGenerate(5) },							//机选5注
		{ obj:"jixuan10Btn", handle:xh.autoGenerate(10) },							//机选10注
		{ obj:"ddjixuan1Btn", handle:xh.autoGenerate(1,true) },						//定胆机选1注
		{ obj:"ddjixuan5Btn", handle:xh.autoGenerate(5,true) },						//定胆机选5注
		{ obj:"ddjixuan10Btn", handle:xh.autoGenerate(10,true) }					//定胆机选10注
	], trade.addEvent);
}

//返回修改
xh.redraw = function(){
	var from = fw.string.urlget(location.href, "from");
	if (!from||from!="trade") return;
	var inputs = fw.cookie.get("inputs");
	if (!inputs) return;
	var o = fw.json.parse(inputs);
	if (!o) return;
	if(o.isshow && fw.dom.getName('isshow'))fw.dom.getName('isshow')[o.isshow].checked = true;
	var codes = o.codes;
	if (codes=="") return;

	if(fw.getId("multiple")) trade.multiple = fw.getId("multiple").value = +o.mp;
	var ob = fw.dom.getName("rtCount");
	var tag = trade.lotid==10000 ? "-" : "*";
	if (ob[0]){
		for (var l=ob.length, i=l; i>0; i--){
			ob[l-i].value = (codes.match(new RegExp("(^|,)\\"+tag+"{"+i+"}(?=,|$)","g"))||[]).length||"";
		}
	}
	if (o.am) fw.getId("addMoney").checked = o.am==1;

	fw.callEach(codes.split("$"),function(txt){
		var nb = xh.onStringToNumber(txt);
		if (fw.getId("tradeList")){
			txt = xh.onNumberToString(nb, txt);
			xh.addToList(txt, nb);
		/*}else if (obj[0]){
			xh.nb = nb;
			yt.updateRadio();*/
		}else{
			xh.selectItems(nb);
			xh.updateTemp();
		}
	});
	if (window.hm) hm.redraw(o);
  fw.isie && window.setTimeout(trade.updateInfo, 100);
	if(typeof(plugin) != "undefined" && plugin.resizeFrame) plugin.resizeFrame(self);
}

//自动生成
xh.autoGenerate = function (count,dd){
	return function(){
		var arr = dd ? xh.onDdjixuan(count) : xh.onJixuan(count);
		if (arr){
			xh.loop = true;
			trade.isjx = true;
			for (var i=0,l=arr.length; i<l&&xh.loop; i++){
				var txt = xh.onNumberToString(arr[i]);
				xh.addToList(xh.onJixuanBack?xh.onJixuanBack(txt):txt, arr[i]);
			}
		}
	}
}

//心水搜索字符串
xh.getPartNumber = function (){
	var a = xh.nb;
	for (var i=0;i<a.length&&a[i].length==0;i++);
	if (i==a.length){
		return "";
	}
	return xh.onNumberToString().replace(/[^\|\]\d\*]+$/,"");

}

//合并事件
xh.mergeEvent = function(o){
	for (fun in o){
		if (fun.slice(0,2)=="on"){
			xh[fun] = o[fun];
		}
	}
}

//设置号码Item
xh.setNumberItem = function(arr, f){
	f = f || function(s){return s.replace(/\D/g,"")};
	fw.callEach(arr, function(row,rowIdx){
		xh.number[rowIdx] = [];
		xh.textIdx[rowIdx] = {};
		xh.nb[rowIdx] = [];
		for (var i=0,l=row.ol.length;i<l;i++){
			xh.addNumberEvent({obj:row.ol[i], rowIdx:rowIdx, text:f(row.ol[i].innerHTML||row.ol[i].value), color:row.color||"blue", selected:false},i);
		}
	});
	fw.callEach(arr, function(row,idx){if (!isNaN(row.dt)){
		for (var i=0,l=row.ol.length;i<l;i++){
			xh.number[idx][i].dt = xh.number[row.dt][i];
		}
	}});
	xh.rows = xh.nb.length;
}

//给号码加事件
xh.addNumberEvent = function (o,idx){
	xh.textIdx[o.rowIdx][o.text] = idx;
	xh.number[o.rowIdx][idx] = o;
	o.obj.onclick = function(){
		xh.onNumberClick(o);
	}
}

//单击号码
xh.onNumberClick = function (o){

	if (o.selected){
		xh.clearIt(o);

	}else if(xh.onSelectBefore(o)){
		xh.selectIt(o);
	}

	xh.onSelectAfter(o);
	xh.updateTemp();

}

//选中的样式
xh.selectIt = function (o){
	xh.nb[o.rowIdx].push(o.text);
	o.selected = true;
	o.obj.className = xh.css[1] + o.color;

	//alert(o.obj.className);
}

//未选中的样式
xh.clearIt = function (o){
	fw.array.removeText(xh.nb[o.rowIdx], o.text);
	o.selected = false;
	o.obj.className = xh.css[0];
}

//选择号码列表
xh.selectItems = function (nb){
	fw.callEach(nb, xh.selectItem);
}

//选择某行号码
xh.selectItem = function (arr, rowIdx){
	if(window.fb && window.fb.sc)fb.sc(arr, rowIdx);
	var rr = xh.textIdx[rowIdx];
	var nb = xh.number[rowIdx];
	var colIdx;
	fw.callEach(arr, function (text){
		colIdx = rr[text];
		if (isNaN(colIdx)) return;
		xh.selectIt(nb[colIdx]);
	});
}

//拆分列表
xh.splitList= function (){
	if (trade.baseCount==0) return !!alert("请选择号码后再拆分!");
	if(!xh.win){
		var curLeft = screen.availWidth/2 - 125;
		xh.win = new fw.com.ui.window({
			range : [curLeft,0,250,400],
			title : "号码拆分列表",
			mask : "on",
			display : "none"
		});
	}
	var n = xh.tl.length;
	var a = [];
	if (n>0){
		for (var i=0;i<n;i++){
			a = a.concat(xh.onNumberSplit(xh.tl[i]));
		}
	}else {
		a = xh.onNumberSplit();
	}
	fw.dom.setTop(xh.win.obj.box, 50+fw.dom.getOwner().scrollTop);
	var maxLine = 200;
	var b = a.slice(0,maxLine);
	var l = a.length;
	l>maxLine && b.push('.........................');
	xh.win.setContent('<ol><li>'+b.join('</li><li>')+'</li></ol>');
	xh.win.setStatus('<div style="margin-top:5px;">共<span class="red"><b>'+l+'</b></span>注,<span class="red"><b>'+trade.calMoney(l)+'</b></span>元</div>')
	xh.win.show();
}

//获取所有号码
xh.getAllNumber = function(){
	return fw.math.each(xh.number.length, function(i){return xh.getNumber(i)});
}

//获取单项号码
xh.getNumber = function(i){
	var r = [];
	for (r[r.length] in xh.textIdx[i]);
	return r;
}

//选择单注
xh.selectSingle = function (){
	if (!fw.getId("editSingleBtn")) return;
	var idx = xh.getIdx();
	xh.clearAllNumber();
	xh.selectItems(xh.tl[idx]);
	xh.updateTemp();
}

//清除选号区
xh.clearNumberList = function(){
	xh.clearAllNumber();
	if (xh.obj.tradeList&&xh.getIdx()>-1){
		xh.obj.tradeList.options.selectedIndex = -1;
	}
}

//清空所有的号码
xh.clearAllNumber = function(){
	for (var p in xh.number){
		xh.clearNumber(xh.number[p]);
	}
	xh.showTempCount(0);
}

//清空某行号码
xh.clearNumber = function(arr){
	fw.callEach(arr, function(o){
		if (o.selected){
			xh.clearIt(o);
		}
	});
}

//获取号码
xh.getBall = function(obj){
	return trade.getClass(obj, "li", "ball_r");
}

//获取号码类型
xh.getNumberType = function(){
	var ops = xh.obj.tradeList.options;
	var n = ops.length;
	if (n>0){
		if (/单式/.test(ops[0].text)){
			return 1;
		}else if (/复式/.test(ops[0].text)){
			return 2;
		}else {
			return 3;
		}
	}
	return 0;
}

//添加到投注列表
xh.addToTradeList = function (){
	if (xh.onGetTempCount() * trade.singlePrice>20000){
		return !!alert("您好，方案金额不能超过2万元！");
	}
	if (!xh.onNumberGroup()) return;
	var txt = xh.onNumberToString();
	var f = function(){
		xh.addToList(txt, xh.nb);
		xh.clearAllNumber();
	}
	trade.islimit ? xh.chkLimit(txt, f) : f();
}

//检查限号
xh.chkLimit = function (txt, cb){
	if (txt=="") return cb();
	var o = {lotid:trade.lotid, playid:trade.playid, expect:trade.period, code:txt.split(" ")[0]};
	var u = trade.setUrl(trade.baseUrl+"/pages/trade/inc/limitcode.php", o)
	fw.callFile(u, function (o){
		o = fw.json.parse(o);
		if (o.code==0) cb();
		else if (o.code==1) window.alert(o.msg);
		else if (o.code==2&&window.confirm(o.msg)) cb();
	});
}

//添加到列表
xh.addToList = function (txt, nb){
	var ops = xh.obj.tradeList.options;
    var dfok = false;
    //允许单复式混选
    if((trade.lotid ==28 && trade.playid == 1) || (trade.lotid ==28 && trade.playid == 100) || (trade.lotid == 5 && trade.playid == 20) || (trade.lotid == 7 || trade.playid == 1)) //大乐透,排列三,福彩3D允许复式多投
    {
        dfok = true;
    }
    if(!dfok)
    {
        if (xh.diff&&ops.length>0&&(!(/单式/.test(ops[0].text))||!(/单式/.test(txt)))){
            if (!window.confirm("将清除以前投注吗？")) return xh.loop=false;
            xh.clearList();
        }
    }
	trade.baseCount += xh.onGetTempCount(nb, txt);
	xh.tl.push(fw.object.cloneAll(nb));
	ops.add(new Option(txt,txt));
	trade.updateInfo();
}

//修改单注
xh.editSingle = function (){
	var idx = xh.getIdx();
	if (idx<0) {
		return alert("请选择要修改的单注！");
	}else if (!xh.onNumberGroup()){
		return;
	}
	var txt = xh.onNumberToString();
	var ops = xh.obj.tradeList.options;
	if (xh.diff&&ops.length>1&&!(/单式/.test(txt))){
		if (!window.confirm("将清除以前投注吗？")) return;
		xh.clearList();
		idx = 0;
	}
	var t = xh.onGetTempCount(xh.tl[idx]);
	xh.tl[idx] = fw.object.cloneAll(xh.nb);
	trade.baseCount += xh.onGetTempCount(xh.tl[idx]) - t;
	ops[idx] = new Option(txt,txt);
	xh.clearAllNumber();
	trade.updateInfo();
}

//清空列表
xh.clearList = function (){
	fw.dom.clearChild(xh.obj.tradeList);
	xh.tl = [];
	trade.baseCount = 0;
	trade.showTotalCount();
}

//获取选取的行号
xh.getIdx = function (){
	return xh.obj.tradeList.options.selectedIndex;
}

//删除单注
xh.removeSingle = function (){
	var idx = xh.getIdx();
	if (idx<0){
		alert("请选择要删除的单注！");
	}else{
		trade.baseCount -= xh.onGetTempCount(xh.tl[idx], xh.obj.tradeList.options[idx].text);
		xh.obj.tradeList.options[idx] = null;
		fw.array.remove(xh.tl, idx);
		xh.clearAllNumber();
		trade.updateInfo();
	}
}

//更新临时数据
xh.updateTemp = function (){
	if (fw.getId("tempCount")||fw.getId("tempMoney")) xh.showTempCount( xh.onGetTempCount() );
}

//显示临时注数
xh.showTempCount = function (count){
	fw.setHTML("tempCount", count);
	fw.setHTML("tempMoney", trade.singlePrice*count);
	if (!xh.obj.tradeList){
		trade.baseCount = count;
		trade.obj.caseMoney && trade.updateInfo();
	}
}

//获取号码列表
xh.getList = function (){
	var f = xh.rule || function(txt){return txt.replace(/[^\w\|\[:\],]/g,"")};
	var ops = xh.obj.tradeList.options;
	var a = [];
	for (var i=0,l=ops.length;i<l;i++){
		a[i] = f(ops[i].text);
	}
	return a.join("$");
}

//分析限号
xh.parseUn = function(){
	var obj = fw.getId("limit_codes");
	var o;
	return obj && obj.value!="" && (o=fw.json.parse(obj.value)) && o.islimit==1 ? o : false;
}

xh.setDrag=function(hander,parent){
		var mover=parent||hander;
		mover.style.position="absolute";
		hander.style.cursor="move";
		var imgs=mover.getElementsByTagName("IMG");
		for(var i=0;i<imgs.length;i++)imgs[i].onmousedown=function(){return false};
		hander.offsetX=hander.offsetY=0;
		hander.onmousedown=function(){
				var e=arguments[0]||window.event;
				for(var _pos={x:0,y:0},a=mover;a;a=a.offsetParent){_pos.x+=a.offsetLeft;_pos.y+=a.offsetTop};
				this.offsetX=e.clientX-_pos.x;
				this.offsetY=e.clientY-_pos.y;
				document.body.onselectstart=function(){return !!0};
				if(window.captureEvents)window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
				document.body.onmousemove=document.onmousemove=function(){
						var e = arguments[0] || window.event;
						var x=0,y=0;
						x=e.clientX-hander.offsetX;
						y=e.clientY-hander.offsetY;
						mover.style.left=x+"px";mover.style.top=y+"px";
						if(document.all)hander.setCapture();
						if(window.captureEvents)window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
				};
				document.body.onmouseup=document.onmouseup=function(){
						document.onmousemove=null;
						document.body.onmousemove=null;
						if(document.all)hander.releaseCapture();
						if(window.captureEvents)window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
				};
		};
};

/* 添加拖动手柄 */
xh.addDragHander=function(main){
		var hander=document.createElement("DIV");
		hander.style.cssText="position:absolute;height:20px;z-index:1000;top:0;left:0;width:90%;background:#fff;filter:alpha(opacity=1);opacity:0.1";
		return main.insertBefore(hander,main.firstChild);
}

