var sportteryHash = new Hash();// 存放选择的选项
var TICKET_MAX_BETUNITS = 10000;
var TICKET_MAX_BETUNITS_ERR_MSG = '单张彩票的注数不能超过'+TICKET_MAX_BETUNITS+'注';
var TICKET_MAX_BETCOST = TICKET_MAX_BETUNITS * 2;
var TICKET_MAX_MULTIPLE = 99;
var MAX_MULTIPLE = 2000;
var selectedClass = 'newchosenor';
var unselectedClass = '';
var betMoney = 2;
var MAX_BETUNITS_ERR = false;

if (maxMatchs == null) {
	alert('本玩法最大的场次数未设置！');
}

function checkTicketMaxUnits(betUnits){
	if(betUnits > TICKET_MAX_BETUNITS)
		throw TICKET_MAX_BETUNITS_ERR_MSG;
}

function getInitForm() {
	if (window.INIT_FORM == null) {
		window.INIT_FORM = $('initform');
	}
	return window.INIT_FORM;
}

function getHashKey(intTime, lineId) {
	var lineIdStr = '' + lineId;
	while (lineIdStr.length < 3) {
		lineIdStr = '0' + lineIdStr;
	}
	var strKey = intTime + lineIdStr;
	return parseInt(strKey, 10);
}

// ==========================================================================

// 更新注数
function updateBetUnits(betUnits) {
	var initForm = getInitForm();

	initForm.elements["betUnits"].value = betUnits;

	initForm.getElements('span[_name$=scheme_betUnits]').each( function(item) {
		item.innerHTML = betUnits;
	});

	updateBetCost();
}

function updateBetCost() {
	var initForm = getInitForm();

	var multiple = initForm.elements["multiple"].value;
	if (multiple == "" || !/^\d/.test(multiple)) {
		multiple = 0;
	}

	var betUnits = initForm.elements["betUnits"].value;
	if (betUnits == "" || !/^\d/.test(betUnits)) {
		betUnits = 0;
	}

	var betCost = betUnits * multiple * betMoney;
	initForm.elements["betCost"].value = betCost;

	initForm.getElements('span[_name$=scheme_betCost]').each( function(item) {
		item.innerHTML = betCost;
	});
	
	var rs = countUnitsAndTicket();
	updateTicket(rs.ticket);
}

function updateTicket(ticket){
	var initForm = getInitForm();
	initForm.getElement('span[_name="scheme_ticket"]').innerHTML = ticket;
	initForm.elements["ticketNum"].value = ticket;
}

function checkMultipleOnBlur(el){
	if(!/^\d/.test(el.value) || el.value <= 0){
		el.value = 1;
		chgMultiple(el);
	}else if(el.value > MAX_MULTIPLE){
		el.value = MAX_MULTIPLE;
		chgMultiple(el);
	}
}

function chgMultiple(obj) {
	var multiple = obj.value;
	var initForm = getInitForm();
	if (multiple <= 0)
		multiple = 1;

	if (obj.name == 'multiple') {
		initForm.getElements('input[_name="multiple"]').each( function(item) {
			item.value = multiple;
		});
	} else {
		initForm.elements['multiple'].value = multiple;
	}
	initForm.getElements('span[_name="scheme_multiple"]').each( function(item) {
		item.innerHTML = multiple;
	});
	
	updateBetCost();
	prizeforcast();
}

function chgSecretType(el) {
	var initForm = getInitForm();
	var arr = initForm.elements['secretType'];
	if (!arr.length)
		arr = [ arr ];

	var tempObj;
	for ( var i = 0, len = arr.length; i < len; i++) {
		tempObj = initForm.getElement('label[for=' + arr[i].id + ']');
		tempObj.className = (el.id == arr[i].id) ? 'rebboldchar' : '';
	}
}

// ==========================================================================
function checkSchemeForm() {
	if(MAX_BETUNITS_ERR){
		throw TICKET_MAX_BETUNITS_ERR_MSG;
	}
	
	var initForm = getInitForm();
	var betCost = initForm.elements['betCost'].value;
	var betUnits = initForm.elements['betUnits'].value;
	var checkedProtocol = $('betzc_protocol').checked;
	// 检查投注场次是否为空
	var items = sportteryHash.getKeys().length;
	if (items <= 0) {
		throw "请选择投注场次";
	}
	// 检查过关方式是否选中
	var passTypeEl = initForm.getElement('input[name=passType][type=radio][checked]');
	if (null == passTypeEl) {
		throw "请选择过关方式";
	}
	// 检查倍数是否大于0小于100
	var multiple = initForm.elements['multiple'].value;
	// 检查倍数是否为数字
	if (!/^\d+$/.test(multiple)) {
		throw "倍数必须为数字！";
	}
	if (multiple > MAX_MULTIPLE || multiple <= 0) {
		throw ("倍投数数值在1-" + MAX_MULTIPLE + "之间");
	}
	// 检查是否同意协议
	if (!checkedProtocol) {
		throw "您必须同意盈彩网代购协议才能正常发起";
	}
	if (betUnits <= 0) {
		throw "投注注数必须大于0";
	}
	if (betCost <= 0) {
		throw "投注金额必须大于0";
	}
}

