/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Numbers.js - v2.0
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Copyright (c) 2006, Finsoft Ltd
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/

var sNumberBetTypes = ",S,D,T,A,TX,P,Y,C,L15,L31,C1,C2,C3,C4,C5,";

var nMarketTypeID = 0;

var nNumberOfBalls = 0;
var nMaxBallsToDraw = 0;
var nMaxBallsToPick = 0;

var sLotteryMode = "STRAIGHTBETS";	//	STRAIGHTBETS | MULTIBETS
var bIsBonusBallIncluded = false;

var nNumberOfStraightBets = 0;
var nActiveStraightRow = 1;
var aStraightBets = new Array();

var nNumberOfBettingRows = 0;
var nMultiPickBallCount = 0;
var aMultiPickedBalls = new Array();

//	hide Submit! button in lottery picker
if (document.getElementById)
	document.write( '<style "type="text/css" media="all">#panellottopicker h2 input{display:none !important} #BSTprices {display:none;}</style>' );

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	setup on page.load
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_Setup() {
	//	setup automatic form submit on lottery change
	var oForm = document.getElementById("panellottopicker");
	if (oForm) {
		var oSl = oForm.elements["slng"];
		if (oSl)
			oSl.onchange = function() { this.form.submit(); };
	}
	
	//	setup mode switcher
	var oSwitch = document.getElementById("lotteryswitch");
	if (oSwitch) {
		//	find all the links
		var aA = oSwitch.getElementsByTagName("a");
		for (var j=0;j<aA.length;j++)
			//	 on link click...
			aA[j].onclick = function() {
				//	...get URL, then extract only QS
				sHref = this.href.substring(this.href.indexOf("?")+1);
				//	split QS into var=value pairs
				var aTmp, aHref = sHref.split("&");
				for (var i=0;i<aHref.length;i++) {
					//	split each pair into var and value
					aTmp = aHref[i].split("=");
					//	find mode identificator, and set mode
					if (aTmp[0].toLowerCase() == "m") {
						var sMode = aTmp[1];
						NB_SetLotteryMode(sMode);
					}
				}
				//	switch classes
				var oParent = this.parentNode.parentNode;	//	ul.id = lotteryswitch
				var oLIparent = this.parentNode;
				var aLI = oParent.getElementsByTagName("li");
				for (var i=0;i<aLI.length;i++) {
					if (aLI[i] == oLIparent) {
						aLI[i].className += " activens";
					} else {
						aLI[i].className = aLI[i].className.replace(/activens/,"");
					}
				}
				
				return false;
			};
	}

	//	setup straight bets containers
	for (var i=0;i<nNumberOfStraightBets;i++)
		aStraightBets[i] = Array();



	var oForm = document.getElementById("nslipform");
	if (!oForm) return false;
	
	//	setup onsubmit
	oForm.onsubmit = function() {
		return NB_OpenSlip(this);
	};

	//	setup line changers for straight bets
	var aLine = oForm.elements["line"], oClicker;
	if (aLine) {
		for (var i=0;i<aLine.length;i++) {
			if (document.all && !window.opera) {
				//	there is no such thing as bubble down in IE. thus:
				//	1. get a reference to radio button (which is hidden)
				aLine[i].parentNode.rb = aLine[i];
				//	2. place an onclick on the label element
				aLine[i].parentNode.onclick = function(i) {
					if (window.event) event.cancelBubble = false;
					//	clear panel
					NB_ClearPanel();
					//	dim active line
					var oTR = document.getElementById("trow" + nActiveStraightRow);
					if (oTR)
						oTR.className = oTR.className.replace(/activetr/, "");
					//	new active line index
					nActiveStraightRow = this.rb.id.substring(4);
					//	handle the case when user is moving through lines with keyboard arrows
					if (nActiveStraightRow > nNumberOfStraightBets) {
						nActiveStraightRow = 1;
						this.rb.form.elements["line"][0].checked = true;
						this.rb.form.elements["line"][0].focus();
					}
					//	made new line active
					oTR = document.getElementById("trow" + nActiveStraightRow);
					if (oTR)
						oTR.className += " activetr";
					//	update panel
					NB_UpdatePanel();
				};
			} else {
				//	in non-IE browser bubble-down exists, thus nothing should be done
				aLine[i].onclick = function(i) {
					if (window.event) event.cancelBubble = false;
					//	clear panel
					NB_ClearPanel();
					//	dim active line
					var oTR = document.getElementById("trow" + nActiveStraightRow);
					if (oTR)
						oTR.className = oTR.className.replace(/activetr/, "");
					//	new active line index
					nActiveStraightRow = this.id.substring(4);
					//	handle the case when user is moving through lines with keyboard arrows
					if (nActiveStraightRow > nNumberOfStraightBets) {
						nActiveStraightRow = 1;
						this.form.elements["line"][0].checked = true;
						this.form.elements["line"][0].focus();
					}
					//	made new line active
					oTR = document.getElementById("trow" + nActiveStraightRow);
					if (oTR)
						oTR.className += " activetr";
					//	update panel
					NB_UpdatePanel();
				};
			}
		}
	}
	
	//	setup add more lines button
	var oBtn = document.getElementById("xAddmorelines");
	if (oBtn)
		oBtn.onclick = function() {
			this.form.onsubmit = function() {return false};
			NB_AddMoreLines(this.form);
			return false;
		};

	//	setup "add to betslip" checkboxes
	var aAdd2BSChk = oForm.elements["add2slip"];
	for (i=0;i<aAdd2BSChk.length;i++) {
		aAdd2BSChk[i].onclick = function() {
			var nRow = this.id.substring(9);
			NB_Add2Slip(this, nRow);
		};
	}

	//	setup "bonus ball" radio buttons
	var aBonusBall = oForm.elements["bonusball"];
	if (aBonusBall) {
		for (i=0;i<aBonusBall.length;i++) {
			aBonusBall[i].onclick = function() {
				var nWhat = parseInt(this.value, 10);
				var oREGPrices = document.getElementById("REGprices");
				var oBSTPrices = document.getElementById("BSTprices");
				if (nWhat == 0) {
					bIsBonusBallIncluded = false;
					oREGPrices.style.display = "block";
					oBSTPrices.style.display = "none";
				} else {
					bIsBonusBallIncluded = true;
					oREGPrices.style.display = "none";
					oBSTPrices.style.display = "block";
				}
				//	re-calculate all chosen bets in multiples screen
				var oBetType;
				for (i=1;i<=nNumberOfBettingRows;i++) {
					oBetType = document.getElementById("bettype" + i);
					if (oBetType)
						NB_OnBetTypeChange(oBetType, i);
				}
			};
		}
	}

	//	setup bettype drop-downs on MULTIPLES
	var oBetType;
	for (i=1;i<=nNumberOfBettingRows;i++) {
		oBetType = document.getElementById("bettype" + i);
		if (oBetType) {
			oBetType.nRow = i;
			oBetType.onchange = function() {
				NB_OnBetTypeChange(this, this.nRow);
			};
		}
	}

}