function getConfirmMsg() {
	var temp = '';
	temp += '彩种平台：竞彩足彩\r\n';
	var schemeType = "过关投注";
	var betCost = getInitForm().elements['betCost'].value;
	if (isSinglePass()) {
		schemeType = "单关投注";
	}
	temp += '方案类型：' + schemeType + '\r\n';
	temp += '方案金额：' + betCost + '元\r\n\r\n';

	temp += '本次提交将扣除您' + betCost + "元。您是否确认提交?";
	return temp;
}

function prizeForecast() {
	var initForm = getInitForm();
	
	// 检查投注场次是否为空
	var items = sportteryHash.getKeys().length;
	if (items <= 0) {
		alert("请选择投注场次");
		return ;
	}
	// 检查过关方式是否选中
	var passTypeEl = initForm.getElement('input[name=passType][type=radio][checked]');
	if (null == passTypeEl) {
		alert("请选择过关方式");
		return ;
	}
	// 检查倍数是否大于0小于100
	var multiple = initForm.elements['multiple'].value;
	// 检查倍数是否为数字
	if (!/^\d+$/.test(multiple)) {
		alert("倍数必须为数字");
		return ;
	}
	
	var actionUrl = initForm.action;
	var target = initForm.target;
	initForm.action = actionUrl.replace(/![a-zA-Z]+./ig, '!prizeForecast4Init.');
	initForm.target = '_blank';
	initForm.submit();
	initForm.action = actionUrl;
	initForm.target = target;
}

function submitForm() {
	try {
		checkSchemeForm();
	} catch (e) {
		if (typeof e == 'string')
			alert(e);
		else
			alert(e.message);
		return;
	}
	var submitDiv = document.getElementById('submitDiv');
	var waitingDiv = document.getElementById('waitingDiv');
	if (confirm(getConfirmMsg())) {
		var fn = function() {
			var initForm = getInitForm();
			initForm.set('send', {
				method :'post',
				onRequest : function(instance) {
					submitDiv.style.display = 'none';
					waitingDiv.style.display = '';
				},
				onSuccess : function(responseText, responseXML) {
					if (isJsonString(responseText)) {
						var jsonObj = JSON.decode(responseText);
						if (jsonObj.msg) {
							if (jsonObj.msg.indexOf('充值') != -1) {
								if (window.confirm(jsonObj.msg)) {
									window.open('http://www.betzc.com/member/finance/pay!payPer.action');
								}
							}else if(jsonObj.msg == '根据竞彩官方销售时间限制，周一至周五销售时间为：早上9:00至晚上11:00，周六、日销售时间为：早上9:00至第二天早上1:00。'){
								showSaleTimeLimitMsg(jsonObj.msg);
							}else if(jsonObj.msg == '您投注的方案票数超过我们的截止时间前的出票数量，请减少票数或选择普通过关投注，不便之处请谅解。'){
								showCannotPrintMsg(jsonObj.msg);
							} else {
								window.alert(jsonObj.msg);
							}
						} else {
							window.alert(responseText);
						}
					} else {
						$('container').innerHTML = responseText;
						window.location.hash = "#A0";
					}
				},
				onFailure : function(instance) {
					alert('网络故障，更新失败！');
				},
				onComplete:function(){
					waitingDiv.style.display = 'none';
					submitDiv.style.display = '';
				}
			}).send();
		};
		if (typeof $S == 'object') {
			$S.auth( {
				id :'initForm',
				cover :true,
				skin :'chinaway',
				fn :fn
			});
		} else {
			fn();
		}
	}
}
// ==========================================================================
// 点击选项的处理函数
function clickItem(intTime, lineId, itemIndex, event) {
	var str = intTime + '_' + lineId;

	var tdEl = document.getElementById('td_' + str + '_' + itemIndex);
	var chkEl = document.getElementById('chk_' + str + '_' + itemIndex);
	var checked = tdEl.className == unselectedClass;

	if (checked) {
		var key = getHashKey(intTime, lineId);
		if (!sportteryHash.has(key)){
			var maxSize = isSinglePass()?window.maxMatchs:window.multipleMaxMatchs;
			if(sportteryHash.getKeys().length >= maxSize){
				alert('最多只能选择' + maxSize + '场赛事');
				if (chkEl != null) {
					chkEl.checked = false;
				}
				return;
			}
		}
	}
	tdEl.className = checked ? selectedClass : unselectedClass;
	if (chkEl != null) {
		if (event != null) {
			var e = new Event(event);
			e.stopPropagation();
			if (e.target.id != chkEl.id)
				chkEl.checked = !chkEl.checked;
		} else {
			chkEl.checked = !chkEl.checked;
		}
	}
	handleItemChg(intTime, lineId, itemIndex, checked);
	displayOption();
	countBetUnits();
	prizeforcast();
}

function handleItemChg(intTime, lineId, itemIndex, checked) {
	var r = handleItemChgFn(intTime, lineId, itemIndex, checked);
	if (rowItemValues != null) {
		var str = intTime + '_' + lineId;
		var key = getHashKey(intTime, lineId);
		if (sportteryHash.has(key)) {
			var obj = sportteryHash.get(key);
			for ( var i = 0; i < rowItemValues.length; i++) {
				var rowVal = rowItemValues[i];
				document.getElementById('bao_' + i + '_' + str).checked = (obj.value & rowVal) == rowVal;
			}
		} else {
			for ( var i = 0; i < rowItemValues.length; i++) {
				document.getElementById('bao_' + i + '_' + str).checked = false;
			}
		}
	}
	
	var display = r != 0;
	if(!isSinglePass() && sportteryHash.getKeys().length > window.maxMatchs){
		chg2MultiplePass();
		display = true; 
	}
	
	if (display)
		displayPassType();
}

function handleItemChgFn(intTime, lineId, itemIndex, checked) {
	var key = getHashKey(intTime, lineId);
	if (sportteryHash.has(key)) {
		var obj = sportteryHash.get(key);
		var v = 1 << itemIndex;
		if (checked == true) {
			obj.value |= v;
			obj.count += 1;
			return 0;
		} else {
			obj.value ^= v;
			if (obj.value == 0) {
				removeFromHash(key);
				return -1;
			} else {
				obj.count -= 1;
				return 0;
			}
		}
	} else if (checked == true) {
		var str = intTime + '_' + lineId;
		sportteryHash.set(key, {
			intTime :intTime,
			lineId :lineId,
			home :document.getElementById('td_h_' + str).innerHTML,
			guest :document.getElementById('td_g_' + str).innerHTML,
			value :1 << itemIndex,
			count :1,
			dan :false
		});
		return 1;
	}
}

function removeFromHash(key){
	sportteryHash.erase(key);
	var danArr = [];
	var size = 0;
	var undanSize = 0;
	sportteryHash.each(function(item){
		size++;
		if(item.dan == true)
			danArr.push(item);
		else
			undanSize++;
	});
	var danSize = danArr.length;
	if(danSize > 0 && (size <= 2 || danSize > (size - 1))){
		danArr.each(function(item){
			item.dan = false;
		});
		danSize = 0;
	}
	var cannotAddDan = danSize >= window.maxMatchs || danSize >= (size-1);
	var c = (danSize > 1 && cannotAddDan)?(danSize-1):danSize;
	displayMohuShedan(c, danSize, undanSize);
}

// 清除一场的选择
function deleteLine(intTime, lineId) {
	var key = getHashKey(intTime, lineId);
	if (sportteryHash.has(key)) {
		var str = intTime + '_' + lineId;
		var obj = sportteryHash.get(key);

		var v = obj.value;
		var k = 0;
		while (v > 0) {
			var a = 1 << k;
			if ((v & a) > 0) {
				var chkEl = document.getElementById('chk_' + str + '_' + k);
				if (chkEl != null)
					chkEl.checked = false;

				document.getElementById('td_' + str + '_' + k).className = unselectedClass;
				v ^= a;
			}
			k++;
			if (k > 31)
				throw '数据异常';
		}

		for ( var i = 0; i < rowItemValues.length; i++) {
			document.getElementById('bao_' + i + '_' + str).checked = false;
		}

		removeFromHash(key);
		displayOption();
		displayPassType();
		countBetUnits();
	}
}

function deleteAllLine() {
	var keys = sportteryHash.getKeys();
	sportteryHash.each( function(obj) {
		var str = obj.intTime + '_' + obj.lineId;
		var v = obj.value;
		var k = 0;
		while (v > 0) {
			var a = 1 << k;
			if ((v & a) > 0) {
				var chkEl = document.getElementById('chk_' + str + '_' + k);
				if (chkEl != null)
					chkEl.checked = false;

				document.getElementById('td_' + str + '_' + k).className = unselectedClass;
				v ^= a;
			}
			k++;
			if (k > 31)
				throw '数据异常';
		}

		for ( var i = 0; i < rowItemValues.length; i++) {
			document.getElementById('bao_' + i + '_' + str).checked = false;
		}
	});
	sportteryHash.empty();
	displayOption();
	displayPassType();
	countBetUnits();
	prizeforcast();
}