DomLoaded.load(NB_Setup);

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	lucky dip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_LuckyDip(nPick) {
	NB_Clear();

	var s = ",", n = 0;
	while ( n < nPick ) {
		nBallNum = Math.floor(Math.random() * nNumberOfBalls+1);
		if (nBallNum > 0 && s.indexOf("," + nBallNum + ",") == -1) {
			s += nBallNum + ",";
			n++;
		}
	}
	s = s.substring(1);
	s = s.substring(0, s.length-1);

	var a = s.split(",");

	var oTD;
	for (var i=0;i<a.length;i++) {
		oTD = document.getElementById("pb" + a[i]);
		if (oTD) CB(oTD);
	}

	return false;
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	clear panel
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_ClearPanel() {
	//	clear the panel
	for (i=1;i<=nNumberOfBalls;i++) {
		oTD = document.getElementById("pb" + i);
		if (oTD) oTD.className = "nc" + i;
	}
}

function NB_Clear() {
	//	clear panel
	NB_ClearPanel();

	if (sLotteryMode == "STRAIGHTBETS") {
		var nRow = __getActiveStraightRow();
		if (!nRow) return null;
		//	clear slip
		__clearStraightSlip();
		//	clear container
		aStraightBets[nRow-1] = new Array();
	} else {	//	MULTIBETS
		//	clear slip
		__clearMultiSlip();
		//	clear container
		aMultiPickedBalls = new Array();
		nMultiPickBallCount = 0;
	}
	return false;
}


/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	update panel
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_UpdatePanel() {
	var oTD;

	if (sLotteryMode == "STRAIGHTBETS") {
		var nRow = __getActiveStraightRow();
		if (!nRow) return null;
		//	get balls
		var aTmp = aStraightBets[nRow-1];
		//	update panel
		for (i=0;i<aTmp.length;i++) {
			oTD = document.getElementById("pb" + aTmp[i]);
			if (oTD) oTD.className = "nch" + aTmp[i];
		}
	} else {	//	MULTIBETS
		var sNum;
		//	update panel
		for (i in aMultiPickedBalls) {
			if (aMultiPickedBalls[i]) {
				sNum = i.substring(1);
				oTD = document.getElementById("pb" + sNum);
				if (oTD) oTD.className = "nch" + sNum;
			}
		}//for
	}//if-else
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	add/remove the clicked ball
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function CB(oTD) {
	var sCls = oTD.className;

	var nSep = sCls.indexOf("nch");
	if (nSep == -1) {	//add
		//	check if maximum number of picked balls is reached
		if (__isMaxBallsAdded()) {
			alert(SG_MsgNumbersMaxBallsReached);
			return;
		}
		//	if not, add this ball to slip
		sCls = sCls.replace("nc", "nch");
		oTD.className += " " + sCls;
		AddBall( sCls );	//	arg = nchX
	} else {	//	remove
		oTD.className = oTD.className.substring(0, nSep);
		sCls = sCls.substring(nSep, sCls.length);
		RemoveBall( sCls );	//	arg = nchX
	}

	return false;
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	removes ball, when clicked in numbers slip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function RB(oTD) {
		sCls = oTD.className;
		nSep = sCls.indexOf("nch");
	
		if (nSep == -1) return;
	
		sCls = sCls.substring(nSep, sCls.length);
		nNum = sCls.replace("nch", "");
		oTD = document.getElementById("pb" + nNum);
		if (oTD) {
			oTD.className = sCls.replace("nch", "nc");
			RemoveBall(sCls);
		}
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	adds ball to current slip, into current line
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function AddBall(sCls) {
	if (sLotteryMode == "STRAIGHTBETS") {
		AddBall2Straight(sCls);
	} else {	//	MULTIBETS
		AddBall2Multi(sCls);
	}
}

//	add ball to straight slip
function AddBall2Straight(sCls) {
	var nRow = __getActiveStraightRow();
	if (!nRow) return null;

	var nBall = sCls.substring(3);
	var aTmp = aStraightBets[nRow-1];
	aTmp[aTmp.length] = nBall;
	aTmp.sort( __numsort );
	aStraightBets[nRow-1] = aTmp;
	__updateStraightSlip(aTmp);
}

//	add ball to multi slip
function AddBall2Multi(sCls) {
	var num = sCls.substring(3);

	//	 add the ball into container
	nMultiPickBallCount++;
	aMultiPickedBalls["b" + num] = nMultiPickBallCount;

	//	add the ball into slip
	for (var i=nMultiPickBallCount;i<=nNumberOfBettingRows;i++) {
		aTD = document.getElementById("mb" + i + "_" + nMultiPickBallCount);
		if (aTD) {
			aTD.innerHTML = num;
			aTD.className += " nc " + sCls;
		}
	}

	//	update bet type offer
	for (var i=nMultiPickBallCount;i<=nNumberOfBettingRows;i++) {
		var oSl = document.getElementById("bettype" + i);
		if (oSl) {
			oForm = oSl.form;
			oSl.disabled = false;
	
			//	load bet types for current number of balls
			NB_ReloadBetTypes(oSl, nMultiPickBallCount, i);
	
			/*
			##	Removed by BF514 ##
			var oDefOpt = document.getElementById("defbt" + (i));
			if (oDefOpt)
				oDefOpt.selected = true;
			*/

			//	load bet types for current number of balls
			NB_OnBetTypeChange(oSl, i);
		}
	}
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	removes the ball from slip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function RemoveBall(sCls) {
	if (sLotteryMode == "STRAIGHTBETS") {
		RemoveBallFromStraight(sCls);
	} else {	//	MULTIBETS
		RemoveBallFromMulti(sCls);
	}
}

//	remove ball from straight bets
function RemoveBallFromStraight(sCls) {
	var nRow = __getActiveStraightRow();
	if (!nRow) return null;

	var nBall = sCls.substring(3);
	var aTmp = aStraightBets[nRow-1];
	var sTmp = "," + aTmp.join(",") + ",";
	//	remove the clicked number
	sTmp = sTmp.replace("," + nBall + ",", ",");
	//	remove the leading  and ending ,
	sTmp = sTmp.substring(1, sTmp.length-1);
	//	if there was just one number and it is removed, then previous line left us only with , => meaningless, remove it
	if (sTmp == ",") sTmp = "";
	//	return new line state into collector
	if (sTmp == "")
		aTmp = new Array();
	else
		aTmp = sTmp.split(",");
	aStraightBets[nRow-1] = aTmp;
	//	update the visual state
	__updateStraightSlip(aTmp);
}

//	remove ball from multi bets
function RemoveBallFromMulti(sCls) {
	nMultiPickBallCount--;
	var num = sCls.substring(3);
	var x = aMultiPickedBalls["b" + num];

	var aTD, oForm, nCurBallNum;

	//	deselect this ball in numbers panel
	aTD = document.getElementById("mb" + i + "_" + x);
	if (aTD) {
		aTD.innerHTML = "0";
		aTD.className = "nc0 ncoff" + x;
	}
	aMultiPickedBalls["b" + num] = null;

	//	remove the clicked ball in all affected rows
	for (var i=x;i<=nNumberOfBettingRows;i++) {

		//	re-arrange rest of the balls in current row
		for (var j=x;j<=nMultiPickBallCount+1;j++) {
			//	get the num in higher column (2_3 == 2 is row, 3 is column)
			aTD = document.getElementById("mb" + i + "_" + (j+1));
			if (!aTD) {
				//	the clicked number is the last possible number in the row (i.e. 3rd number in 3rd row == 3_3), thus 3_4 does not exists
				//	look in the next row, on same position (4_4) and then transfer that to 3_3
				aTD = document.getElementById("mb" + (i+1) + "_" + (j+1));
			}

			if (aTD) {
				nBall = aTD.innerHTML;
				sCls = aTD.className;
				aMultiPickedBalls["b" + nBall] = j;
				//	move it to current column
				aTD = document.getElementById("mb" + i + "_" + j);
				aTD.innerHTML = nBall;
				aTD.className = sCls;
				//	clear the higher column
				aTD = document.getElementById("mb" + i + "_" + (j+1));
				if (aTD) {
					aTD.innerHTML = "0";
					aTD.className = "nc0 ncoff" + (j+1);
				}
			} else {
				//	no number position in the next row too, so...
				aTD = document.getElementById("mb" + i + "_" + j);
				if (aTD) {
					aTD.innerHTML = "0";
					aTD.className = "nc0 ncoff" + j;
				}
				// ...bail out
				break;
			}
		}
	
		var oSl = document.getElementById("bettype" + i);
		if (oSl) {
			oForm = oSl.form;
			if (nMultiPickBallCount == 0) oSl.disabled = true;

			//	load bet types for current number of balls
			NB_ReloadBetTypes(oSl, nMultiPickBallCount, i);
	
			/*
			##	Removed by BF514 ##
			var oDefOpt = document.getElementById("defbt" + (i));
			if (oDefOpt)
				oDefOpt.selected = true;
			*/

			//	load bet types for current number of balls
			NB_OnBetTypeChange(oSl, i);
		}
	}
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	adds more lines for the straight bets
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_AddMoreLines(oForm) {
	//	add new containers
	var nOld = nNumberOfStraightBets;
	nNumberOfStraightBets++;
	for (var i=nOld;i<nNumberOfStraightBets;i++) {
		aStraightBets[i] = Array();
	}
	//	reveal new line
	var oTR = document.getElementById("trow" + nNumberOfStraightBets);
	oTR.style.display = "";
	//	setup onsubmit
	oForm.onsubmit = function() {
		return NB_OpenSlip(this);
	};
}


/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	set lottery mode on click
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_SetLotteryMode(sMode) {
	var oPanel = document.getElementById("panel" + sLotteryMode);
	var oNewPanel = document.getElementById("panel" + sMode);
	if (!oPanel || !oNewPanel) return;

	oPanel.style.display = "none";

	sLotteryMode = sMode;
	oNewPanel.style.display = "block";
	
	NB_ClearPanel();
	NB_UpdatePanel();
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	reloads bet type drop-down
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_ReloadBetTypes(oBetType, nSelCnt, nBetTypeDDCnt) {
	if (!oBetType || nSelCnt < 1 || nSelCnt > nNumberOfBettingRows) return;
	
	//	remove all existing options but first (which is "Please choose")
	for (var i=1;i<oBetType.options.length;i++) {
		oBetType.options[i--] = null;
	}

	var sBetTypes = BS_aBT4SN[nSelCnt], sBetType, sDefBT, nOptIndex;
	var aBetTypes = sBetTypes.split("|");
	
	var sNFolds = "|" + BS_aBTClasses["SINGLES"] + BS_aBTClasses["NFOLDS"];
	
	for (var i=0;i<aBetTypes.length;i++) {
		sBetType = aBetTypes[i];
		sDefBT = "";
		if (sBetType != "" && sNumberBetTypes.indexOf("," + sBetType + ",") != -1 && BS_aBT[sBetType]) {
			//	if numbers of balls is higher then max. number of balls to choose, allow only combinations
			if (nSelCnt > nMaxBallsToPick && sNFolds.indexOf("|" + sBetType + "|") == -1) continue;
			//	options index
			nOptIndex = oBetType.options.length;
			//	create option
			oBetType.options[nOptIndex] = new Option(BS_aBT[sBetType][0], sBetType, false, false);
			//	is this a default bet type?
			if (("|S|D|T|A|").indexOf("|" + sBetType + "|") != -1)
				oBetType.options[nOptIndex].id = 'defbt' + nBetTypeDDCnt;
		}
	}
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	when bet type has changed, then update price. if multiple, call calculator to get composite odds
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_OnBetTypeChange(oSl, nRow) {
	var nCurBallNum = nRow;
	if (nRow > nMultiPickBallCount)
		nCurBallNum = nMultiPickBallCount;

	var sBetTypeID = oSl.value;
	if (sBetTypeID == "") return;

	var oOddCell = document.getElementById("odd" + nRow);
	if (("|S|D|T|A|").indexOf("|" + sBetTypeID + "|") != -1) {
		var sPriceType = (bIsBonusBallIncluded) ? "BST" : "REG";
		if (oOddCell)
			oOddCell.innerHTML = aOdds[sPriceType][nCurBallNum-1];
	} else {
		if (oOddCell)
			NB_CalcOdds(nRow, sBetTypeID, nCurBallNum);
	}
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	calculate odds for the multiple bets
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_CalcOdds(nRow, sBetTypeID, nBallCount) {
	var sAction = "CalcOdds.asp";
	var sURL = sAction + "?mkt=" + nMarketTypeID + "&bt=" + sBetTypeID + "&bb=" + bIsBonusBallIncluded + "&bc=" + nBallCount + "&mbc=" + nMaxBallsToPick + "&r=" + nRow;
	NB_oCalcFrame.Load( sURL );
}

function UpdateCompositePrice(nCompositeOdd, nRow) {
	var oOddCell = document.getElementById("odd" + nRow);
	if (oOddCell)
		oOddCell.innerHTML = nCompositeOdd;
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	internal functions
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/

//	numerical sort
function __numsort(a,b) {
	return a-b;
}

//	get active (current) straight row
function __getActiveStraightRow() {
	return nActiveStraightRow;
}

//	is maximum of balls already reached?
function __isMaxBallsAdded() {
	if (sLotteryMode == "STRAIGHTBETS") {
		var nRow = __getActiveStraightRow();
		if (!nRow) return null;

		if (aStraightBets[nRow-1].length < nMaxBallsToPick)
			return false;
	} else {
		if (nMultiPickBallCount < nNumberOfBettingRows)
			return false;
	}
	return true;
}

//	update straight bets slip
function __updateStraightSlip(aTmp) {
	var nRow = __getActiveStraightRow();
	if (!nRow) return null;

	__clearStraightSlip();

	var oTD ;
	for (var i=0; i<aTmp.length;i++) {
		oTD = document.getElementById("sb" + nRow + "_" + (i+1));
		if (oTD) {
			oTD.innerHTML = aTmp[i];
			oTD.className += " nc nch" + aTmp[i];
		}
	}
}

//	clear straight bets slip
function __clearStraightSlip() {
	var nRow = __getActiveStraightRow();
	if (!nRow) return null;

	//	clear visual
	var oTD ;
	for (var i=0; i<nMaxBallsToPick;i++) {
		oTD = document.getElementById("sb" + nRow + "_" + (i+1));
		if (oTD) {
			oTD.innerHTML = "&nbsp;";
			oTD.className = "nc0 ncoff" + (i+1);
		}
	}
	//	clear container
	oSelCont = document.getElementById("ssels" + nRow);
	if (oSelCont)
		oSelCont.value = "";
	//	clear add2slip checkbox
	oAdd2Slip = document.getElementById("sadd2slip" + nRow);
	if (oAdd2Slip)
		oAdd2Slip.checked = false;
}

//	clear multi bets slip
function __clearMultiSlip() {
	//	clear slip
	for (var i=1;i<=nNumberOfBettingRows;i++) {
		for (var j=1;j<=nNumberOfBettingRows;j++) {
			oTD = document.getElementById("mb" + i + "_" + j);
			if (oTD) {
				oTD.innerHTML = "&nbsp;";
				oTD.className = "nc0 ncoff" + j;
			}
		}
	}

	//	clear the bet types
	var oForm = document.getElementById("nslipform");
	if (!oForm) return false;
	if (oForm.elements) {
		for (var i=1;i<=nNumberOfBettingRows;i++) {
			var oSl = oForm.elements["bettype" + i];
			if (oSl) {
				oSl.selectedIndex = 0;
				oSl.disabled = true;
			}
		}
	}

	//	clear container
	var oSelCont;
	for (var i=1;i<=nNumberOfBettingRows;i++) {
		oSelCont = oForm.elements["msels" + i];
		if (oSelCont)
			oSelCont.value = "";
	}

	//	clear add2slip checkbox
	var oAdd2Slip;
	for (var i=1;i<=nNumberOfBettingRows;i++) {
		oAdd2Slip = document.getElementById("madd2slip" + i);
		if (oAdd2Slip)
			oAdd2Slip.checked = false;
	}

	//	clear the shown price
	var oOddCell;
	for (var i=1;i<=nNumberOfBettingRows;i++) {
		oOddCell = document.getElementById("odd" + i);
		if (oOddCell)
			oOddCell.innerHTML = "&nbsp;";
	}
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	check that there are balls so that it can be added into slip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_Add2Slip(oChk, nRow) {
	var oForm = oChk.form;
	
	if (!oChk.checked) return;

	//	STRAIGHT BETS
	if (sLotteryMode == "STRAIGHTBETS") {
		if (aStraightBets[nRow-1].length == 0) {
			alert(NB_MsgAddBallsBeforeMarking4Add);
			oChk.checked = false;
			return false;
		}
	//	MULTIBETS
	} else {
		if (nMultiPickBallCount < 1) {
			alert(NB_MsgAddBallsBeforeMarking4Add4Multi);
			oChk.checked = false;
			return false;
		}
		var oBetType = document.getElementById("bettype" + nRow);
		if (oBetType.value == "") {
			alert(NB_MsgChooseBetTypeBeforeMarking4Multi);
			oChk.checked = false;
			return false;
		}
	}

	return;
}

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	add selected bets to slip - opens popup with slip
	## this is form.onsubmit()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
function NB_OpenSlip(oForm) {
	var bAtLeastOne = false;
	//	check if at least one bet is selected to be added
	var aAdd2BSChk = oForm.elements["add2slip"];
	for (var i=0;i<aAdd2BSChk.length;i++) {
		if (bAtLeastOne = aAdd2BSChk[i].checked)
			break;
	}

	if (!bAtLeastOne) {
		alert(NB_MsgNoBallsPicked);
		return false;
	}

	//	check if at least one market is checked
	if (bAtLeastOne) {
		bAtLeastOne = false;
		var aChk = oForm.elements["draw"];
		if (aChk.length) {
			for (i=0;i<aChk.length;i++) {
				if (bAtLeastOne = aChk[i].checked)
					break;
			}
		} else {
			bAtLeastOne = aChk.checked;
		}
	}

	if (!bAtLeastOne) {
		alert(NB_MsgNoDrawsPicked);
		return false;
	}

	//	save the list of numbers into hidden fields
	var oSelCont = null;
	var oAdd2Slip = null;
	//	STRAIGHT BETS
	//	go through all rows
	for (i=1;i<=nNumberOfStraightBets;i++) {
		//	if there are balls added to it
		if (aStraightBets[i-1].length != 0) {
			oSelCont = oForm.elements["ssels" + i];
			oAdd2Slip = document.getElementById("sadd2slip" + i);
			//	and it is checked to be added to slip, save the number into container
			if (oSelCont && oAdd2Slip && oAdd2Slip.checked)
				oSelCont.value = aStraightBets[i-1].join(",");
		}
	}
	//	MULTIBETS
	var nNum, j, sCollector;
	//	go through all rows
	for (var i=1;i<=nNumberOfBettingRows;i++) {
		oAdd2Slip = document.getElementById("madd2slip" + i);
		oSelCont = oForm.elements["msels" + i];
		//	if the rows is checked to be added into slip
		if (oSelCont && oAdd2Slip && oAdd2Slip.checked) {
			//	collect the balls in it...
			j = 1;
			sCollector = "";
			for (sNum in aMultiPickedBalls) {
				sCollector += "," + sNum.substring(1);
				//	but only up to max number of picked balls or max max possible number in the rows itself
				j++;
				if (j > nMultiPickBallCount || j > i) break;
			}
			//	then save it in the container for that particular row
			oSelCont.value = sCollector.substring(1);
		}
	}

	return bAtLeastOne;
}