function rowBatch(intTime, lineId, rowIndex, event) {
	var str = intTime + '_' + lineId;
	var baoEl = document.getElementById('bao_' + rowIndex + '_' + str);
	if (event != null) {
		var e = new Event(event);
		if (e.target.id != baoEl.id)
			baoEl.checked = !baoEl.checked;
	}
	var key = getHashKey(intTime, lineId);
	if (baoEl.checked && !sportteryHash.has(key)) {
		var maxSize = isSinglePass()?window.maxMatchs:window.multipleMaxMatchs;
		if (sportteryHash.getKeys().length >= maxSize) {
			alert('最多只能选择' + maxSize + '场赛事');
			baoEl.checked = !baoEl.checked;
			return;
		}
	}
	var rowVal = rowItemValues[rowIndex];
	rowSelected(intTime, lineId, rowVal, baoEl.checked);
	prizeforcast();
};

function rowSelected(intTime, lineId, rowVal, checked) {
	var str = intTime + '_' + lineId;
	var tdClassName = checked ? selectedClass : unselectedClass;
	var k = 0;
	var chgCount = 0;
	for ( var p in OptionItem) {
		if ((rowVal & (1 << k)) > 0) {
			var tdEl = document.getElementById('td_' + str + '_' + k);
			if (tdEl.className != tdClassName) {
				tdEl.className = tdClassName;
				var chkEl = document.getElementById('chk_' + str + '_' + k);
				if (chkEl != null)
					chkEl.checked = checked;
				var r = handleItemChgFn(intTime, lineId, k, checked);
				chgCount += r;
			}
		}
		k++;
	}
	displayOption();
	
	var single = isSinglePass();
	if (single) {
		displayPassType();
		countBetUnits();
	} else {
		var chg = chgCount != 0;
		if(sportteryHash.getKeys().length > window.maxMatchs){
			chg2MultiplePass();
			chg = true; 
		}
		if (chg) {
			displayPassType();
			countBetUnits();
		} else {
			countBetUnits();
		}
	}
	
	prizeforcast();
}

function getItemHtml(obj, index, canAddDan) {
	var str = obj.intTime + '_' + obj.lineId;
	var lineIdStr = document.getElementById('lineIdStr_' + str).innerHTML;
	var homeTeam = document.getElementById('td_h_' + str).innerHTML;
	var guestTeam = document.getElementById('td_g_' + str).innerHTML;

	var html = '';
	html += '<tr _intTime="'+obj.intTime+'" _lineId="'+obj.lineId+'" _group="selectedTr" class="' + ((index % 2 == 0) ? 'trw' : 'trgray') + '">';
	html += '  <td>' + lineIdStr + '</td>';
	html += '  <td>' + homeTeam + '</td>';
	html += '  <td>' + guestTeam + '</td>';

	// 让球
	var concedeEl = document.getElementById('td_c_' + str);
	if (concedeEl != null) {
		html += '  <td>' + concedeEl.innerHTML + '</td>';
	}

	html += '  <td>';
	html += '    <input type="hidden" name="matchItems[' + index + '].intTime" value="' + obj.intTime + '" />';
	html += '    <input type="hidden" name="matchItems[' + index + '].lineId" value="' + obj.lineId + '" />';
	var k = 0;
	var pos = 0;
	for ( var p in OptionItem) {
		if ((obj.value & (1 << k)) > 0) {
			var item = OptionItem[p];
			html += '<input type="checkbox" checked="checked" name="matchItems[' + index + '].options[' + pos
					+ '].value" value="' + item.value + '" onclick="clickItem(' + obj.intTime + ',' + obj.lineId + ','
					+ k + ',event);" />' + item.text;
			var awardEl = document.getElementById('award_' + str + '_' + k);
			var award = (awardEl != null) ? awardEl.innerHTML : '0.00';
			html += '<input type="hidden" _group="award" name="matchItems[' + index + '].options[' + pos + '].award" value="' + award
					+ '" />';
			pos++;
			if(pos>0 && pos%6==0){
				html += '<br/>';
			}
		}
		k++;
	}
	html += '  </td>';
	if(!isSinglePass()){
		var isDan = obj.dan == true;
		var checkStr = isDan?'checked="checked"':'';
		var disabledStr = (isDan || canAddDan)?'':'disabled="disabled"';
		html += '  <td><input '+checkStr+' '+disabledStr+' type="checkbox" _group="shedan" name="matchItems[' + index + '].shedan" value="true" onclick="clickShedan(this,' + obj.intTime + ',' + obj.lineId+');"  /></td>';
	}
	html += '  <td><a class=fontchar14 href="#" onclick="deleteLine(' + obj.intTime + ',' + obj.lineId
			+ ');return false;" >清</a></td>';
	html += '</tr>';
	return html;
}

function displayOption() {
	var colspan = 5;
	var html = '';
	html += '<table width="490" border="0" align="center" cellpadding="3" cellspacing="1"  class="tablegraybg">';
	html += '  <tbody id="option_table">';

	html += '    <tr class="trlblue">';
	html += '		<td width="50">编号</td>';
	html += '		<td>主队</td>';
	html += '		<td>客队</td>';

	var headConcedeEl = document.getElementById('head_concede');
	if (headConcedeEl != null) {
		html += ' <td width="25">让球</td>';
		colspan += 1;
	}

	var imgSrc = document.getElementById('clearAllImg').src;
	html += '		<td>投注选项<a href="#" onclick="deleteAllLine();return false;"><img src="' + imgSrc + '" /></a></td>';
	if(!isSinglePass()){
		html += '		<td width="35">设胆</td>';
		colspan += 1;
	}
	html += '		<td>&nbsp;</td>';
	html += '	  </tr>';
	
	var danSize = 0;
	sportteryHash.each( function(value, key, hash) {
		if(value.dan == true)
			danSize++;
	});

	var keys = sportteryHash.getKeys();
	keys.sort(asc);
	var size = keys.length;
	var canAddDan = size > 2 && danSize < window.maxMatchs && danSize < (size-1);
	for ( var i = 0; i < size; i++) {
		var obj = sportteryHash.get(keys[i]);
		html += getItemHtml(obj, i, canAddDan);
	}

	html += '  </tbody>';
	html += '</table>';
	document.getElementById('td_selected').innerHTML = html;
}

function isSinglePass() {
	return document.getElementById('passModeEl').value == 'SINGLE';
}

/**
 * 更新过关方式显示
 */
function displayPassType() {
	var el = document.getElementById('pass_container');
	var seletedMatchCount = sportteryHash.getKeys().length;
	var single = isSinglePass();
	var multiplePass = !single && isMultiplePass();
	var maxSize = (single || !multiplePass)?window.maxMatchs:window.multipleMaxMatchs;
	if (!single && seletedMatchCount < 2) {
		el.innerHTML = '最少选择两场以上赛事';
		return;
	} else if (seletedMatchCount == 0) {
		el.innerHTML = '&nbsp;';
		return;
	} else if (seletedMatchCount > maxSize) {
		el.innerHTML = '<font color="red">最多只能选择' + maxSize + '场赛事</font>';
		return;
	}
	
	var passTypeEl = getInitForm().getElement('input[name=passType][type=radio][checked]');
	
	var html = '';
	if (single) {// 单关
		var type = passTypeHash.get('P1');

		html += '<li><SPAN class=boldchar>' + type.text + '</SPAN><input type="radio" value="' + type.key
				+ '" name="passType" checked="checked" style="display:none" /></li>';
	} else {
		var typeArr = PassTypeUtil.getPassTypeArr(seletedMatchCount);
		if(multiplePass){// 多选过关
			var danSize = 0;
			var undanSize = 0;
			sportteryHash.each( function(value, key, hash) {
				if(value.dan == true)
					danSize++;
				else 
					undanSize++;
			});
			var danMaxHit = danSize;
			var danMinHit = getDanMinHit();
			if(danMinHit == null)
				danMinHit = danSize;
			typeArr = PassTypeUtil.getMultiplePassTypeArr(seletedMatchCount);
			for ( var i = 0, len = typeArr.length; i < len; i++) {
				var type = typeArr[i];
				var inputId = 'passType_' + type.key;
				var disabledStr;
				var colorStyle;
				if((danSize > 0 && type.matchCount == seletedMatchCount) || (type.matchCount <= danMinHit) || type.matchCount < danMaxHit || (danMinHit+undanSize<type.matchCount)){
					disabledStr = 'disabled="disabled"';
					colorStyle = 'style="color:gray"';
				}else{
					disabledStr = '';
					colorStyle = '';
				}
				html += '<li><input '+disabledStr+' type="radio" id="' + inputId + '" value="' + type.key
						+ '" name="passType" onclick="chgPassType(this);"><label for="' + inputId + '" '+colorStyle+'>' + type.text
						+ '</label></li>';
			}
		}else{// 普通过关
			typeArr = PassTypeUtil.getPassTypeArr(seletedMatchCount);
			for ( var i = 0, len = typeArr.length; i < len; i++) {
				var type = typeArr[i];
				var inputId = 'passType_' + type.key;
				html += '<li><input type="radio" id="' + inputId + '" value="' + type.key
						+ '" name="passType" onclick="chgPassType(this);"><label for="' + inputId + '">' + type.text
						+ '</label></li>';
			}
		}
	}
	el.innerHTML = html;

	if(!single && passTypeEl != null){
		passTypeEl = document.getElementById(passTypeEl.id);
		if(passTypeEl != null && passTypeEl.disabled == false)
			passTypeEl.checked = true;
	}
	
	updatePassTypeText();
}

/**
 * 切换过关方式
 * 
 * @param obj
 */
function chgPassType(obj) {
	updatePassTypeText();
	countBetUnits();
	prizeforcast();
}

function updatePassTypeText() {
	var initForm = getInitForm();
	var passTypeEl = initForm.getElement('input[name=passType][type=radio][checked]');
	var text = '';
	if (passTypeEl != null) {
		var passType = passTypeHash.get(passTypeEl.value);
		text = passType.text;
	}
	document.getElementById('passTypeText').innerHTML = text;
}

function countBetUnits() {
	var initForm = getInitForm();
	try{
		var rs = countUnitsAndTicket();
		updateBetUnits(rs.betUnits);
		
		MAX_BETUNITS_ERR = false;
		initForm.getElements('span[_name="scheme_errmsg"]').setStyle('display','none');
		initForm.getElements('span[_name="scheme_msg"]').setStyle('display','');
	}catch(e){
		MAX_BETUNITS_ERR = true;
		if(e != TICKET_MAX_BETUNITS_ERR_MSG){
			throw e;
		}else{
			initForm.getElements('span[_name="scheme_msg"]').setStyle('display','none');
			initForm.getElements('span[_name="scheme_errmsg"]').each(function(el){
				el.innerHTML = TICKET_MAX_BETUNITS_ERR_MSG;
				el.setStyle('display','');
			});
		}
		return;
	}
}

function prizeforcast() {
	// 判断过关方式有没有选
	var passTypeEl = getInitForm().getElement('input[name=passType][type=radio][checked]');
	var prizeEl = $('prizeForecast');
	if (null == passTypeEl) {
		prizeEl.innerHTML = '0~0元';
		return
	}
	// 判断投注选项是否存在
	var items = sportteryHash.getKeys().length;
	if (items <= 0) {
		prizeEl.innerHTML = '0~0元';
		return
	}
	var passType = passTypeHash.get(passTypeEl.value);
	var minPass = passType.passMatchs[0];
	var maxPass = passType.passMatchs[passType.passMatchs.length - 1];
	
	var multiplePass = isMultiplePass();
	
	// 取出所有的奖金数组
	var minArr = [];
	var maxArr = [];
	var danMinArr = [];
	var danMaxArr = [];
	var minAward;
	var maxAward;
	var tempAward = 0.0;
	$('option_table').getElements('tr[_group=selectedTr]').each( function(trItem) {
		var tempArr = [];
		trItem.getElements('input[type=hidden][_group=award]').each( function(award) {
			tempAward = award.value.toFloat() * 1;
			tempArr.push(tempAward);
		});
		tempArr.sort(asc);
		
		if(multiplePass){
			var intTime = trItem.get('_intTime').toInt();
			var lineId =  trItem.get('_lineId').toInt();
			var key = getHashKey(intTime, lineId);
			if(sportteryHash.get(key).dan == true){
				danMinArr.push(tempArr[0]);
				danMaxArr.push(tempArr[tempArr.length - 1]);
			}else{
				minArr.push(tempArr[0]);
				maxArr.push(tempArr[tempArr.length - 1]);
			}
		}else{
			minArr.push(tempArr[0]);
			maxArr.push(tempArr[tempArr.length - 1]);
		}
	});
	if (minArr.length != maxArr.length) {
		alert("数据出错，请联系客服人员");
		prizeEl.innerHTML = '0~0元';
		return;
	}
	minArr.sort(asc);
	maxArr.sort(desc);
	if (isSinglePass()) {
		minAward = minArr[0];
		maxAward = 0;
		for (var i = 0; i < minArr.length; i++) {
			maxAward += maxArr[i];
		}
	}else if(isMultiplePass()){
		var pass = minPass;
		var danSize = danMinArr.length;
		var undanSize = minArr.length;
		danMinArr.sort(asc);

		var danMinHit = getDanMinHit();
		if(danMinHit == null)
			danMinHit = danSize;
		
		minAward = 1;
		for ( var i = 0; i < danMinHit; i++) {
			minAward *= danMinArr[i];
		}
		var min_arr = [];
		for ( var i = danMinHit; i < danSize; i++) {
			min_arr.push(danMinArr[i]);
		}
		min_arr = min_arr.concat(minArr);
		min_arr.sort(asc);
		var len = pass - danMinHit;
		for(var i=0;i<len;i++){
			minAward *= min_arr[i];
		}
		minAward *= 2;

		maxAward = 0;
		var countMaxFn = function(dan){
			C3(danSize, dan, function(comb1, n1, m1) {
				var award = 1;
				var pos = 0;
				for ( var k = 0; k < n1; k++) {
					if (comb1[k] == true) {
						award *= danMaxArr[k];
						pos++;
						if (pos == m1)
							break;
					}
				}
				C3(undanSize, pass-m1, function(comb2, n2, m2) {
					var award2 = award;
					var pos2 = 0;
					for ( var k2 = 0; k2 < n2; k2++) {
						if (comb2[k2] == true) {
							award2 *= maxArr[k2];
							pos2++;
							if (pos2 == m2)
								break;
						}
					}
					award2 *= 2;
					maxAward += award2;
				});
			});
		};
		for(var dan=danMinHit;dan <= danSize;dan++){
			countMaxFn(dan);
		}
	} else {
		minAward = 1;
		for (var i = 0; i < minPass; i++) {
			minAward *= minArr[i];
		}
		minAward *= 2;
		
		maxAward = 0;
		for ( var i = 0; i < passType.passMatchs.length; i++) {
			C3(maxArr.length, passType.passMatchs[i], function(comb, n, m) {
				var award = 1;
				var pos = 0;
				for ( var k = 0; k < n; k++) {
					if (comb[k] == true) {
						award *= maxArr[k];
						pos++;
						if (pos == m)
							break;
					}
				}
				award *= 2;
				maxAward += award;
			});
		}
	}
	// 算出来的最大最小奖金开始进行计算
	var multiple = getInitForm().elements['multiple'].value;
	minAward *= multiple;
	maxAward *= multiple;
	prizeEl.innerHTML = "" + minAward.round(2) + "~" + maxAward.round(2) + "元。";
}

function chgSchemeType(el){
	if(el.value == 'NORMAL'){
		$('option_table').getElements('input[_group="shedan"]').each( function(item) {
			item.checked = false;
			item.disabled = false;
		});
		sportteryHash.each( function(value, key, hash) {
			value.dan = false;
		});
		document.getElementById('mohu_div').style.display = 'none';
		document.getElementById('mohu_span').innerHTML = '';
		
		document.getElementById('label_schemeType_NORMAL').className = 'rebboldchar';
		document.getElementById('label_schemeType_MULTIPLE').className = 'boldchar';
	}else{
		document.getElementById('label_schemeType_NORMAL').className = 'boldchar';
		document.getElementById('label_schemeType_MULTIPLE').className = 'rebboldchar';
	}
	displayPassType();
	countBetUnits();
	prizeforcast();
}

function clickShedan(el,intTime,lineId){
	var key = getHashKey(intTime, lineId);
	sportteryHash.get(key).dan = el.checked;
	if(el.checked && !isMultiplePass()){
		chg2MultiplePass();
	}
	
	var danSize = 0;
	var undanSize = 0;
	var size = 0;
	sportteryHash.each( function(value, key, hash) {
		size++;
		if(value.dan == true)
			danSize++;
		else
			undanSize++;
	});
	var cannotAddDan = danSize >= window.maxMatchs || danSize >= (size-1);
	$('option_table').getElements('input[_group="shedan"]').each( function(item) {
		if(cannotAddDan){
			if(!item.checked)
				item.disabled = true;
		}else{
			if(item.disabled)
				item.disabled = false;
		}
	});

	var c = (danSize > 1 && cannotAddDan)?(danSize-1):danSize;
	displayMohuShedan(c, danSize, undanSize);
	displayPassType();
	countBetUnits();
	prizeforcast();
}

function isMultiplePass() {
	var obj = document.getElementById('schemeType_MULTIPLE');
	return obj != null && obj.checked;
}

function chg2MultiplePass(){
	document.getElementById('schemeType_MULTIPLE').checked = true;
}

function displayMohuShedan(c, danSize, undanSize){
	if(c > 0){
		var minPass = danSize;
		var min = minPass - undanSize;
		if(min <= 0)
			min = 1;
		var html = '<select id="select_danMinHit" name="danMinHit" onchange="chgDanMinHit(this);">';
		for(var i=c;i>=min;i--){
			html += '<option value="'+i+'">至少对'+i+'场</option>';
		}
		html += '</select>';
		document.getElementById('mohu_div').style.display = '';
		document.getElementById('mohu_span').innerHTML = html;
	}else{
		document.getElementById('mohu_div').style.display = 'none';
		document.getElementById('mohu_span').innerHTML = '';
	}
}

function getDanMinHit(){
	var obj = document.getElementById('select_danMinHit');
	if(obj != null && obj.value != null){
		return obj.value.toInt();
	}
	return null;
}

function chgDanMinHit(el){
	displayPassType();
	countBetUnits();
	prizeforcast();
}

function countUnitsAndTicket(){
	var allBetUnits = 0;
	var allTicket = 0;
	var initForm = getInitForm();
	var passTypeEl = initForm.getElement('input[name=passType][type=radio][checked]');
	if (passTypeEl != null) {
		var passType = passTypeHash.get(passTypeEl.value);
		
		var multiple = initForm.elements["multiple"].value;
		if (multiple == "" || !/^\d/.test(multiple)) {
			multiple = 0;
		}else{
			multiple = multiple.toInt();
		}

		var danBets = [];
		var unDanBets = [];
		var keys = sportteryHash.getKeys();
		keys.sort(asc);
		keys.each(function(key){
			var value = sportteryHash.get(key);
			if(value.dan == true)
				danBets.push(value.count);
			else
				unDanBets.push(value.count);
		});
		var danSize = danBets.length;
		var unDanSize = unDanBets.length;
		var size = danSize + unDanSize;
		
		if(isMultiplePass()){
			if(danSize > 0){
				var needs = passType.matchCount;
				var danMinHit = getDanMinHit();
				if(danMinHit == null)
					danMinHit = danSize;
				for(var danHit=danMinHit;danHit<=danSize;danHit++){
					C3(danSize, danHit, function(comb1, n1, m1) {
						var betArr = [];
						for (var i = 0; i < comb1.length; i++) {
							if (comb1[i]) 
								betArr.push(danBets[i]);
						}
						C3(unDanSize, needs - m1, function(comb2, n2, m2) {
							var betArr2 = $A(betArr);
							for (var i = 0; i < comb2.length; i++) {
								if (comb2[i])
									betArr2.push(unDanBets[i]);
							}
							var betUnits = countSimpleUnitFn(betArr2, passType.passMatchs);
							allBetUnits += betUnits;
							var multArr = splitMultiple(betUnits,multiple);
							if(multArr != null){
								allTicket += multArr.length;
							}
						});
					});
				}
			}else{
				var allBetArr = unDanBets;
				var callback = function(comb, m, pt){
					var betArr = [];
					for (var i = 0; i < comb.length; i++) {
						if (comb[i]) {
							betArr.push(allBetArr[i]);
						}
					}
					var betUnits = countSimpleUnitFn(betArr, pt.passMatchs);
					allBetUnits += betUnits;
					var multArr = splitMultiple(betUnits,multiple);
					if(multArr != null){
						allTicket += multArr.length;
					}
				};
				var maxMatchSize = window.maxMatchs;
				splitTicket(size, passType.matchCount, maxMatchSize, callback);
			}
		}else{
			var betUnits = countSimpleUnitFn(unDanBets, passType.passMatchs);
			allBetUnits += betUnits;
			var multArr = splitMultiple(betUnits, multiple);
			if(multArr != null){
				allTicket += multArr.length;
			}
		}
	}
	
	return {
		betUnits : allBetUnits,
		ticket : allTicket
	};
}

function countSimpleUnitFn(betArr, passArr){
	var betUnits = 0;
	var fn = function(comb, m){
		var units = 1;
		var c = 0;
		for (var i = 0; i < comb.length; i++) {
			if (comb[i]) {
				units *= betArr[i];
				checkTicketMaxUnits(units);
				c++;
				if (c == m || units == 0)
					break;
			}
		}
		betUnits += units;
		checkTicketMaxUnits(betUnits);
	};
	passArr.each(function(pass){
		C3(betArr.length,pass,fn);
	});
	return betUnits;
}

function splitMultiple(betUnits,multiple){
	if (betUnits <= 0 || multiple <= 0)
		return null;
	
	var betCostPerMul = betUnits * 2;
	var ticketMaxMultiple = Math.floor(TICKET_MAX_BETCOST / betCostPerMul);
	if (ticketMaxMultiple > TICKET_MAX_MULTIPLE) {
		ticketMaxMultiple = TICKET_MAX_MULTIPLE;
	}
	var mulArr = [];
	while (multiple > ticketMaxMultiple) {
		mulArr.push(ticketMaxMultiple);
		multiple -= ticketMaxMultiple;
	}
	if (multiple > 0)
		mulArr.push(multiple);
	return mulArr;
}

function showCannotPrintMsg(msg) {
	if (J != null && J.dialog != null) {
		var getUrl = function(url) {
			var str = window.location.href;
			str = str.replace('http\:\/\/', '');
			var p = str.indexOf('\/');
			if (p > 0) {
				str = str.substr(0, p);
			}
			var fullUrl = 'http://' + str + Betzc.base;
			if (url.indexOf('\/') != 0) {
				fullUrl += '/';
			}
			fullUrl += url;
			return fullUrl;
		};
		J.dialog.get( {
			id :'cannotPrintMsg',
			title :'盈彩网',
			skin :'chinaway',
			cover :true,
			nofoot :true,
			width:440,
			height :210,
			link : getUrl('/html/cannotprint/cannotprint.html')
		});
	} else {
		alert(msg);
	}
}

function countSameFn(comb1, comb2){
	var count = 0;
	for (var i = 0; i < comb1.length; i++) {
		if (comb1[i] && comb2[i])
			count++;
	}
	return count;
};

function splitTicket(matchSize, pass, maxMatchSize, callback){
	var maxSame = pass - 1;
	var passTypeArr = PassTypeUtil.findPassTypes(pass, maxMatchSize);
	Array.sort(function(pt1,pt2){
		if (pt1.matchCount > pt2.matchCount)
			return 1;
		else if (pt1.matchCount < pt2.matchCount)
			return -1;
		return 0;
	});
	
	var checkArr = [];
	var checkFn = function(newComb){
		for ( var i = 0; i < checkArr.length; i++) {
			var comb = checkArr[i];
			var same = countSameFn(newComb, comb);
			if (same > maxSame)
				return false;
		}
		return true;
	};
	
	for (var i = passTypeArr.length - 1; i > -1; i--) {
		var pt = passTypeArr[i];
		C3(matchSize, pt.matchCount, function(comb, n, m){
			var combClone = $A(comb);
			var chk = checkFn(combClone);
			if (chk) {
				checkArr.push(combClone);
				callback(combClone, m, pt);
			}
		});
	}
}