var allBets = new Object();
var allOutcomeRisks = new Object();
var mulStake = 0.0;
var mulOdds = 0.0;
var mulOddsForUser = '';
var allCount = 0;
var isValidateMulti = true;
var enableScroll=true;
var isUserLoggedin=false;
var lastInserted=null;
var balance=0.0;
var bonusBalance=0.0;
var allExpired='true';
var noSingleStake=true;
var isMultipleValidate=true;
var multiRiskObj = null;
var multiRiskAllowed = 0.0;
var isSaveBettingNow = false;
var canPlaceBettingNow = true;
var newMultipleStake = 0.0;
var currentMultipleStake = 0.0;
var stakeBoxBgColor="#fff";
//bonus section begin
var validateMultipleValideDone = true;
var bonus = new Object();
bonus.initialized = false;
bonus.freeBet = new Object();
bonus.freeBet.isMultiBlanceEnough = true;
bonus.freeBet.isBonusFundsEnough = true;
bonus.freeBet.isUsedCorrect = true;
bonus.freeBet.isUsed = false;
bonus.freeBet.enabled = true;
bonus.freeBet.appliedIdx = 0;
//var outcomeIdForTimeoutTrick;
//var isCommandCloseBandFromAll = false;
//bonus section end

// Quick bet 
var isQuickBet = false;

//should be start, next, done
var slipStatus = 'start';

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
    return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
    return this.replace(/\s+$/,"");
}

function setLoginParameter(isLogin){
	var s = $('showNextButtonbb');
	if(isLogin=='true'){
		s.setHTML('<a href="#"  onclick="viewSummary();" class="julieBT"><span>' + nameOfNext + '</span></a>');
	}else{
		s.setHTML('<div id="notLogginError">'+notLogginError+'</div>');
	}
	isUserLoggedin=isLogin;
}


function setBonusBalance(fdBalance){
	bonusBalance = fdBalance;
	showPromoOffer('fdInit');
	//alert('bonusBalance:' + bonusBalance);
	setTimeout(showInitFDBonusOffer,1000);
}
function setInitBalance(initBalance){
	balance = initBalance;
}

function saveCookie(keyToSet, valToSet){
	var setting = "value you add is : " + valToSet;
	Cookie.set(keyToSet, setting);
}

function readCookie(keyToRead){
    var setting = Cookie.get(keyToRead);

}
function deleteDivA(bandId){

	$(bandId).remove();
}
function closeBand (bandId, outcomeid){
	inputBand=$("inputBand" + outcomeid );
	inputBand.remove();
    var band = $(bandId);
    if (window.ie||window.gecko){
    	band.remove();
    }else{
        band.empty() ;
        band.setStyles('height: 1px;');
        band.setProperty('id','deleted');
    }



    allBets[outcomeid].bandTips.hide();
    allBets[outcomeid]=null;
    delete(allBets[outcomeid]);
    //allOutcomeRisks[outcomeid]=null;
    //delete(allOutcomeRisks[outcomeid]);
    allCount = allCount - 1;
    if(allCount <= 0){
    	showemptyInfoDiv();
    }
    if (allCount < 2){
    	$('multiDiv').style.display="none";
    }
    //multiRiskObj.removeBet(outcomeid);

    var countMultiple = 0;
    for(i in allBets){
    	if(false ==allBets[i].includeAsMulti){
    		countMultiple += 1;
    	}
    }
    if(countMultiple <= 1){
        var errMsg = $('errorMessageMulti');
	    if($defined(errMsg)){
	        errMsg.setStyle('display', 'none');
	    }
        var mCount=$('multiCount');
        var mAllStake=$('multiTotalStake');
        var mAllWin=$('multiTotelWin');
        var mInput = $('multiStake');

        mCount.setText('');
        mAllStake.setText('');
        mAllWin.setText('');
        mInput.value='0.00';
        hideMultiContent();

        mulStake=0.0;
        mulOdds=0.0;
        Cookie.remove('multibetCookie');
    }

    if(allCount < 1){
        var objShowBettingSummary = $('summaryTitle');
        objShowBettingSummary.setStyle('display','none');
    }
	validateMultipleValideDone = true;
    if(countMultiple > 1){
    	validateMultipleValide();
    }
    calSingleCount();
    calAllStakeAndWin();
    changeMultiples();
    calMultiWin();    
    removeBonusSecTimer(outcomeid);
//    bonusBandTrick(outcomeid);
//    outcomeIdForTimeoutTrick = outcomeid;
//    if(isCommandCloseBandFromAll) {
//    	bonusBandTrick();
//    } else {
//    	setTimeout(bonusBandTrick,600);
//    }
   
}

function removeBonusSecTimer(outcomeid) {
	
	 //bonus section begin
	 setTimeout(function() {
	 	if(!isBonusBettingTypeInited()||!validateMultipleValideDone){
    		removeBonusSecTimer();
    	} else {
    		if(!bonus.freeBet.isUsed) {
    			removeBonusSec(outcomeid);
   			}   			
    		if(allCount<1) {
				resetBonus();
				if (!isQuickBet) hideBonus();
    		} else {    			
    			if(bonus.freeBet.isInited) {//1:Free Bet
					initFreeBetDataStore();	
					showFreeBetOffer();
					bonus.initialized = true;    											
				}
				showFDBonusOffer();
				showSummaryFDBonusOffer();	
    		}		
    	}
    },50);
    
    //bonus section end
}
function clearAll(){
    backToBetslip();
//    isCommandCloseBandFromAll = true;
    for(i in allBets){
    	allBets[i].stake = 0.0;
        closeBand(allBets[i].bandid, allBets[i].outcomeid);
    }
//    isCommandCloseBandFromAll = false;
    allBets = null;
    allBets = new Object();
    var allWinDiv=$('singleTotelWin');
    var allStakeDiv=$('singleTotalStake');

    allWinDiv.setText('');
    allStakeDiv.setText('');

    var mInput=$('multiStake');
    var mWin=$('MulToWin');
    var mCount=$('multiCount');
    var mAllStake=$('multiTotalStake');
    var mAllWin=$('multiTotelWin');
    mInput.value='0.00';
    mWin.setText('');
    mCount.setText('');
    mAllStake.setText('');
    mAllWin.setText('');
    mulOdds=0.0;
    mulStake=0.0;

    //var mDiv=$('multiContent');
    //mDiv.setStyle('display', 'none');
    Cookie.remove('allbetsCookie');
    Cookie.remove('multibetCookie');
    
    
    
    //clear all the summary
    var singleTr=$('singleSummary');
    var multipleTr=$('MultiplesSummary');
    var summaryTr=$('AllSummary');
    singleTr.empty();
    multipleTr.setHTML('');
    summaryTr.setHTML('');

    multiRiskAllowed = 0.0;
    //back to betting slip
    setDivDisplayOnBack();
    
    //then clear all bets
    setDivDisplayOnClearAll();
    showemptyInfoDiv();   
}

function closeAndReturn(){
	//backToBetslip();
	
	var checkClearTicket = $('clearTickets');
    if(($defined(checkClearTicket)) && checkClearTicket.checked){    	
        clearAll();	
    }else{
        backToBetslip();
        resetAllStakes(true);
        //bonus section begin
		resetBonus();
    	//bonus section end
    }    
   
    reValidateRiskForBets();
    getMultipleStake(true, null);
}

function returnToBetslip(){
	backToBetslip();
	resetAllStakes(true);	
	bonus.freeBet.isUsedCorrect = true;
}


function reValidateRiskForBets(){
    for(i in allBets){
    	allBets[i].UserRiskObj.reLoadTheRisks(allBets[i].eventId, allBets[i].outcomeid);
    	allBets[i].OutcomeRiskObj.reLoadTheRisks(allBets[i].eventId, allBets[i].outcomeid);
    }
}

function calTheWin(outcomeid){
	
    var inputEl = $('input' + outcomeid);
    var resultEl = $('result' + outcomeid);
    var odds = allBets[outcomeid].odds;

    inputEl.value = inputEl.value.replace(',', '.');
    if((! isNaN(inputEl.value))&&(inputEl.value != '')){
        if(inputEl.value.indexOf(".") > -1 && ((inputEl.value.length - inputEl.value.indexOf(".")) > 3)){
            inputEl.value = allBets[outcomeid].stake;
            return;
        }

        allBets[outcomeid].init=true;
        resultEl.setText((inputEl.value * odds).toFixed(2));
        allBets[outcomeid].stake=(parseFloat(inputEl.value)).toFixed(2);
    }else{
    	if((inputEl.value != '')){
    		inputEl.value='0.00';
    	}
    	resultEl.setText('0.00');
        allBets[outcomeid].stake='0.00';
    }
    if(validateSingleInput(outcomeid, inputEl.value, allBets[outcomeid].selectioncount)){
    	calAllStakeAndWin();
    }
    calSingleCount();
}

function calSingleCount(){
    var count=0;
    var count1=0;

    for(i in allBets){
    	count1++;
    	if (allBets[i].stake > 0)
        count=count+1;
    }
    var summaryCount=$('singleCount');
    summaryCount.setText(count + ' ' + nameOfSingles);
    var mTotalNumber=$('multiNumber');
    /*if (mulStake>0){
       // count++;
    }*/
    mTotalNumber.setHTML(count1+"&nbsp;"+nameOfSelections);
}

function calSumCount(){
    var count=0;
    for(i in allBets){
    	if (allBets[i].stake > 0)
        count=count+1;
    }
    var summaryCount=$('singleCount');
    summaryCount.setText(count + ' ' + nameOfSingles);
}

function changeMultiples(){
    var mContent=$('multiContent');
    var count=0;

    if(mContent.getStyle('display')=='block'){
        mulOdds = 1.0;
        for(i in allBets){
        	if(true == allBets[i].includeAsMulti){
                continue;
            }
            var odds=allBets[i].odds;
            mulOdds=mulOdds*parseFloat(odds);
            count=count+1;
        }
        mulOdds=mulOdds.toFixed(2);
        var mulOddsDiv=$('OddsNoDelete');

        if(! isNaN(mulOdds)){
            mulOddsDiv.setText(parseFloat(mulOdds).toFixed(2));
        }
        getOddsType(mulOdds, 'OddsNoDelete', null);
        var mulCounts=$('MulCounts');
        if($defined(mulCounts)){
            mulCounts.setText(count + nameOfSelectionWith);
        }
    }
}
//bonus section begin
function resetBonus() {
	
	if(bonus.freeBet.isInited){
		if($defined(bonus.freeBet.appliedIdx) && (bonus.freeBet.appliedIdx!=0)&&(bonus.freeBet.isUsedCorrect)){
    		hideBonus();
		} else {
			//alert(!$defined(bonus.freeBet.isUsed) || !bonus.freeBet.isUsed);
			if(!$defined(bonus.freeBet.isUsed) || !bonus.freeBet.isUsed) {
				$('promoOffer').setStyle('display','block'); 
			}
		}
		bonus.freeBet.appliedIdx = 0;
    }     
}

function removeBonusSec(outcomeid){
	removeBonusStore(outcomeid);
	initBonusBettingTypeStore();	
}

function removeBonusStore(inOutcomeId) {
	if((bonus.freeBet.isInited) && $defined(bonus.freeBet.freeBetsCtrls)&&(bonus.freeBet.freeBetsCtrls!=null)){
		delete(bonus.freeBet.freeBetsCtrls[inOutcomeId]);
	}
}
function hideBonus() {
	$('promoOffer').setStyle('display','none');
    bonus.freeBet.appliedIdx = 0;
    bonus.initialized = false;    
	//var selOutcomeId = getSelectedFreeBet();
	bonus.freeBet.freeBetsCtrls = null;	
    hideFreeBetControls();
    clearBonusErrorMsg();
}
function isBonusBettingTypeInited() {
	var isInited = false;
	for(i in allBets){    	   	
    	var outcomeId = allBets[i].outcomeid;
    	var isFreeBetBettingType = allBets[outcomeId].isFreebetBettingType;	
		if(!$defined(isFreeBetBettingType)) {
			isInited = false;
    		return isInited;
		}
    }
    isInited = true;
    return isInited;
}
function showSpecialPromoOffersTimer() {
	setTimeout(function()
    {
    	if(!isBonusBettingTypeInited()){
    		showSpecialPromoOffersTimer();
    	} else {
        	if(bonus.freeBet.isInited) {//1:Free Bet			
				initFreeBetDataStore();	
				showFreeBetOffer();
				bonus.initialized = true;			
			}
			showFDBonusOffer();
			showSummaryFDBonusOffer();
    	}
    },50);
}
function showSpecialPromoOffers() {
	initBonusBettingTypeStore();
	showSpecialPromoOffersTimer();
	
	
}
function showInitFDBonusOffer() {	
	if(bonusBalance>0) {
		var lblText = generatorFDBonusSecText('initFdBonusBalanceTips');	
		$('titleBonusBalance').setHTML(lblText);
		$('titleBonusBalance').setStyle('display','block');
		var initFdBonusBalanceTips = new Tips($('initFdBonusBalanceTips'), {
			showDelay: 100,
			hideDelay: 400,
			fixed: true,
       	 	className: 'tool'
    	});
	} else {
		$('titleBonusBalance').setHTML('');
		$('titleBonusBalance').setStyle('display','none');
	}
}
function showFDBonusOffer() {
	if(bonusBalance>0) {	
		var lblText = generatorFDBonusSecText('FdBonusBalanceTips');
		$('BonusBalanceSec').setHTML(lblText);
		$('BonusBalanceSec').setStyle('display','block');
		$('BonusSec').setStyle('display','block');	
		$('promoOffer').setStyle('display','block');	
		var fdBonusBalanceTips = new Tips($('FdBonusBalanceTips'), {
			showDelay: 100,
			hideDelay: 400,
			fixed: true,
       	 	className: 'tool'
    	});
	} else {
		$('BonusBalanceSec').setHTML('');
		$('BonusBalanceSec').setStyle('display','none');
	}
}
function showSummaryFDBonusOffer() {
	if(bonusBalance>0) {	
		var amountTxt = bonus.fdBonus.currency + '&nbsp;' + numFormat2Fix(bonusBalance) ;
		var lblText = '<div id="GameHeadline"><div id="LeftText">' 
					+ lblFdBonusBalance
					+ '</div><div id="RightText">'
					+ amountTxt
					+ '</div></div>';
		$('bonusBalanceCell').setHTML(lblText);
	} else {
		$('bonusBalanceCell').setHTML('');
	}
}
function generatorFDBonusSecText(secId) {
	var lblBetType = '';	
	if(bonus.fdBonus.betType==1){//1:single
		lblBetType = lblBonusSingleBetTypeOnly;
	} else if(bonus.fdBonus.betType==2){//2:multiple
		lblBetType = lblBonusMultiBetTypeOnly;
	} else {//3:ALL
		lblBetType = lblBonusAllBetType;
	}
	var amountTxt = bonus.fdBonus.currency + '&nbsp;' + numFormat2Fix(bonusBalance) ;
	return getFdBonusBalanceSec(secId,lblFdBonusBalance,lblFdBonusBalanceTipsT,lblFdBonusBalanceTipsC,lblBetType,amountTxt,bonus.fdBonus.requiredOdds);
}
function getFdBonusBalanceSec(secId,linkTxt, title,content,lblBetType,amount,requiredOdds) {
	var retSec = '';
	var dynaContent = content;
	var imgSec = '<img src="/jsp/oddsmatrix/partnerdemo/style/InfoIcon.gif" id="Info">';
	if(secId=='initFdBonusBalanceTips') {
		linkTxt = '<strong>' + linkTxt + '</strong>';
		amount = '<strong>' + amount + '</strong>';
		imgSec = '';
	}
	dynaContent = dynaContent.replace('{1}',lblBetType);
	dynaContent = dynaContent.replace('{2}',requiredOdds);
	dynaContent = dynaContent.replace('{3}',amount);	
	retSec = '<table cellpadding=0 cellspacing=0>'
			 +'<tr><td colspan="2">' 
			 + imgSec				
			 +'</td><td colspan="2" title="' + title + '::' + dynaContent + '" id="' + secId + '">' + linkTxt + '&nbsp;' + amount
			 +'</td></tr>';
			 +'</table>';
	return retSec;
}
function showFreeBetOffer() {
	if(!bonus.initialized) {
		showFreeBetSec();
	}
    showFreeBetChkBoxes();
}
function clearFreeBetChkBoxes() {
	for(i in allBets) {
		var ctrlName = 'lblFreeBetInfo' + allBets[i].outcomeid;		
		var infoPanel = $(ctrlName);
		if($defined(infoPanel)) {
			infoPanel.setHTML('');		
			infoPanel.setStyle('display','none');
		}
	}
	if(isMultipleDefined()) {
		var ctrlName = 'lblFreeBetInfomultiStake';
		var infoPanel = $(ctrlName);
		if($defined(infoPanel)) {
			infoPanel.setHTML('');		
			infoPanel.setStyle('display','none');
		}
	}
}
function showFreeBetChkBoxes() {
	var freeBetObj = bonus.freeBet;
	clearFreeBetChkBoxes();
	for(i in freeBetObj.freeBetsCtrls) {
		var outcomeId = freeBetObj.freeBetsCtrls[i].outcomeid;
		var infoPanel = $('lblFreeBetInfo' + outcomeId);	
		infoPanel.setStyle('display','block');	
		var ctrlObj = freeBetObj.freeBetsCtrls[i];
		var freeBetSecHtml = getFreeBetDetailSec(outcomeId,ctrlObj);
		infoPanel.setHTML(freeBetSecHtml);	
	}
}
function isMultipleDefined() {
	var defined = false;
	var mContent=$('multiContent');
    if(mContent.getStyle('display')=='block'){
    	defined = true;
    } else {
    	defined = false;
    }
    return defined;
}
function newFreeBetCtrl(outcomeId) {
	var offerObj = bonus.freeBet;
	if(offerObj.freeBetsCtrls==null || !$defined(offerObj.freeBetsCtrls)) {
		offerObj.freeBetsCtrls = new Object();
	}
	
	offerObj.freeBetsCtrls[outcomeId] = new Object();
	offerObj.freeBetsCtrls[outcomeId].selected = false;
	offerObj.freeBetsCtrls[outcomeId].outcomeid = outcomeId;
	offerObj.freeBetsCtrls[outcomeId].fundsEnough = true;
	offerObj.freeBetsCtrls[outcomeId].bonusAmount = 0.00;
	offerObj.freeBetsCtrls[outcomeId].currency = offerObj.currency;				
	
}
function initBonusBettingTypeStore() {	
	for(i in allBets){    	   	
    	var outcomeId = allBets[i].outcomeid;
    	var isFreeBetBettingType = allBets[outcomeId].isFreebetBettingType;	
		if(!$defined(isFreeBetBettingType)) {
			reqServerForBettingTypeConfirm(outcomeId);	
		}
    }
}
function initFreeBetDataStore() {
	var offerObj = bonus.freeBet;
	var requiredOdds = offerObj.requiredOdds;
	
	for(i in allBets){
    	var stake = parseFloat(allBets[i].stake);
    	var odds = parseFloat(allBets[i].odds);
    	var bettingType = allBets[i].bettingtype;      	
    	var outcomeId = allBets[i].outcomeid;
    	if(bonus.freeBet.betType==1 || bonus.freeBet.betType==3) {//single only or all
    		if((odds>=requiredOdds)&&(isValidBonusBettingType(outcomeId))) {    		      					
				newFreeBetCtrl(outcomeId);			
    		} else {
    			removeBonusStore(outcomeId);
    		}
    	}
    }
    if(bonus.freeBet.betType==2 || bonus.freeBet.betType==3) {//mul only or all
    	var outcomeId = 'multiStake';  
    	if(isMultipleDefined()&&(parseFloat(mulOdds)>=requiredOdds)&&(!containedWrongBettingType())){    		
    		newFreeBetCtrl(outcomeId);
    	} else { 
    		removeBonusStore(outcomeId);
    	}
    }
}
function resetFreeBetDataStore() {
	var freeBetObj = bonus.freeBet;
	for(j in freeBetObj.freeBetsCtrls) {                 
       freeBetObj.freeBetsCtrls[j].selected = false;  
       freeBetObj.freeBetsCtrls[j].fundsEnough = true;
	   freeBetObj.freeBetsCtrls[j].bonusAmount = 0.00;
    }
}
function getFreeBetObjByOutcomeId(outcomeId) {
	var retObj;
	retObj = bonus.freeBet.freeBetsCtrls[outcomeId];
	return retObj;
}
function setFreeBetObj(outcomeId,freeBetObj) {	
	bonus.freeBet.freeBetsCtrls[outcomeId] = freeBetObj;
}
function validFreeBetInput(outcomeId) {
	if(bonus.freeBet.freeBetsCtrls!=null){
		var freeBetObj = bonus.freeBet.freeBetsCtrls[outcomeId];
		if($defined(freeBetObj)) {
			var chkCtrl = $('freeBetChk' + outcomeId);
			validFreeBet(chkCtrl,'textInput');
		}
	}
}
function valiadteFreeBetBalance(){	
	var isValid = true;
	var allStake = 0.0;
	clearBonusErrorMsg();
	hidesFundsNotEnoughMsgs();
	bonus.freeBet.isBonusFundsEnough = true;
    for(i in allBets){
    	allStake += parseFloat(allBets[i].stake);    	
    }    
    
    var realFreeBetAmount = getRealFreeBetAmount();
    allStake += parseFloat(mulStake);    
	var remainedBalance = parseFloat(parseFloat(balance).toFixed(2)) + parseFloat(parseFloat(bonusBalance).toFixed(2)) - parseFloat(parseFloat(allStake).toFixed(2));
	remainedBalance += parseFloat(parseFloat(realFreeBetAmount).toFixed(2));
	var remainedMainBalance = parseFloat(parseFloat(balance).toFixed(2)) + parseFloat(parseFloat(realFreeBetAmount).toFixed(2)) - parseFloat(parseFloat(getStakeNotInFdBonusBalance(allStake)).toFixed(2));
	//alert('remainedMainBalance:' + remainedMainBalance);
	var freeBetCtrl = $('isFreeBet');
	if((remainedBalance>=0)&&(remainedMainBalance>=0)){
		for(j in allBets){			
			if(!allBets[j].isFundsEnough) {
	    		hideErrorMSG(allBets[j].outcomeid, false);	
	    		allBets[j].isFundsEnough = true;
	    		allBets[j].isValidate = true;	 		
			}				
	    }  
//	    if(!bonus.freeBet.isMultiBlanceEnough){
//	    	hideErrorMSG(-1, true);
//			isValidateMulti = true;
//	    }
	    hideErrorMSG(-1, true);
		isValidateMulti = true;
		bonus.freeBet.isBonusFundsEnough = true;
		isValid = true;
	} else {		
		bonus.freeBet.isBonusFundsEnough = false;
		showBonusErrorMsg(1,'fundsNotEnough');		
		isValid = false;
	}   	
	return isValid;
}
function validFreeBet(freeBetCtrl,source) {
	var outcomeId = freeBetCtrl.value;
	var isValid = true;
	var freeBetObj = getFreeBetObjByOutcomeId(outcomeId);
	if(source=='chkInput') {
		resetFreeBetDataStore();			
    	if(freeBetCtrl.checked) {
       		freeBetObj.selected = true;
       		bonus.freeBet.appliedIdx = outcomeId;
       		var amount =  getRealFreeBetAmount();
       		freeBetObj.bonusAmount = amount;       		
    	} else {
       		freeBetObj.selected = false;
       		freeBetObj.bonusAmount = 0.00;       
    	}    
    	valiadteFreeBetBalance(true);
    } else if(source=='textInput'){
    	if(freeBetCtrl.checked) {
    		freeBetObj.selected = true;
    		bonus.freeBet.appliedIdx = outcomeId;
       		var amount =  getRealFreeBetAmount();
       		freeBetObj.bonusAmount = amount;
    	}
    }
    setFreeBetObj(outcomeId,freeBetObj);
    showFreeBetOffer();
    return isValid;
}
function refreshFreeBetSec() {
	if((bonus.freeBet.isInited)&&(!bonus.freeBet.isUsed)) {
		var requiredOdds = bonus.freeBet.requiredOdds;
		getOddsType(requiredOdds,'',refreshFreeBetSecCallback);
	}
}
function refreshFreeBetSecCallback(ret) {
	bonus.freeBet.userPreferredOdds = ret;
	showFreeBetSec();
}
function numFormat2Fix(inVar) {
	var retVar = parseFloat(inVar).toFixed(2);
	return retVar;
}
function getFreeBetDetailSec(outcomeId,ctrlObj) {
	var chkName = 'freeBetChk' + outcomeId;
	var useFreeBetHtml = '';
	var msgStr = '';
	var checkedStr = '';
	if(ctrlObj.selected) {
		msgStr = lblFreeBetSecSelected;
		msgStr = msgStr.replace('{1}',ctrlObj.currency);
		msgStr = msgStr.replace('{2}',numFormat2Fix(ctrlObj.bonusAmount));		
		checkedStr = ' checked ';
	} else {
		msgStr = lblFreeBetSecUnselected;
		checkedStr = '';
	}
	var validateStr = " validFreeBet(this,'chkInput'); " ;
	if(outcomeId == 'multiStake') {
		useFreeBetHtml = '<table cellpadding=0 cellspacing=0 border=0 width="80%">'
				+ '<tr><td width="10%"><input type="checkbox" ' + checkedStr + ' name="' + chkName + '" id ="' + chkName +'" onclick = "' + validateStr + '" value="' + outcomeId+ '"/> '
				+ '</td> <td>&nbsp;' + msgStr + '</td></tr><tr><td>&nbsp;</td></tr></table>';
	} else {
		useFreeBetHtml = '<table cellpadding=0 cellspacing=0 border=0 width="80%">'
				+ '<tr><td width="10%"><input type="checkbox" ' + checkedStr + ' name="' + chkName + '" id ="' + chkName +'" onclick = "' + validateStr + '" value="' + outcomeId + '"/> '
				+ '</td> <td>&nbsp;' + msgStr + '</td></tr><tr><td>&nbsp;</td></tr></table>';
	}
	//alert(useFreeBetHtml);
	return useFreeBetHtml;
}
function showFreeBetSec() {
	var lblBetType = '';
	if(bonus.freeBet.betType==1){//1:single
		lblBetType = lblBonusSingleBetTypeOnly;
	} else if(bonus.freeBet.betType==2){//2:multiple
		lblBetType = lblBonusMultiBetTypeOnly;
	} else {//3:ALL
		lblBetType = lblBonusAllBetType;
	}
	var amountTxt = bonus.freeBet.currency + '&nbsp;' + numFormat2Fix(bonus.freeBet.amount) ;
	lblText = getFreeBetSec(lblBonusFreeBet,lblBonusFreeBetTipsT,lblBonusFreeBetTipsC,lblBetType,amountTxt,bonus.freeBet.userPreferredOdds);
	$('FreeBetSec').setHTML(lblText);
	$('FreeBetSec').setStyle('display','block');
	//alert('showFreeBetSec');
	$('promoOffer').setStyle('display','block');
	$('BonusSec').setStyle('display','block');
	var freeBetTips = new Tips($('FreeBetTips'), {
		showDelay: 100,
		hideDelay: 400,
		fixed: true,
        className: 'tool'
    });
}
function getFreeBetSec(linkTxt, title,content,lblBetType,amount,requiredOdds) {
	var retSec = '';
	var dynaContent = content;
	dynaContent = dynaContent.replace('{1}',lblBetType);
	dynaContent = dynaContent.replace('{2}',requiredOdds);
	dynaContent = dynaContent.replace('{3}',amount);	
	//title = title.replace('{1}',lblBetType);
	retSec = '<table cellpadding=0 cellspacing=0>'
			 +'<tr><td colspan="2"><img src="/jsp/oddsmatrix/partnerdemo/style/InfoIcon.gif" id="Info">'				
			 +'</td><td colspan="2" title="' + title + '::' + dynaContent + '" id="FreeBetTips">' + linkTxt + '&nbsp;' + amount
			 +'</td></tr>';
			 +'</table>';
	//alert(retSec);
	return retSec;
}
function hidesFundsNotEnoughMsgs(){
	for(i in allBets){
		if(!allBets[i].isFundsEnough){
			allBets[i].isFundsEnough = true;	
			allBets[i].isValidate = true;	
			hideErrorMSG(allBets[i].outcomeid, false);				
		}	
	}  
	if(!bonus.freeBet.isMultiBlanceEnough) {
		bonus.freeBet.isMultiBlanceEnough = true;
    	hideErrorMSG(-1, true);
	}
}
function showPromoOffer(initType) {	
	var splitter = '||';
	var url = '/bonusAccess.do';
    var params = 'action=getBonusList'; 
    
    if(!bonus.freeBet.isUsed) {
    	if(!bonus.initialized) {
   			var ajaxReq=new XHR(
       			{'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
            		{
                		var resStr = response;
                		//alert(resStr);
               			if(resStr!='') {
	                		var tempArr = resStr.split(splitter);
	                		var len = tempArr.length;
	                		if(len>0) { 
	                			initPromoOfferSec();               
	                			for(var i=0;i<len;i++) {
	                				var bonusObj = getPromoOfferByStr(tempArr[i]);
	                				if(bonusObj.promoType==1) {
	                					bonus.freeBet = bonusObj;
	                				} else if(bonusObj.promoType==2){
	                					bonus.fdBonus = bonusObj;
	                				}
	                			}
	                		}	                	
                		}
                		if(initType!='fdInit') {
                			showSpecialPromoOffers();                			              			
                		}                		
           	 		}
        		}
    		);
    		ajaxReq.send(url,params);
    		ajaxReq=null;
    	} else {
    		if(initType!='fdInit') {
    			showSpecialPromoOffers();
    		}
    	}		
    }
}
function initPromoOfferSec() {
	var promoOfferCtl=$('promoOffer');	
	promoOfferCtl.setStyle('display','block');	
}
function getPromoOfferByStr(inStr){
	var retObj = new Object();
	var arrTemp = inStr.split('#');
	retObj.promoType = arrTemp[0];
	retObj.betType = arrTemp[1];	//1:single 2:multiple 3:ALL	
	if(retObj.promoType==1) {//1:Free Bet
		var reqOddses = arrTemp[3].split(',');
		retObj.amount = arrTemp[2];
		retObj.requiredOdds = parseFloat(reqOddses[0]).toFixed(2);
		retObj.userPreferredOdds = reqOddses[1];
		retObj.currency = arrTemp[4];	
    	retObj.freeBetsCtrls = new Object();
    	retObj.isInited = true;    	
	} else if(retObj.promoType==2) {//2:deposit bonus
		var reqOddses = arrTemp[2].split(',');
		retObj.requiredOdds = parseFloat(reqOddses[0]).toFixed(2);
		retObj.userPreferredOdds = reqOddses[1];
		retObj.currency = arrTemp[3];
    	retObj.isInited = true;    	
	}
	return retObj;
}
function getRealFreeBetAmount() {
	var realFreeBetAmount = 0;
	var bonusObj = bonus.freeBet;
	var freeBetAmount = bonus.freeBet.amount;
	for(i in bonusObj.freeBetsCtrls) {	
		if(bonusObj.freeBetsCtrls[i].selected) {
			var outcomeId = bonusObj.freeBetsCtrls[i].outcomeid;
			var stake = 0.00;
			if(outcomeId=='multiStake') {
				stake = parseFloat($('multiStake').value);
			} else {
				stake = parseFloat(allBets[outcomeId].stake);
			}
			if(stake<freeBetAmount) {
				realFreeBetAmount = stake;
			} else {
				realFreeBetAmount = freeBetAmount;
			}
			break;
		}
	}
	return realFreeBetAmount;	
}
function isValidBonusBettingType(outcomeId){
	return allBets[outcomeId].isFreebetBettingType;;
}
function reqServerForBettingTypeConfirm(outcomeId) {
	var url = '/bonusAccess.do';
    var params = 'action=isValidBonusBettingType&outcomeId=' + outcomeId;
   	var ajaxReq=new XHR(
       	{'method': 'post','autoCancel': 'false',async:true,onSuccess: function(response)
            {
            	var resStr = response;
            	if(resStr!='') {
	                if(resStr=='true') {
	                	isValid = true;
	                } else {
	                	isValid = false;
	                }  
	                allBets[outcomeId].isFreebetBettingType = isValid;	
            	}	              		
           	 }
        }
 	);
    ajaxReq.send(url,params);
    ajaxReq=null;
}
function containedWrongBettingType() {
	var containedWrong = false;
	for(i in allBets){			
		var isFreeBetBettingType = allBets[i].isFreebetBettingType;
		if(!$defined(isFreeBetBettingType)) {
			isFreeBetBettingType = isValidBonusBettingType(i);
			allBets[i].isFreebetBettingType = isFreeBetBettingType;			
		} 
		if(!isFreeBetBettingType) {
			containedWrong = true;
			return containedWrong;
		}
	}	
	return containedWrong;
}

function getConfirmMsgByPromoType(promoType) {
	var retMsg;
	if(promoType==1) {
		var bonusAmount = parseFloat(getRealBonusAmount()).toFixed(2);
		retMsg = FreeBetConfirmMsg + bonus.promoOffers[0].currency + bonusAmount  ;
	}
	return retMsg;
}

function clearBonusErrorMsg() {
	var errorFreeBetSecCtl=$('errorBonusSec');
	errorFreeBetSecCtl.setHTML('');
	errorFreeBetSecCtl.setStyle('display','none');	
}
function showBonusErrorMsg(promoType,errorType) {
	var errorFreeBetSecCtl=$('errorBonusSec');
	errorFreeBetSecCtl.setStyle('display','block');
	var title = BonusCannotBeDoneT;
	var msg;
	if(promoType=='1') {
		if(errorType=='multiNotAllowed') {
			msg = SingleBetAllowedOnlyC
		} else if(errorType=='singleNotAllowed') {
			msg = MultiBetAllowedOnlyC;
		} else if(errorType=='fundsNotEnough') {
			msg = InsufficientfundsC;
			title = InsufficientfundsT;
		} else if(errorType=='noMatchBonusSections') {
			msg = noMatchBonusSections;
		} else if(errorType='bettingTypeDontAllow') {
			msg = bettingTypeDontAllow;
		}
	}
    errorFreeBetSecCtl.setHTML(getErrorMessage(title, msg));
}
function validateStatke(inputId,targetCtrl){
	formatToDecimal(inputId);
}
function getSelectedFreeBet() {
	var outcomeId = 0;
	var bonusObj = bonus.freeBet;
	for(i in bonusObj.freeBetsCtrls) {	
		if(bonusObj.freeBetsCtrls[i].selected) {
			outcomeId = bonusObj.freeBetsCtrls[i].outcomeid;			
			break;
		}
	}
	return outcomeId;
}
function showBonusSummary(){
	var outcomeId = getSelectedFreeBet();
	showFreeBetSecAppliedInfo(outcomeId);
}
function hideFreeBetControls() {
	var bonusSec=$('BonusSec');
	bonusSec.setStyle('display','none');
	for(i in allBets){
    	var infoPanel = $('lblFreeBetInfo' + i);
    	if($defined(infoPanel)){
    		infoPanel.setStyle('display','none');
    	}	
    }   
    var multiInfoPanel = $('lblFreeBetInfomultiStake');
    if($defined(multiInfoPanel)){
    	multiInfoPanel.setStyle('display','none');	
    }    
}

function showFreeBetSecAppliedInfo(outcomeId) {
	hideFreeBetControls();
	var infoPanel = $('lblInfo' + outcomeId);	
	if($defined(infoPanel)) {
		infoPanel.setStyle('display','block');	
		bonus.freeBet.appliedIdx = outcomeId;
		var msg =  '<strong>' + getFreeBetAppliedInfoMsg() + '</strong>';
		infoPanel.setHTML(msg);
	}
}
function recoverFromBonusSummary(){
	var bonusSummarySec=$('BonusSummarySec');
	bonusSummarySec.setHTML('');
	bonusSummarySec.setStyle('display','none');	
	if(!bonus.freeBet.isUsed) {
		var bonusSec=$('BonusSec');
		bonusSec.setStyle('display','block');
		for(i in allBets){
    		var infoPanel = $('lblFreeBetInfo' + i);
    		if($defined(infoPanel)){
    			infoPanel.setStyle('display','block');
    		}	
    	}   
    	var multiInfoPanel = $('lblFreeBetInfomultiStake');
    	if($defined(multiInfoPanel)){
    		multiInfoPanel.setStyle('display','block');	
    	}     
	}
    var infoPanel = $('lblInfo' + bonus.freeBet.appliedIdx);	
    if($defined(infoPanel)){
    	infoPanel.setHTML('');
		infoPanel.setStyle('display','none');	   
    }
}
function getBonusTitleAfterSubmitted() {
	var retTitle = '';
	var len = bonus.promoOffers.length;
	if(len > 0) {
		for(var i=0; i<len; i++) {
			var promoType = bonus.promoOffers[i].promoType;
			if((promoType==1)&&($('isFreeBet').checked)) {//free bet
				retTitle = '<strong>' + FreeBetApplied + '</strong>';							
			}
		}
	}
	return retTitle;
}
function getBonusParams() {
	var bonusTypeParams = '&bonusStr=-1';//no bonus at default
	var splitter = ':';
	var isFreeBet = bonus.freeBet.isInited;
	if((isFreeBet)&&(bonus.freeBet.isUsedCorrect)&&($defined(bonus.freeBet.appliedIdx))&&(bonus.freeBet.appliedIdx!=0)) {//free bet
		var selOutcomeId = getSelectedFreeBet();
		if($defined(bonus.freeBet.freeBetsCtrls[selOutcomeId])) {
			var selAmt = bonus.freeBet.freeBetsCtrls[selOutcomeId].bonusAmount;
			bonusTypeParams = '&bonusStr=1' + splitter + selOutcomeId + splitter + selAmt;	
		} else {
			bonus.freeBet.isUsedCorrect = false;
		}					
	}
	return bonusTypeParams;
}
function getFreeBetAppliedInfoMsg() {
	var msg = '';
	if(bonus.freeBet.appliedIdx!=0) {
		var amount = numFormat2Fix(getRealFreeBetAmount());
		msg = FreeBetAppliedWithAmount;
		msg = msg.replace('{1}',bonus.freeBet.currency);
		msg = msg.replace('{2}',amount);	
		msg = msg ;
	}
	return msg;
}
function getBonusPrintAppliedInfoHtml(outcomeid,isConfirmSummary) {
	var sHtml = '';
	var strOutcomeId = '' + outcomeid;
	var strChoosenIdx = '' + bonus.freeBet.appliedIdx;
	if(bonus.freeBet.appliedIdx!=0&&bonus.freeBet.isUsedCorrect) {	
		var msg = getFreeBetAppliedInfoMsg();
		if(strOutcomeId==strChoosenIdx) {
			if(strOutcomeId=='multiStake') {//multibet
				if(isConfirmSummary) {
					sHtml += '<tr><td colspan="4" id="appliedInfo' + outcomeid + '"><strong>';
    				sHtml += msg;
    				sHtml += '</strong></td></tr>';
				} else {
					sHtml += '<tr><td colspan="4" class="betsInfo">';
    				sHtml += msg;
    				sHtml += '</td></tr>';
				}
			} else {//single bet
				sHtml += '<tr><td colspan="4" class="betsInfo">';
    			sHtml += msg;
    			sHtml += '</td></tr>';
			}
		} 
	}
	return sHtml;
}
//bonus section end

function formatToDecimal(inputId){
	var objInput=$('input' + inputId);
	if($defined(objInput)){
		if(objInput.value==''){
			objInput.value='0.00';
		}
		if(! isNaN(objInput.value)){
	        var oriValue=parseFloat(objInput.value);
	        objInput.value=oriValue.toFixed(2);
	    }
	    //calTheWin(inputId);
	}else{
		objInput=$(inputId);
		if($defined(objInput)){
			if(objInput.value==''){
                objInput.value='0.00';
            }
			if(! isNaN(objInput.value)){
	            var oriValue=parseFloat(objInput.value);
	            objInput.value=oriValue.toFixed(2);
	        }
		}
	}
}

function calMultiWin(){
	if(allCount <= 1){
		return;
	}

	if( ! isMultipleValidate){
		return;
	}
    var mInput=$('multiStake');
    var mWin=$('MulToWin');
    var mTotalNumber=$('multiNumber');
    var mCount=$('multiCount');
    if((! isNaN(mInput.value))&&(mInput.value != '')){
        //mInput.value = mInput.value.toFixed(2);        
        mulStake=parseFloat(mInput.value).toFixed(2);
       
        var win= (parseFloat(mulOdds) * parseFloat(mulStake)).toFixed(2);
        //win=win.toFixed(2);
        mWin.setText(win);

        var mAllStake=$('multiTotalStake');
        var mAllWin=$('multiTotelWin');
        if (mulStake<=0){
        	mCount.setText('0 ' + nameOfMultiple);
        }else{
        	mCount.setText('1 ' + nameOfMultiple);
        }
        mAllStake.setText(mulStake);
        mAllWin.setText(win);
    }else{
        if((mInput.value != '')){
            mInput.value = '0.00';
        }
        mulStake=0.0;
        var mAllStake=$('multiTotalStake');
        var mAllWin=$('multiTotelWin');
        mAllStake.setText('0.00');
        mAllWin.setText('0.00');
        mWin.setText('0.00');
    }
    //if(validateMultiInput(mInput)){
        calAllStakeAndWin();
        //saveMultiBets();
    //}
    calSingleCount();
}

function calAllStakeAndWin(){
    var allWin = 0.0;
    var allStake = 0.0;
    for(i in allBets){
    	if(true == allBets[i].includeAsMulti){
    		continue;
    	}
        var stake=allBets[i].stake;
        allStake += parseFloat(stake);
        var odds=parseFloat(allBets[i].odds);
        var win=(parseFloat(stake)*parseFloat(odds)).toFixed(2);
        allWin+=parseFloat(win);
    }
    allStake = allStake.toFixed(2);
    allWin=allWin.toFixed(2);
    var allWinDiv=$('singleTotelWin');
    var allStakeDiv=$('singleTotalStake');

    allWinDiv.setText(allWin);
    allStakeDiv.setText(allStake);
    saveBetsToCookie();
    saveMultiBets();
}

function validateBeforSubmit(){
	//this should call the server side to
	var singleInvalidate = true;
	for(i in allBets){		
		singleInvalidate = singleInvalidate & allBets[i].isValidate;
//		alert('validateBeforSubmit:' + allBets[i].isValidate);
	}
	if(mulStake < 0.001){
		return singleInvalidate;
	}else{
	   return singleInvalidate && isValidateMulti;
	}
}

function setObjectProperty(id, property, value){
	var objInput = $(id);
	if($defined(objInput)){
		objInput.setProperty(property, value);
	}
}

function showPrintoutSummary(){
	var printFrame= $('printoutDiv');

    var sHtml = '<div id="printMain"><table width="100%"><tr><td colspan="2" align="left" class="betsInfo">' + nameOfSelections + '</td>'
        + '<td colspan="2" align="right" class="betsInfo">' + nameOfOdds + '</td></tr>';
    var count=0;
    var totalSingleStake = 0.0;
    var totalSingleWin = 0.0;
    for(i in allBets){
    	if(allBets[i].stake<=0) {
    		continue;
    	}
        count += 1;
        sHtml += '<tr><td colspan="3" class="betsInfo">';
        sHtml += allBets[i].title;
        sHtml += '</td><td></td></tr>';

        sHtml += '<tr><td colspan="3" class="betsInfo">';
        sHtml += nameOfBettingType + ' : ';
        sHtml += allBets[i].bettingtype;
        sHtml += '</td><td></td></tr>';
        
		var singOutcomeid = i
		sHtml += getBonusPrintAppliedInfoHtml(singOutcomeid,false);
		i=singOutcomeid;
		
        sHtml += '<tr><td colspan="3" class="betsInfo">' + nameOfPick;
        sHtml += allBets[i].participant;
        sHtml += '</td>';
        sHtml += '<td align="right" class="betsInfo">';
        sHtml += parseFloat(allBets[i].odds).toFixed(2);
        sHtml += '</td></tr>';

        sHtml += '<tr><td width="25%" class="betsInfo">' + nameOfStake + '</td><td width="25%" class="betsInfo">';
        sHtml += allBets[i].stake;
        sHtml += '</td><td width="25%" class="betsInfo">' + nameOfToWin + '</td><td width="25%" align="right" class="betsToWin">';
        sHtml += ((allBets[i].odds * allBets[i].stake)).toFixed(2);
        sHtml += '</td></tr><tr><td colspan="4"><hr class="splitBetHR"></td></tr>';

        totalSingleStake += parseFloat(allBets[i].stake).toFixed(2);
        totalSingleWin += (parseFloat(allBets[i].stake) * parseFloat(allBets[i].odds)).toFixed(2);
    }
    //singleTr.setHTML(sHtml);

    //singleTr.innerHtml=sHtml;
    //var multipleTr=$('MultiplesSummary');
    
    if(allCount > 1){
    	    sHtml += '<br><div><table width="100%"><tr><td colspan="2" align="left" class="betsInfo">' + nameOfMultiples + '</td>'
        + '<td colspan="2" align="right" class="betsInfo">' + nameOfOdds + '</td></tr><tr><td colspan="2" align="left" class="betsInfo">'
        + count + ' ' + nameOfSelections + '</td>'
        + '<td colspan="2" align="right" class="betsInfo">' + parseFloat(mulOdds).toFixed(2) + '</td></tr>'
        + getBonusPrintAppliedInfoHtml('multiStake',false)
        + '<tr><td width="25%" class="betsInfo">' + nameOfStake + '</td><td width="25%" class="betsInfo">' + parseFloat(mulStake).toFixed(2)
        + '</td><td width="25%" class="betsInfo">' + nameOfToWin + '</td><td width="25%" align="right" class="betsToWin">'
        + (parseFloat(mulOdds) * parseFloat(mulStake)).toFixed(2) + '</td>'
        + '</tr><tr><td colspan="4"><hr class="splitBetHR"></td></tr></table></div>';
    }

    //multipleTr.setHTML(sHtml);
	
    //var summaryTr=$('AllSummary');
    
    //alert('allCount : ' + allCount);
    if(allCount > 1){
    	sHtml += '<div><table width="100%"><tr><td width="50%" align="left" class="betsInfo">' + nameOfSummary + '</td>'
        + '<td width="25%" class="betsInfo">' + parseFloat(TotalStake).toFixed(2) + '</td><td width="25%" align="right" class="betsInfo">' + nameOfToWin + '</td></tr>'
        + '<tr><td width="50%" class="betsInfo">' + count + ' ' + nameOfSingle + '</td><td width="25%" class="betsInfo">' + parseFloat(totalSingleStake).toFixed(2)
        + '</td><td width="25%" align="right" class="betsToWin">' + parseFloat(totalSingleWin).toFixed(2)
        + '</td></tr><tr><td width="50%" class="betsInfo">1 ' + nameOfMultiple + '</td><td width="25%" class="betsInfo">'
        + parseFloat(mulStake).toFixed(2) + '</td><td width="25%"  align="right" class="betsToWin">'
        + (parseFloat(mulOdds) * parseFloat(mulStake)).toFixed(2) + '</td>'
        + '</tr></table></div>';
    }else{
    	sHtml += '<div><table width="100%"><tr><td width="50%" align="left" class="betsInfo">' + nameOfSummary + '</td>'
        + '<td width="25%" class="betsInfo">' + parseFloat(TotalStake).toFixed(2) + '</td><td width="25%" align="right" class="betsInfo">' + nameOfToWin + '</td></tr>'
        + '<tr><td width="50%" class="betsInfo">' + count + ' ' + nameOfSingle + '</td><td width="25%" class="betsInfo">' + parseFloat(totalSingleStake).toFixed(2)
        + '</td><td width="25%" align="right" class="betsToWin">' + parseFloat(totalSingleWin).toFixed(2)
        + '</td></tr></table></div>';
    }


    var w=window.open('/jsp/oddsmatrix/empty.jsp');
    sHtml = "<SCRIPT LANGUAGE=\"JavaScript\">\n if (document.domain.search('.juegoslucky.com')>=0)\ndocument.domain='juegoslucky.com';\nelse if (document.domain.search('.tecnalis.com')>=0)\ndocument.domain='tecnalis.com';\n</SCRIPT>\n" + sHtml;
    w.document.write(sHtml);
    setTimeout(function()
    {
        //alert(window.navigator.userAgent);
        if (window.navigator.userAgent.indexOf("MSIE")>=1)  
            w.document.execCommand('print');
        else if (window.navigator.userAgent.indexOf("Firefox")>=1)
            w.window.print();
        else if (window.navigator.userAgent.indexOf("Opera")>=1){
            //alert('SSSS');
            w.window.onload = w.window.print();
        }
        else
            w.window.print();
            
        w.window.close();
    },1000)
}

function showemptyInfoDiv(){
	/*var obj=$('emptyInfoDiv');
	obj.style.display='block';*/
	$('emptyInfoDiv').style.display="block";
	$('singleDiv').style.display="none";
	$('multiDiv').style.display="none";
	//obj.setText('Your betting slip is currently empty.');
}

function hideemptyInfoDiv(){
	var obj=$('emptyInfoDiv');
	obj.style.display='none';
    //obj.setText('');
}

function ValidateOddsChangedCallback(ret){
	
    var x = 0;
    for(i in allBets){
        x += 1;
    }
    
	if(ret.length > 0){
        var allBetsStr = ret.split(':');

        currentMultipleStake = multiRiskAllowed;

        for(var i=0; i<allBetsStr.length; i++){
            var bets=allBetsStr[i].split(',');
            if(bets.length>2){
                var outcomeId=bets[0];
                var odds=bets[1];
                var newFormatedOdds=bets[2];
                if($defined(allBets[outcomeId])){
                   allBets[outcomeId].newOdds=odds;
                   allBets[outcomeId].newFormatedOdds=newFormatedOdds;

                   /*var userRiskObj = new UserEventRisk(allBets[outcomeId].eventId, allBets[outcomeId].outcomeid);
                   var outcomeRiskObj = new OutcomeRisk(allBets[outcomeId].outcomeid, allBets[outcomeId].eventId);

	               userRiskObj.loadTheRisks();
                   outcomeRiskObj.loadTheRisks();
                   allBets[outcomeId].UserRiskObj = null;
                   allBets[outcomeId].OutcomeRiskObj = null;

		           allBets[outcomeId].UserRiskObj = userRiskObj;
		           allBets[outcomeId].OutcomeRiskObj = outcomeRiskObj;*/
                }
            }
        }
        //odds changed, get new multiple risk allowed
        if((x > 1)){
        	getMultipleStake(false, validateMatchExpired);
        }else{
        	validateMatchExpired();
        }
        
    }else{
    	
    	validateMatchExpired();
    }
    
	return "";
}

function ValidateMatchExpiredCallBack(ret){
	for(i in allBets){
        allBets[i].expired = 'false';
    }
    if(ret.length > 0){
        var allBetsStr = ret.split(',');

        for(var i=0; i<allBetsStr.length; i++){
            var eventId=allBetsStr[i];
            for(i in allBets){
            	if(allBets[i].eventId==eventId){
            	   allBets[i].expired='true';	
            	}
            }
        }
    }
    afterSubmitViewSummary();
    return;
}
function setDivDisplayOnClearAll(){
	 var summaryMainDiv=$('bottonsViewSummary');  //confirm button
    summaryMainDiv.setStyle('display', 'none');
}

function setDivDisplayOnBack(){
	slipStatus = 'start';
	var summaryMainDiv=$('bottonsViewSummary');  //confirm button
    var finallyMainDiv=$('buttonsSubmited');     // close button

    summaryMainDiv.setStyle('display', 'block');
    finallyMainDiv.setStyle('display', 'none');
    $("ButtonSmallbb").setStyle('display', 'block');
    var inputObj = $$('input.StakeTextbox');
	for(i=0;i<inputObj.length;i++){		//alert(inputObj[i].value);
		inputObj[i].readOnly="";
		inputObj[i].readOnly=false;
		//inputObj[i].setProperty('class', 'BetslipInputBox');
		inputObj[i].setStyle('background',"");
		inputObj[i].setStyle('border-style',"");
		inputObj[i].setStyle('color',"#000");
	}

    var errMsg = $('errorMessageMulti');
    if($defined(errMsg)){
        errMsg.setStyle('display', 'none');
    }

	for(i in allBets){
        displayBand("band"+allBets[i].outcomeid,"block");
        displayBand("error"+allBets[i].outcomeid,"none");
    }
    calSingleCount();
    
    var deleteIconObjs = $('firstSlip').getElements('div[id=DeleteIcon]');
    
    for(i=0;i<deleteIconObjs.length;i++){
        deleteIconObjs[i].setStyle('display',"block");
    }
}
function setDivDisplayOnConfirm(){
	slipStatus = 'done';
	var inputDiv=$('firstSlip');
    inputDiv.setStyle('display', 'none');
	
    var singleTr=$('singleSummary');
    var summaryTr=$('AllSummary');
    var multipleTr=$('MultiplesSummary');


    singleTr.setStyle('display', 'block');
    summaryTr.setStyle('display', 'block');
    multipleTr.setStyle('display', 'block');
}

function setDivDisplayOnNext(){
	slipStatus = 'next';
	var inputDiv=$('firstSlip');
    var summaryDiv=$('betslipSummary');
    inputDiv.setStyle('display','block');
    summaryDiv.setStyle('display','none');

//    var singleTr=$('singleSummary');
    //singleTr.setHTML('<tr></tr>');

	var summaryMainDiv=$('bottonsViewSummary');  //confirm button
    var finallyMainDiv=$('buttonsSubmited');     // close button
    var singleTr=$('singleSummary');
    var summaryTr=$('AllSummary');
    var multipleTr=$('MultiplesSummary');
    var summaryTitleTd=$('viewSummaryTitle');


    summaryMainDiv.setStyle('display', 'block');
    finallyMainDiv.setStyle('display', 'none');
    singleTr.setStyle('display', 'none');
    summaryTr.setStyle('display', 'none');
    multipleTr.setStyle('display', 'none');
    summaryTitleTd.setStyle('display', 'none');
    $("ButtonSmallbb").setStyle('display', 'none');
    $("topCell").setStyle('display', 'none');
    $("bonusBalanceCell").setStyle('display', 'none');

    calSumCount();
    //setBgColor();// base on different template,set the stakeBox bgcolor
    var inputObj = $$('input.StakeTextbox');
	for(i=0;i<inputObj.length;i++){		//alert(inputObj[i].value);
		var stake = 0;
		if((!isNaN(inputObj[i].value)) && (inputObj[i].value!='')){
			stake = parseFloat(inputObj[i].value);
			if(parseFloat(mulStake)>0){
				if (stake<0&&i<(inputObj.length - 1)){
	                var inputId = inputObj[i].id;//alert(inputId);
	                var divId = "band"+inputId.substring(5,inputId.length);
	                displayBand(divId,"none");
	            }
			}else{
				if (stake<=0&&i<(inputObj.length - 1)){
	                var inputId = inputObj[i].id;//alert(inputId);
	                var divId = "band"+inputId.substring(5,inputId.length);
	                displayBand(divId,"none");
	            }
			}

		}
		inputObj[i].readOnly="readOnly";
		inputObj[i].readOnly=true;
		inputObj[i].addClass('BetslipInputBoxReadonly');
		inputObj[i].setStyle('border-style',"none");
		inputObj[i].setStyle('color',"gray");
	}
	
	var deleteIconObjs = $('firstSlip').getElements('div[id=DeleteIcon]');
	
	for(i=0;i<deleteIconObjs.length;i++){
		deleteIconObjs[i].setStyle('display',"none");
	}
}

function setBgColor(){
	if (operName=="betonbet"){
		stakeBoxBgColor = "#E7E7E7";
	}else{
		stakeBoxBgColor = "#fff";
	}
}

function displayBand(divId,param){
	$(divId).style.display="none";//setStyle("display","none");
	$(divId).setStyle("display",param);
}

function recalculateOdds(){
    var newMultiOdds = 1.0;
    for(i in allBets){
        if(allBets[i].newOdds > 0.01){
            newMultiOdds = newMultiOdds * allBets[i].newOdds;
        }else{
            newMultiOdds = newMultiOdds * allBets[i].odds;
        }
    }

    return newMultiOdds;
}

function afterSubmitViewSummary(){
	setDivDisplayOnNext();//set button view or display
	bonus.freeBet.isUsedCorrect = true;
	var inputDiv=$('firstSlip');
    var summaryDiv=$('betslipSummary');
    inputDiv.setStyle('display','block');
    summaryDiv.setStyle('display','block');

    var summaryTitleTd=$('viewSummaryTitle');

    var singleTd=$('singleSummary');
    if(!($defined(singleTd))){
    	return;
    }
    singleTd.empty();
    var bettingslipSummaryTable = new Element('table', {'class':'BetslipSummaryTable','width': '100%'});
    bettingslipSummaryTable.injectInside(singleTd);
    var tbody = new Element('tbody');
    tbody.injectInside(bettingslipSummaryTable);
    var countValidateBets=0;
    var countAll=0;
    var totalSingleStake = 0.0;
    var totalSingleWin = 0.0;

    var newMulOdds = 1.0;

    var isMultipleChanged = false;

    var lastTitle;
    
    for(i in allBets){
//		alert('i1:' + i);
        countAll += 1;
		
        //if the user didn't input stake, didn't show it
        if(isNaN(allBets[i].stake) || allBets[i].stake < 0.01){
            allBets[i].stake = 0.00;
            if(allBets[i].expired!='true' && mulStake >= 0.01){
                if(true == allBets[i].includeAsMulti){
                    countAll -= 1
                    continue;
                }
                //if user pick the multi bets , then save the odds
                if(allBets[i].newOdds >= 0.01){
                    newMulOdds = newMulOdds * allBets[i].newOdds;

                }else{
                    newMulOdds = newMulOdds * allBets[i].odds;
                }

                countValidateBets += 1;
            }
        }
//        alert('i2:' + i);
//		alert('allBets[i].expired:' + allBets[i].expired);
        var errorMessageDiv = $('error' + allBets[i].outcomeid);
        var tempOdds = allBets[i].odds;
	    var tempStake = allBets[i].stake;
	    var tempOutcomeid = allBets[i].outcomeid;
	    var tempNewOdds = allBets[i].newOdds;
	    var tempNewFormatedOdds = allBets[i].newFormatedOdds;
	    var tempFormattedOdds = allBets[i].formattedOdds;
	    var tempDate = allBets[i].date;
        if(allBets[i].expired=='true'){
			
        	if($defined(errorMessageDiv)){
        		errorMessageDiv.setHTML(getErrorMessage(MatchExpiredTipsT, MatchExpiredTipsC));
        		errorMessageDiv.setStyle('display','block');
        	}
        	
        	var betTitleTr = new Element('tr');
        	var betTitleTd = new Element('td', {'id':'bettingslipSummaryTitle' + allBets[i].outcomeid ,'colspan': '4'});
        	betTitleTd.injectInside(betTitleTr);
        	betTitleTd.setText(allBets[i].title);
        	if(!lastTitle){
        		betTitleTr.injectInside(tbody);
        	}else{
        		betTitleTr.injectAfter(lastTitle);
        	}
            
            var betMatchExpiredTr = new Element('tr');
            betMatchExpiredTr.setHTML('<td colspan="4">' + MatchExpiredTipsT + ',' + MatchExpiredTipsC + '</td>');
            betMatchExpiredTr.injectAfter(betTitleTr);
            
            var betDevider = new Element('tr');
            var betDeviderTd = new Element('td', {'colspan':'4'});
            var betDeviderDiv = new Element('div', {'id':'BetDevider'});
            betDeviderDiv.injectInside(betDeviderTd);
            betDeviderTd.injectInside(betDevider);
            //betDevider.setHTML('<td colspan="4"><div id="BetDevider"></div></td>');
            betDevider.injectAfter(betMatchExpiredTr);
            lastTitle = betDevider;

            continue;
        }else{
        	if($defined(errorMessageDiv)){
                errorMessageDiv.setText('');
                errorMessageDiv.setStyle('display','none');
            }
//            alert('freeBetChoosenIdx:' + freeBetChoosenIdx);
//        	alert('i:' + i);
//        	alert('allBets[].stake:' + allBets[i].stake);
            if((bonus.freeBet.appliedIdx!=0)&&(i==bonus.freeBet.appliedIdx)&&(allBets[i].stake<0.01)) {
            	bonus.freeBet.isUsedCorrect = false;
            	if($defined(errorMessageDiv)) {            		
            		errorMessageDiv.setHTML(getErrorMessage(SingleZeroBetT, SingleZeroBetC));
        			errorMessageDiv.setStyle('display','block');
            	}
            	continue;
            }
           
            if(allBets[i].stake >= 0.01 || mulStake >= 0.01){

	            var sHtmlDetail = '';
	            countValidateBets += 1;
	            var oddsChangedTr = null;
	            var oddsChangedTd;
			
	            if(false == allBets[i].includeAsMulti){
	                if(allBets[i].newOdds > 0.01){
	                    isMultipleChanged = true;
	                    var newStakeMessage = '';
	                    allBets[i].newStake = 0.0;
	                    
	                    if(parseFloat(allBets[i].UserRiskObj.suggestionStake(allBets[i].newOdds))  < parseFloat(allBets[i].stake)){
	                        allBets[i].newStake = allBets[i].UserRiskObj.suggestionStake(allBets[i].newOdds);
	                        newStakeMessage = ' ' + nameOfNewStake + allBets[i].newStake;
	                    }
	                    if(parseFloat(allBets[i].OutcomeRiskObj.suggestionStake(allBets[i].newOdds)) < parseFloat(allBets[i].stake)){
	                        allBets[i].newStake = allBets[i].UserRiskObj.suggestionStake(allBets[i].newOdds);
	                        newStakeMessage = ' ' + nameOfNewStake + allBets[i].newStake;
	                    }
	                    oddsChangedTr = new Element('tr');
	                    oddsChangedTd = new Element('td',{'id':'oddsChanged' +  allBets[i].outcomeid ,'colspan': '4'});
	                    oddsChangedTd.setHTML(getErrorMessage(oddsChangedMsgT,oddsChangedMsgC +
	                            allBets[i].newFormatedOdds ));
	                    oddsChangedTd.injectInside(oddsChangedTr);

	                    if($defined(errorMessageDiv)){
	                        errorMessageDiv.setHTML(getErrorMessage(oddsChangedMsgT,oddsChangedMsgC +
	                                allBets[i].newFormatedOdds +'&nbsp;'+  newStakeMessage));
	                        errorMessageDiv.setStyle('display','block');
	                    }
	                } else{
	                    //newMulOdds = newMulOdds * allBets[i].odds;
	                    if($defined(errorMessageDiv)){
	                        errorMessageDiv.setText('');
	                        errorMessageDiv.setStyle('display','none');
	                    }
	                }
	            }
				
	            var betTitleTr = new Element('tr');
	            var betTitleTd = new Element('td', {'id':'bettingSlipTitle' ,'colspan': '4'});
	            betTitleTd.injectInside(betTitleTr);
	            betTitleTd.setText(allBets[i].title);
	            if(!lastTitle){
	                betTitleTr.injectInside(tbody);
	            }else{
	                betTitleTr.injectAfter(lastTitle);
	            }
            	
	            
	            var usedStake = 0.0;
	            if(allBets[i].newStake >= 0.01){
	                usedStake = allBets[i].newStake;
	            }else{
	                usedStake = allBets[i].stake;
	            }
	            var floatUsedStake = parseFloat(usedStake);
	            
	            var oddsDetailtr = new Element('tr');
	            var oddsPickTd = new Element('td', {'valign':'top' ,'colspan': '3', 'width': '70%'});
	            oddsPickTd.setHTML(nameOfPick + '&nbsp;' + allBets[i].participant);
	            oddsPickTd.injectInside(oddsDetailtr);
	            if(allBets[i].stake >= 0.01){
	            	var oddsStakeTd = new Element('td', {'id':'BoldOdds'});
	            	oddsStakeTd.setText(usedStake);
	            	oddsStakeTd.injectAfter(oddsPickTd);

	            }else{
	            	var oddsStakeTd = new Element('td', {'valign':'top'});
                    oddsStakeTd.setHTML('&nbsp;');
                    oddsStakeTd.injectAfter(oddsPickTd);

	            }
	            if((bonus.freeBet.appliedIdx!=0)&&(i==bonus.freeBet.appliedIdx)) {
	            	var freeBetAppliedInfo = getFreeBetAppliedInfoMsg();
	            	var bonusFreeBetTr = new Element('tr');
	            	var freeBetAppliedInfoTd = new Element('td', {'valign':'top' ,'colspan': '4', 'width': '100%'});          	
	            	freeBetAppliedInfoTd.setHTML('<strong>' + freeBetAppliedInfo + '</strong>');	            	
	            	freeBetAppliedInfoTd.injectInside(bonusFreeBetTr);
	            	bonusFreeBetTr.injectAfter(betTitleTr);
	            	oddsDetailtr.injectAfter(bonusFreeBetTr);
	            } else {
	            	oddsDetailtr.injectAfter(betTitleTr);
	            }
//				oddsDetailtr.injectAfter(betTitleTr);
	            var confirmOddsTr = new Element('tr');
	            var confirmOddsTd = new Element('td', {'colspan':'4', 'align':'bottom', 'id':'confirmedOdds' + tempOutcomeid});
	
	            var oddsValue = nameOfOdds;
	            if( tempNewOdds > 0.01){
	                oddsValue += tempNewFormatedOdds;
	            }else{
	                oddsValue += tempFormattedOdds;
	            }
	            
	           if(tempStake >= 0.01){
                    oddsValue += ' ' + nameOfToWin + '&nbsp;';
                    if(tempNewOdds > 0.01){
                        oddsValue += ((parseFloat(tempNewOdds) * floatUsedStake.toFixed(2)).toFixed(2));
                    }else{
                        oddsValue += ((parseFloat(tempOdds) * floatUsedStake.toFixed(2)).toFixed(2));
                    }
    
                }else{
                    oddsValue += ' &nbsp; ';
                }
                
                confirmOddsTd.setHTML(oddsValue);
                confirmOddsTd.injectInside(confirmOddsTr);
                confirmOddsTr.injectAfter(oddsDetailtr);

	
	            var oddsDateTr = new Element('tr');
                var oddsDateTd = new Element('td', {'colspan':'4', 'align':'bottom', 'id':'confirmedOddsDate' + tempOutcomeid});
                oddsDateTd.setHTML(nameOfDate + '&nbsp;'+tempDate);
                oddsDateTd.injectInside(oddsDateTr);
                oddsDateTr.injectAfter(confirmOddsTr);
	            
	            if(oddsChangedTr){
	            	oddsChangedTr.injectAfter(oddsDateTr);
	            }
	            
	            var betDevider = new Element('tr');
	            var betDeviderTd = new Element('td', {'colspan':'4'});
                var betDeviderDiv = new Element('div', {'id':'BetDevider'});
                betDeviderDiv.injectInside(betDeviderTd);
                betDeviderTd.injectInside(betDevider);
	            //var betDeviderTd = new Element('');
                
                if(! oddsChangedTr){
                    betDevider.injectAfter(oddsDateTr);
                }else{
                	betDevider.injectAfter(oddsChangedTr);
                }
                
                
                lastTitle = betDevider;
	        }
	
	        
	        totalSingleStake += floatUsedStake;
	
	        if(tempNewOdds > 0.01){
	            totalSingleWin += (floatUsedStake * parseFloat(tempNewOdds));
	        }else{
	            totalSingleWin += (floatUsedStake * parseFloat(tempOdds));
	        }
	        allExpired='false';
        }
    }

    if( parseFloat(multiRiskAllowed) > 0.0 && parseFloat(multiRiskAllowed) < parseFloat(mulStake)){
	    var errMsg = $('errorMessageMulti');
        if($defined(errMsg)){
            errMsg.setStyle('display', 'block');
            errMsg.setHTML(getErrorMessage(exceedRiskTitle,"Max allow stake:" + multiRiskAllowed + "<br>Please accept the new stake or go back."));
        }
    }
    if((bonus.freeBet.appliedIdx=='multiStake')&&(mulStake<0.01)) {
        var errMsg = $('errorMessageMulti');
        if($defined(errMsg)){
            errMsg.setStyle('display', 'block');
            errMsg.setHTML(getErrorMessage(MultiZeroBetT,MultiZeroBetC));
        }
        bonus.freeBet.isUsedCorrect = false;
    }
    //alert(multiRiskAllowed + '-----' + mulStake);

    if(noSingleStake && countValidateBets > 1){
        allExpired = 'false';
    }

    if('true'==allExpired){
        clearAll();
        
        var bettingslipSummaryTableTO = new Element('table', {'width': '100%'});

        var betTitleTOTr = new Element('tr');
        var betTitleTOTd = new Element('td');
        betTitleTOTd.setText(MatchExpiredTips);
        betTitleTOTd.injectInside(betTitleTOTr);
        
        betTitleTOTr.injectInside(bettingslipSummaryTableTO);
        bettingslipSummaryTableTO.injectInside(singleTd);

        var btn = $('btnConfirm');
        if($defined(btn)){
            btn.setStyle('display','none');
        }
        return;
    }else{
        var btn = $('btnConfirm');
        if($defined(btn)){
            btn.setStyle('display','block');
        }
    }

    //Multiple stake is 0 or is not a number the count of the validate bets less then 2
    if(isNaN(mulStake)|| (parseFloat(mulStake) < 0.01)){// || (countValidateBets < 2)
        mulStake = 0.0
        //return;
    }

    if(parseFloat(mulStake) >= 0.01){
    	//mulOdds = newMulOdds;
	    //singleTr.innerHtml=sHtml;

        var backMulStake = mulStake;
	    if( parseFloat(multiRiskAllowed) > 0.0 && parseFloat(multiRiskAllowed) < parseFloat(mulStake)){
	    	backMulStake = mulStake;
	    	mulStake = multiRiskAllowed
	    }

	    if(isMultipleChanged){
	        mulOdds = recalculateOdds();
	        calMultiWin();
	        getOddsType(mulOdds, 'OddsNoDelete', multiOddsChangedCallback);
	    }else{
	    	var multipleTr=$('MultiplesSummary');
			var mulOutcomeId = tempOutcomeid;
			var bonusAppliedInfo = getBonusPrintAppliedInfoHtml('multiStake',true) ;
			
	        var sHtml = '<table width="100%"  class="BetslipSummaryTable"><tr><td colspan="3" width="70%" id="bettingSlipTitle">' + nameOfMultiples;
	            sHtml += '</td><td id="BoldOdds">';
	            sHtml += parseFloat(mulStake).toFixed(2);
	            sHtml += '</td></tr>';
				sHtml += bonusAppliedInfo;
	            sHtml += '<tr height="35"><td colspan="4" align="bottom" id="confirmedOdds' + mulOutcomeId + '">' + nameOfOdds + '  ';
	            sHtml += mulOddsForUser;
	            sHtml += '   ' + nameOfToWin + '  ';

	            sHtml += (parseFloat(mulOdds) * parseFloat(mulStake)).toFixed(2);


	            sHtml += '</td></tr></table>';
	        
	        multipleTr.setHTML(sHtml);  //same as fisrt page
	    }
	    mulStake = backMulStake;
    }



    var summaryTr=$('AllSummary');

    var sumStake = (parseFloat(totalSingleStake) + parseFloat(mulStake)).toFixed(2);
    var sumWin = ((parseFloat(mulOdds) * parseFloat(mulStake))  + parseFloat(totalSingleWin)).toFixed(2);

    var sHtml='<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2" align="left"><div id="GameHeadline">' +
    		'<div id="LeftText">' + ChargedToAccount + '</div><div id="RightText">'+sumStake +'</div></div></td></tr>' +
    		'<tr><td colspan="2" align="left"><div id="GameHeadline">'
    		+'<div id="LeftText">' + PotentialWin + '</div><div id="RightText">'
    		+sumWin +'</div></div></td></tr></table>';
    summaryTr.setHTML(sHtml);//same as fisrt page
    
    getCheckFromCookie();
    
    //alert(bettingslipSummaryTable.getHTML());
    //pre save the bets
    //preSaveSingelBets();
}

function multiOddsChangedCallback(ret){
    var multipleTr=$('MultiplesSummary');

    sHtml = '<table width="100%"  class="MultiSummaryTable"><tr><td colspan="3" width="70%" id="bettingSlipTitle">' + nameOfMultiples;
        sHtml += '</td><td id="BoldOdds">';
        sHtml += parseFloat(mulStake).toFixed(2);
        sHtml += '</td></tr>';

        sHtml += '<tr htight="35"><td colspan="4" align="bottom" id="confirmedOdds' + allBets[i].outcomeid + '">' + nameOfOdds + '  ';
        sHtml += ret;
        sHtml += '   ' + nameOfToWin + '  ';

        sHtml += (parseFloat(ret) * parseFloat(mulStake)).toFixed(2);


        sHtml += '</td></tr></table>';

    multipleTr.setHTML(sHtml);  //same as fisrt page
}

function preSaveSingelBets(){
	var strSingle = '';
	for(i in allBets){
        if(allBets[i].newOdds > 0.01){
            allBets[i].odds = allBets[i].newOdds;
        }

        if('false' == allBets[i].expired){
            strSingle = strSingle + allBets[i].outcomeid
                + ':' + allBets[i].odds
                + ':' + allBets[i].stake
                + ':' + allBets[i].eventId
                + ';';
        }
    }

    if(strSingle.length > 0){
        strSingle = strSingle.substr(0, strSingle.length - 1);
    }

    var strMulti = mulStake + ':' + mulOdds;

    var url = '/validateUserBettinigs.do';
    var params = 'singleBets=' + strSingle + '&action=preSave&tttt=preSaveSingelBets&ttt=preSaveSingelBets';
    if(mulStake>0.01 && mulOdds > 1){
        params = params + "&multipleBets=" + strMulti;
    }
    //bonus section begin
	params = params + getBonusParams();
	//bonus section end 
	//alert('params:' + params);
    //if((mulStake != 0.0) && mulOdds)
    var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false'});
    ajaxReq.send(url,params);
    ajaxReq=null;
}

function isErrorMessageShows(){
	var isShow = false;
	for(i in allBets){
        var errorDiv = $("error"+allBets[i].outcomeid);
        if($defined(errorDiv)){
        	if(errorDiv.getStyle('display')=='block'){
        		isShow = true;
        	}
        }
    }
    
    var errorMessageMulti = $('errorMessageMulti');
    if($defined(errorMessageMulti)){
    	if(errorMessageMulti.getStyle('display')=='block'){
            isShow = true;
        }
    }
    //bonus section begin
    var errorMessageBonus = $('errorBonusSec');
    if($defined(errorMessageBonus)){
    	if(errorMessageBonus.getStyle('display')=='block'){
            isShow = true;
        }
    }
    //bonus section end
    return isShow;
}

function viewSummary(){
	//if the user didn't input any single and multiple stake, didn't let him go through
	noSingleStake = true;
	for(i in allBets){
	   allBets[i].bandTips.hide();
	   if(parseFloat(allBets[i].stake) > 0.005){
           noSingleStake=false;
	   }
	}
	if(noSingleStake){
		if(mulStake < 0.01){
			return;
		}
	}
	
    if(isErrorMessageShows()){
        return;
    }
	if(! validateBeforSubmit()){
		return;
	}	
    canPlaceBettingNow = false;
	/*var topCell=$('topCell');
    topCell.style.display="block";
    topCell.setHTML('<B>CONFIRM</B>');*/
	
	allExpired='true';
	validateOddsChanged(ValidateOddsChangedCallback);
	//bonus section begin
	showBonusSummary();
	//bonus section end
}

function backToBetslip(){
	canPlaceBettingNow = true;
    var inputDiv=$('firstSlip');
    var summaryDiv=$('betslipSummary');
    inputDiv.setStyle('display','block');
    summaryDiv.setStyle('display','none');

    var singleTr=$('singleSummary');
    //singleTr.setHTML('<tr></tr>');
    setDivDisplayOnBack();
    
    //bonus section begin
	recoverFromBonusSummary();
	//bonus section end
}

function resetAllStakes(isClearStake){
	for(i in allBets){
		var outcomeId=allBets[i].outcomeid;
		var inputBand=$('input' + outcomeId);
		if($defined(inputBand)){
			if(isClearStake){
			     inputBand.value='0.00';	
			}
			calTheWin(outcomeId);
		}
	}
	var mulStakeInput=$('multiStake');
	if($defined(mulStakeInput)){
		mulStakeInput.value='0.00';
	}

	calMultiWin();

	Cookie.remove('allbetsCookie');
    Cookie.remove('multibetCookie');

    //clear all the summary
    var singleTr=$('singleSummary');
    var multipleTr=$('MultiplesSummary');
    var summaryTr=$('AllSummary');
    singleTr.setHTML('');
    multipleTr.setHTML('');
    summaryTr.setHTML('');
}

function saveCheckToCookie(){
	var clearTickets = $('clearTickets');
	if($defined(clearTickets)){
		var checkedState = 'false';
		if(clearTickets.checked){
			checkedState = 'true';
		}else{
			checkedState = 'false';
		}
		Cookie.remove('betslipCheckState');
        Cookie.set('betslipCheckState', checkedState);
	}
}

function getCheckFromCookie(){
	var clearTickets = $('clearTickets');
    if($defined(clearTickets)){
    	if(Cookie.get('betslipCheckState')){
            var str=Cookie.get('betslipCheckState');
            if(str == 'true'){
            	clearTickets.checked = true;
            }else{
            	clearTickets.checked = false;
            }
    	}
    }
}

//initialize: function(eventId, outcomeid, odds, title, outcomeName, stake, matchDate, participant, restrict, bettingType){
function saveBetsToCookie(){
    var str='';
    for(i in allBets){
        if(allBets[i].init || mulStake > 0.005){
    	    str = str + allBets[i].outcomeid
	            + '|' + allBets[i].odds
	            + '|' + allBets[i].formattedOdds
	            + '|' + allBets[i].outcomename
	            + '|' + allBets[i].bettingtype
	            + '|' + allBets[i].stake
	            + '|' + allBets[i].title
	            + '|' + allBets[i].date
	            + '|' + allBets[i].participant
	            + '|' + allBets[i].restrict
	            + '|' + allBets[i].eventId
	            + '|' + allBets[i].handiCap
	            + '|' + allBets[i].tournamentName
	            + '\n';
    	}
    }
    Cookie.remove('allbetsCookie');
    Cookie.set('allbetsCookie', str);
}

function loadBetsFromCookie(){
   if(isOddsUpdated == 'false' || isUserValidate == 'false'){
        if(allBets != null){
            clearAll();
        }
        return;
    }
    if(Cookie.get('allbetsCookie')){
        var str=Cookie.get('allbetsCookie');
        var allBetsStr = str.split('\n');

        for(var i=0; i<allBetsStr.length; i++){
            var bets=allBetsStr[i].split('|');
            if(bets.length>11){
                /*var offer = new BettingOffer(bets[10], bets[0], bets[1], bets[2], bets[6], bets[3], bets[5],
                    bets[7], bets[8], bets[9], bets[4], bets[11], bets[12]); */
                validateOutcomeExists(bets[10], bets[0], bets[1], bets[2], bets[6], bets[3], bets[5],
                    bets[7], bets[8], bets[9], bets[4], bets[12]);
            }
        }


        //calAllStakeAndWin();
    }
}

function saveMultiBets(){
    if(mulStake>0){
        var str=mulStake + '|' + mulOdds;
        Cookie.remove('multibetCookie');
        Cookie.set('multibetCookie', str);
    }
}

function loadMultiBets(){
    if(isOddsUpdated == 'false' || isUserValidate == 'false'){
        return;
    }
    if(Cookie.get('multibetCookie')){

        getMultipleStake(true, null);
        var str=Cookie.get('multibetCookie');
        var bets=str.split('|');
        mulStake=bets[0];
        mulOdds=bets[1];
        var mInput=$('multiStake');
        mInput.value=mulStake;

        //validateMultiInput(mInput);
        calMultiWin();
    }
}

function submitValidate(actionName, callBackFunc){
	var strSingle='';
    for(i in allBets){
        strSingle = strSingle + allBets[i].outcomeid
            + ':' + allBets[i].odds
            + ':' + allBets[i].stake
            + ':' + allBets[i].eventId
            + ';';
    }
    if(strSingle.length > 0){
        strSingle = strSingle.substr(0, strSingle.length - 1);
    }


    var url = '/validateUserBettinigs.do';
    var params = 'singleBets=' + strSingle + '&action=' + actionName+'&ttt=submitValidate';
    if(mulOdds > 1.0){
    	params = params + '&multiBets=' + mulOdds + '|' + mulStake;
    }
    var ret = '';
    var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
           {ret=response; return callBackFunc(ret) + ""}, onFailure:function(response){
           	    //var sErr = response.responseText;
           	    //alert("error on " + response.responseText);
           	}});
    ajaxReq.send(url,params);
    ajaxReq=null;

    return ret;
}

/*function getCurrentBalanceCallBack(ret){
	if( isNaN(ret)){
        balance=0.0;
    }else{
    	balance = parseFloat(ret);
    }
}
function getCurrentBalance(){
	balance = parseFloat(submitValidate('getBalance', getCurrentBalanceCallBack));
}
*/

function valiadteBalance(outcomeId, newValue){
	if(isNaN(newValue) || newValue == ''){
        return true;
    }

    var allStake = 0.0;
    for(i in allBets){
    	if(allBets[i].outcomeid != outcomeId){
    		allStake += parseFloat(allBets[i].stake);
    	}else{
    		allStake += parseFloat(newValue);
    	}
    }

    if(outcomeId > 0){
    	allStake += parseFloat(mulStake);
    }else{
    	allStake += parseFloat(newValue);
    }
    
    
    //bonus section begin
    hidesFundsNotEnoughMsgs();
    clearBonusErrorMsg();
	var realBonusAmount = getRealFreeBetAmount();
	var remainedBalance = parseFloat(parseFloat(balance).toFixed(2)) + parseFloat(parseFloat(bonusBalance).toFixed(2)) - parseFloat(parseFloat(allStake).toFixed(2));
	remainedBalance += parseFloat(parseFloat(realBonusAmount).toFixed(2));
	var remainedMainBalance = parseFloat(parseFloat(balance).toFixed(2)) + parseFloat(parseFloat(realBonusAmount).toFixed(2)) - parseFloat(parseFloat(getStakeNotInFdBonusBalance(allStake)).toFixed(2));
    return ((remainedBalance>=0)&&(remainedMainBalance>=0));
    //bonus section end
}
function getStakeNotInFdBonusBalance(allStake) {
	var stakeNotInFdBalance = 0.00;
	if((bonusBalance>0)&&($defined(bonus.fdBonus.isInited))&&bonus.fdBonus.isInited) {
		var bonusStake = 0.00;
		for(i in allBets){
    		if((allBets[i].odds>=bonus.fdBonus.requiredOdds)&&((bonus.fdBonus.betType=='1')||(bonus.fdBonus.betType=='3'))){
    			bonusStake += parseFloat(allBets[i].stake);
    		}
		}
    	if((mulOdds>=bonus.fdBonus.requiredOdds)&&((bonus.fdBonus.betType=='2')||(bonus.fdBonus.betType=='3'))){
    		bonusStake += parseFloat(mulStake);
    	}
    	
    	stakeNotInFdBalance = allStake - bonusStake;
    }

    
    return stakeNotInFdBalance;
}
function showTheBalanceOnDiv(b){
	var balanceAll = b.split(';');
	balance = balanceAll[0];
	var balancePartner = balanceAll[1];
	bonusBalance = balanceAll[2];
	var objSportsbalance=$('sportsbalance');
	showInitFDBonusOffer();
	showFDBonusOffer();
	showSummaryFDBonusOffer();
	var num = new NumberFormat(balance).toFormatted();
	if($defined(objSportsbalance)){
	    objSportsbalance.setText(num);
	}
	showTheBalanceOnIFrameDiv(num);
}

function showTheBalanceOnIFrameDiv(balance){
	var x = document.getElementById("loginFrame");
	if(x){
		var objSportsbalance=null;
		if (x.contentDocument) {
			objSportsbalance=x.contentDocument.getElementById("sportsbalance");
		}
		else if(bobo.document) {
			objSportsbalance=x.document.getElementById("sportsbalance");
		}
		if($defined(objSportsbalance)){
		    objSportsbalance.innerHTML=balance;
		}
	}	
	//for towergaming
	var y = document.getElementById("iframeHeader");	
	if (y) {
		var objSportsbalance=null;
		if (y.contentDocument) {
			objSportsbalance=y.contentDocument.getElementById("bettingBalance");
		}
		else if(bobo.document) {
			objSportsbalance=y.document.getElementById("bettingBalance");
		}
		if($defined(objSportsbalance)){
		    objSportsbalance.innerHTML=balance;
		}
	}
}

function showCurrentBalance(){
	//{'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
	var ajaxReq=new XHR(
	   {'method': 'post','autoCancel': 'false', 'async':true,onSuccess: function(response)
	       {showTheBalanceOnDiv(response);},
            timeout: 20000
	       });
    ajaxReq.send('/validateUserBettinigs.do','action=getBalance&ttt=showCurrentBalance');
    ajaxReq=null;
}

function showLoading(){
	var obj=$('showSaveDiv');
    document.body.style.overflow = 'hidden';
    document.body.style.height = document.documentElement.clientHeight + 'px';
    obj.style.display = 'block';
    obj.style.height = document.documentElement.clientHeight + 'px';
}

function hideLoading(){
	var obj=$('showSaveDiv');
    document.body.style.overflow = '';
    obj.style.display = 'none';
}

function showMultiContent(){
    /*var multiContent1=$('multiContent1');
    var multiContent2=$('multiContent2');
    var multiContentTitle=$('multiContentTitle');

    multiContent1.setStyle('display','block');
    multiContent2.setStyle('display','block');
    multiContentTitle.setStyle('display','block');*/
    $('multiDiv').style.display="block";
    var multiContent=$('multiContent');
    multiContent.setStyle('display','block');
    var multiDiv=$('multiDiv');
    multiDiv.setStyle('display','block');
}

function hideMultiContent(){
    /*var multiContent1=$('multiContent1');
    var multiContent2=$('multiContent2');
    var multiContentTitle=$('multiContentTitle');

    multiContent1.setStyle('display','none');
    multiContent2.setStyle('display','none');
    multiContentTitle.setStyle('display','none');*/
    var multiContent=$('multiContent');
    multiContent.setStyle('display','none');
    
    var multiDiv=$('multiDiv');
    multiDiv.setStyle('display','none');
}

function showMultipleError(show){
	var multiContentError1=$('multiContentErrorMessage');
	if(show){
		multiContentError1.setStyle('display','block');
	}else{
		multiContentError1.setStyle('display','none');
	}
}

function afterSubmitBets(b){
	//call javascript method in bestbet page to refresh betting balance
	if(parent.reloadBalance) {
    	parent.reloadBalance("betting");
	}
	
	var accountIframe =$('accountBoxFrame');
    
    if($defined(accountIframe)){
          var partnerSite = $('partnersite');
          if($defined(partnerSite)){
            accountIframe.setAttribute('src',partnerSite.value+'/Account/SideBar.bzlp?FromAccount=b&ToAccount=s');
         //accountIframe.setAttribute('src','/Account/SideBar.bzlp?FromAccount=b&ToAccount=s');
          }
    }
    
	//if(allBets[outcomeId].OutcomeRiskObj.suggestionStake(allBets[outcomeId].odds) > allBets[outcomeId].UserRiskObj.suggestionStake(allBets[outcomeId].odds)){
	isSaveBettingNow = false;
	var summaryDiv=$('bottonsViewSummary');
    var finallyDiv=$('buttonsSubmited');
    var summaryTitleTd=$('viewSummaryTitle');
    summaryTitleTd.setStyle('display', 'none');
    summaryDiv.setStyle('display', 'none');
    finallyDiv.setStyle('display', 'block');
    setDivDisplayOnConfirm();
   

    var checkClearTicket = $('clearTickets');
    if(($defined(checkClearTicket)) && checkClearTicket.check){
    	Cookie.remove('allbetsCookie');
        Cookie.remove('multibetCookie');
    }

    var btnClose=$('btnClose');
    if($defined(btnClose)){
        btnClose.setStyle('display', 'block')
    }

    var btnReturn=$('btnReturn');
    if($defined(btnReturn)){
        btnReturn.setStyle('display', 'none')
    }

    var btnPrintout=$('btnPrintout');
    if($defined(btnPrintout)){
        btnPrintout.setStyle('display', 'block');
    }

    //adjust the stake allowed
    for(i in allBets){
    	if(allBets[i].OutcomeRiskObj.suggestionStake(allBets[i].odds) > allBets[i].UserRiskObj.suggestionStake(allBets[i].odds)){
    		allBets[i].UserRiskObj.calculateRemineRisk(allBets[i].stake, allBets[i].odds);
    	}else{
    		allBets[i].OutcomeRiskObj.calculateRemineRisk(allBets[i].stake, allBets[i].odds);
    	}
    	//hide all the odds changed message box
    	//id="oddsChanged' +  allBets[i].outcomeid +
    	var oddsChangedMessage = $('oddsChanged' +  allBets[i].outcomeid);
    	if($defined(oddsChangedMessage)){
    		oddsChangedMessage.setStyle('display', 'none');
    	}
    	var oddsMessage = $('confirmedOdds' + allBets[i].outcomeid);
    	if($defined(oddsMessage)){

    		if(allBets[i].newOdds > 0.01){
    			var toWin = (parseFloat(allBets[i].newOdds) * parseFloat(allBets[i].stake)).toFixed(2);
    			oddsMessage.setText(nameOfOdds + allBets[i].newFormatedOdds + '    ' + nameOfToWin + toWin);
    		}
    	}
    }
    showCurrentBalance();

    
    var topCell=$('topCell');
    topCell.style.display="block";//PURCHASE COMPLETE
    topCell.setStyle('display', 'block');
   
    
    //bonus section begin
    if(bonusBalance>0) {
    	var bonusBalanceCell=$('bonusBalanceCell');
    	bonusBalanceCell.style.display="block";//PURCHASE COMPLETE
    	bonusBalanceCell.setStyle('display', 'block');
    }
    
    var title ='';
    var bonusTitle = '';//getBonusTitleAfterSubmitted();
    if(bonusTitle=='') {
    	title = betsPlaced;
    } else {
    	title = bonusTitle;
    }    
    topCell.setHTML('<B>' + title + '</B><br><a class=\'betslip\' onclick="printoutResult();">' + PrintReceiptTips + '</a>');
    //bonus section end
    
        if(getArraySize(allBets) <= 1){
            $("lastTranId").setHTML('&nbsp;&nbsp;&nbsp;' +lastSingleTransId + ':&nbsp;' + b.responseText);
        }else{
            $("lastTranId").setHTML('&nbsp;' +lastTransId + '&nbsp;' + b.responseText); 
        }

    
    canPlaceBettingNow = true;
    //var clearTicket = $('clearTickets');
    //clearTicket.checked = false;
    var clearTicketsDiv = $('clearTicketsDiv');
    clearTicketsDiv.setStyle('display', 'block');
    
    //bonus section begin
    var isFreeBet = bonus.freeBet.isInited;
    if(isFreeBet){
    	var bonusStatus = getBonusParams();
		if(bonusStatus.indexOf('&bonusStr=-1')==-1) {
			bonus.freeBet.isUsed = true; 
		}
		if(bonus.freeBet.isUsed){
    		if($defined($('freeBetAmount'))){
    			$('freeBetAmount').setHTML('');
    			if($defined($('lblFreeBetAmount'))){
    				$('lblFreeBetAmount').setHTML('');
    			}
    			if($defined($('freeBetCurrency'))){
    				$('freeBetCurrency').setHTML('');
    			}
    			
			}else if($defined($('loginFrame'))) {
    			var loginFrame = document.getElementById("loginFrame");
    			if (loginFrame.contentDocument) {
					objFreeBetAmount=loginFrame.contentDocument.getElementById("freeBetAmount");
				} else if(bobo.document) {
					objFreeBetAmount=loginFrame.document.getElementById("sportsbalance");
				}
				if($defined(objFreeBetAmount)){
		   		 	objFreeBetAmount.innerHTML='';
				}
   			 }
		}
    } 
    //bonus section end
}

function backtoViewSummary(ret){
	var x = 0;
    for(i in allBets){
        x += 1;
    }

    if(ret.length > 0){
        var allBetsStr = ret.split(':');

        currentMultipleStake = multiRiskAllowed;

        for(var i=0; i<allBetsStr.length; i++){
            var bets=allBetsStr[i].split(',');
            if(bets.length>2){
                var outcomeId=bets[0];
                var odds=bets[1];
                var newFormatedOdds=bets[2];
                if($defined(allBets[outcomeId])){
                   allBets[outcomeId].newOdds=odds;
                   allBets[outcomeId].newFormatedOdds=newFormatedOdds;
                }
            }
        }
        //odds changed, get new multiple risk allowed
        if((x > 1)){
            getMultipleStake(false, validateMatchExpired);
        }
    }
}

function afterSubmitBetsFails(b){
	isSaveBettingNow = false;

	var resultText;
	if (b.status=='-1'){
		resultText = "Connection timeout!";
	}else if(b.responseText.substring(0, 5) == '<<<<<'){
		var oddsChangedStr = b.responseText.substring(5);
		
		var allBetsStr = oddsChangedStr.split(':');
		
		var x = 0;
	    for(i in allBets){
	        x += 1;
	    }

        for(var i=0; i<allBetsStr.length; i++){
            var bets=allBetsStr[i].split(',');
            if(bets.length>2){
                var outcomeId=bets[0];
                var odds=bets[1];
                var newFormatedOdds=bets[2];
                if($defined(allBets[outcomeId])){
                   allBets[outcomeId].newOdds=odds;
                   allBets[outcomeId].newFormatedOdds=newFormatedOdds;
                }
                var oddsChangedMessage = $('error' + outcomeId);
                if($defined(oddsChangedMessage)){
                    oddsChangedMessage.setHTML(getErrorMessage(oddsChangedMsgT,oddsChangedMsgC + allBets[outcomeId].newFormatedOdds));
                    oddsChangedMessage.setStyle('display','block');
                }
            }
        }
        //odds changed, get new multiple risk allowed
        if((x > 1)){
            getMultipleStake(true, null);
            mulOdds = recalculateOdds();
            calMultiWin();
            getOddsType(mulOdds, 'OddsNoDelete', multiOddsChangedCallback);
        }
		return;
	} else if(b.responseText.substring(0, 8) == 'OM_Error'){
		resultText = b.responseText.substring(8);
	} else {
		resultText = 'Fault Error!';
	}

	var summaryDiv=$('bottonsViewSummary');
    var finallyDiv=$('buttonsSubmited');
    var summaryTitleTd=$('viewSummaryTitle');
    var singleSummary=$('singleSummary');
    var MultiplesSummary=$('MultiplesSummary');
    var AllSummary=$('AllSummary');
    showCurrentBalance();

    summaryDiv.setStyle('display', 'none');
    finallyDiv.setStyle('display', 'block');
    summaryTitleTd.setHTML(getErrorMessage(validateFailedT,'<br>'+resultText));//setText(resultText + '!');

    var allStakeNow = 0.0;
    for(i in allBets){
        var stake=allBets[i].stake;
        allStakeNow += parseFloat(stake);
    }

    allStakeNow = allStakeNow.toFixed(2);
    allStakeNow = parseFloat(mulStake) + parseFloat(allStakeNow);
    allStakeNow = parseFloat(allStakeNow).toFixed(2);

    	MultiplesSummary.setText('');
    	AllSummary.setText('');

    	var btnClose=$('btnClose');
    	if($defined(btnClose)){
    		btnClose.setStyle('display', 'none')
    	}

    	var btnReturn=$('btnReturn');
        if($defined(btnReturn)){
            btnReturn.setStyle('display', 'block');
        }

        var btnPrintout=$('btnPrintout');
        if($defined(btnPrintout)){
        	btnPrintout.setStyle('display', 'none');
        }

   $("lastTranId").setHTML(getErrorMessage(resultText,""));
    Cookie.remove('allbetsCookie');
    Cookie.remove('multibetCookie');
    canPlaceBettingNow = true;
    
    var clearTicket = $('clearTickets');
    //clearTicket.checked = true;
    var clearTicketsDiv = $('clearTicketsDiv');
    clearTicketsDiv.setStyle('display', 'none');
}


function validateOddsBeforeSubmit(){
	validateOddsChanged(validateOddsBeforeSubmitCallBack)
}

function validateOddsBeforeSubmitCallBack(){
	
}

function submitBets(){
	//if user did not login, didn't save bets
	if(isUserLoggedin != 'true'){
		return;
	}

	if(isSaveBettingNow){
		alert(insaving);
		return;
	}

	isSaveBettingNow = true;

	//showLoading();
	var summaryDiv=$('bottonsViewSummary');
	var finallyDiv=$('buttonsSubmited');
	var summaryTitleTd=$('viewSummaryTitle');


    var strSingle='';
    for(i in allBets){
    	if(allBets[i].newOdds >= 0.01){
    		allBets[i].odds = allBets[i].newOdds;
    		allBets[i].formattedOdds = allBets[i].newFormatedOdds;
    	}

        if(allBets[i].newStake >= 0.01){
            allBets[i].stake = allBets[i].newStake;
        }

    	if('false' == allBets[i].expired){
    		strSingle = strSingle + allBets[i].outcomeid
	            + ':' + allBets[i].odds
	            + ':' + allBets[i].stake
	            + ':' + allBets[i].eventId
	            + ':' + allBets[i].bettingtype
	            + ';';
    	}
    }

    if(strSingle.length > 0){
        strSingle = strSingle.substr(0, strSingle.length - 1);
    }

    if( parseFloat(multiRiskAllowed) > 0.0 && parseFloat(multiRiskAllowed) < parseFloat(mulStake)){
    	mulStake = multiRiskAllowed;
    }

    var strMulti = mulStake + ':' + mulOdds;

    var url = "/saveUserBettings.do";
    //alert(strSingle);
	var params = "singleBets=" + strSingle;
	if(mulStake>=0.01 && mulOdds > 1){
		params = params + "&multipleBets=" + strMulti;
	}
	//bonus section begin
	params = params + getBonusParams();
	//bonus section end
	//if((mulStake != 0.0) && mulOdds)
	
    url = url + '?' + params;
    var savebetsCallback = {

	    //if our XHR call is successful, we want to make use
	    //of the returned data and create child nodes.
	    success: function(oResponse) {
            if(oResponse.responseText.length > 25 || oResponse.responseText.length == 0){
                //$("lastTranId").setHTML('&nbsp;&nbsp;&nbsp;  You can not place bets right now! Please retry later!' );
                afterSubmitBetsFails(oResponse);
            }
            else{
    	       afterSubmitBets(oResponse);
            }
	    },

	    failure: function(oResponse) {
	       afterSubmitBetsFails(oResponse);
	    },
	    timeout: 60000
	};
	YAHOO.util.Connect.asyncRequest('POST', url, savebetsCallback);
}

function onFinishedSubmit(req){
	alert('Success!' + reg);
}

function validateMultiInput(mInput1){
	var mInput=$('multiStake');

    if((parseFloat(mInput.value) < 0.0) || ((parseFloat(mInput.value) == 0.0)&&(!bonus.enabled))||(isNaN(mInput.value))||(mInput.value == '')){
    	//mInput.value = '0.00';
        isValidateMulti = true;
        hideErrorMSG(-1, true);        
        return true;
    }else{
    	mulStake=parseFloat(mInput.value).toFixed(2);
    	// did not validate the stake if the user did not logged in
        if('false' == isUserLoggedin){
            hideErrorMSG(-1, true);
            return true;
        }
        if(multiRiskAllowed <= 0.0){

            var errMsg = $('errorMessageMulti');
            if($defined(errMsg)){
	            errMsg.setStyle('display', 'block');

                errMsg.setHTML(getErrorMessage(exceedRiskTitle,exceedRiskContent));
	            //mInput.value = '0.0';
	            isValidateMulti = false;
	            return false;
            }
        }
    }

    if(multiRiskAllowed <= 0.0){
    	var errMsg = $('errorMessageMulti');
        if($defined(errMsg)){
            errMsg.setStyle('display', 'block');
            errMsg.setHTML(getErrorMessage(exceedRiskTitle,exceedRiskContent));
        }
        isValidateMulti = false;
        return false;
    }else if(parseFloat(mInput.value) >= (parseFloat(multiRiskAllowed) + 0.01)){
        var errMsg = $('errorMessageMulti');
        if($defined(errMsg)){

            errMsg.setStyle('display', 'block');
            errMsg.setHTML(getErrorMessage(stakeTooHighTitle,stakeTooHighContent + ''  + ((parseFloat(multiRiskAllowed)).toFixed(2)) +
                    ' <a href="#" class=\'betslip\' onclick="correctMultiStake(' + multiRiskAllowed + ')"/>' + nameOfClickHere + '</a>'));
        }
        isValidateMulti = false;
        return false;
    }else{
        if(! valiadteBalance(0, mInput.value)){
        	//did not show the Insufficient funds error for un-login user

            var errMsg = $('errorMessageMulti');
            if($defined(errMsg)){
                errMsg.setStyle('display', 'block');
                errMsg.setHTML(getErrorMessage(InsufficientfundsT,InsufficientfundsC));
            }
            isValidateMulti = false;
            //bonus section begin
            bonus.freeBet.isMultiBlanceEnough = false;
            //bonus section end
            return false;
        }else{
        	
            hideErrorMSG(-1, true);
            isValidateMulti = true;
            //bonus section begin
//            isMultiBlanceEnough = true;
//            if(!isBonusFundsEnough) {
//        		clearBonusErrorMsg();
//        	}
            //bonus section end
            return true;
        }
    }
   
}

function correctStake(outcomeId, stake){
	var outcomeInput = $('input' + outcomeId);
	if($defined(outcomeInput)){
		outcomeInput.value=(parseFloat(stake)).toFixed(2);
		calTheWin(outcomeId);
		validFreeBetInput(outcomeId);
	}
	
}

function correctMultiStake(stake){
    var multiInput = $('multiStake');
    if($defined(multiInput)){
        multiInput.value=(parseFloat(stake)).toFixed(2);
        if(validateMultiInput()){
          calMultiWin();
          validFreeBetInput('multiStake');
        }
    }    
}
function getErrorMessage(title,text){
	str= '<div id="InsufficientFunds" ><div id="Marker"></div>' +
			'<table class="ErrMsgTab"><tr><td class="LeftTD"><img src="'+staticServer+'/jsp/oddsmatrix/'+operName+'/style/WarningIcon.png" id="Warning">'+''
	          +'</td><td  class="RightTD"><div id="msgText"><strong>'+title.toUpperCase()+'</strong><br>'+text+'<div></tr></td></table></div>';
	return str;
}
function validateSingleInput(outcomeId, valueObj, selectionId){
	var divMessage = $('error' + outcomeId);	
	var value = valueObj;
	if(value == ''){
		value = '0.0';
	}
	
	if($defined(divMessage)){
		//allBets[outcomeId].riskObj.suggestionStake(allBets[outcomeId].odds))
		//Get the stake allowed for event
		var minStake=0.0;
		if('false' == isUserLoggedin){
			//If user did not logged in ,did not validate the input
            hideErrorMSG(outcomeId, false);
            return true;
		}else{
			//if the value input was 0, then make it validate
			if((parseFloat(value) < 0.0)||((parseFloat(value) == 0.0)&&(!bonus.freeBet.enabled))){
                hideErrorMSG(outcomeId, false);
                allBets[outcomeId].isValidate = true;
                return true;
			}

			//get the minimal stake allowed
			if(parseFloat(allBets[outcomeId].OutcomeRiskObj.suggestionStake(allBets[outcomeId].odds)) > parseFloat(allBets[outcomeId].UserRiskObj.suggestionStake(allBets[outcomeId].odds))){
                minStake = allBets[outcomeId].UserRiskObj.suggestionStake(allBets[outcomeId].odds);
	        }else{
	            minStake = allBets[outcomeId].OutcomeRiskObj.suggestionStake(allBets[outcomeId].odds);
	        }
		}

		if( (parseFloat(value) - parseFloat(minStake)) < 0.01){
			
			if(! valiadteBalance(outcomeId, value)){
				//did not show Insufficient funds error when user did not logged in
				divMessage.setStyle('display','block');
                divMessage.setHTML(getErrorMessage(InsufficientfundsT, InsufficientfundsC));
                allBets[outcomeId].isValidate = false;
                //bonus section begin
                allBets[outcomeId].isFundsEnough = false;
                
//                for(j in allBets){
//					alert('validateSingleInput3 isValidate(' + j + '):' + allBets[j].isValidate);
//					alert('validateSingleInput3 isFundsEnough(' + j + '):'+ allBets[j].isFundsEnough);
//				}
                //bonus section end
                return false;
			}else{
                hideErrorMSG(outcomeId, false);
	            allBets[outcomeId].isValidate = true;
	            //bonus section begin
	            allBets[outcomeId].isFundsEnough = true;
//	            if(!isBonusFundsEnough) {
//        			clearBonusErrorMsg();
//        		}
	            //bonus section end
			}
		}else{
			//parseFloat(allOutcomeRisks[outcomeId].suggestionStake(allBets[outcomeId].odds))
			divMessage.setStyle('display','block');
            if((parseFloat(minStake)) > 0.01){
            	var msg = errorMessage.split(".");
                 divMessage.setHTML(getErrorMessage(msg[0]+'!',//allBets[outcomeId].outcomename +'<br>'+
                    msg[1]  + ((parseFloat(minStake)).toFixed(2)) +
                    ' <a href="#" class=\'betslip\' onclick="correctStake(' + outcomeId + ', '
                    + minStake + ')"/>' + nameOfClickHere + '</a>' ));
            }else{
                divMessage.setHTML(getErrorMessage(exceedRiskTitle,exceedRiskContent));
            }
            allBets[outcomeId].isValidate = false;
            return false;
		}
		
		return true;
	}
}

function hideErrorMSG(outcomeId, hideMulti){

	if(outcomeId >= 0){
		for(i in allBets){
	        if(outcomeId == 0){
	            var divMessage1 = $('error' + allBets[i].outcomeid);
	            divMessage1.setText('');
	            divMessage1.setStyle('display','none');
	        }else {
	            if(allBets[i].outcomeid == outcomeId){
	                var divMessage1 = $('error' + allBets[i].outcomeid);
	                divMessage1.setText('');
	                divMessage1.setStyle('display','none');
	            }
	        }	        
	    }
	}

	if(hideMulti){
		var errMsgMul = $('errorMessageMulti');
	    if($defined(errMsgMul)){
	        errMsgMul.setStyle('display', 'none');
	    }
	}
}

function validateOddsChanged(callBackFunc){
	var ret = submitValidate('oddsChanged', ValidateOddsChangedCallback);
}

function validateMatchExpired(){	
	var ret = submitValidate('validateStartTime', ValidateMatchExpiredCallBack);	
}

function scrollEventHandler(){
	if(enableScroll){
		var element = $('BettingSlip');
        element.style.position = 'absolute';
        var top = window.srcollTop | document.documentElement.scrollTop;
        element.style.top = top + 'px';
	}
}

function inputSelectAll(inputName){
	var objInput=$(inputName);
	objInput.select();
}

function getMultipleStake(isUpdateInput, callBackFunc){
	//disable the multiple input box
    var multipleInput = $('multiStake');
    if($defined(multipleInput)){
        multipleInput.readOnly=true;
    }

    var strSingle='';

    var x = 0;
    for(i in allBets){
    	if(allBets[i].newOdds > 1.0){
    		strSingle = strSingle + allBets[i].eventId
                + ':' + allBets[i].outcomeid
                + ':' + allBets[i].newOdds
                + ',';
    	}else{
    		strSingle = strSingle + allBets[i].eventId
                + ':' + allBets[i].outcomeid
                + ':' + allBets[i].odds
                + ',';
    	}
    	x += 1;

    }

    if(x <= 1){
    	//getMultipleStakeCallback(100, isUpdateInput, null);
    	return;
    }

    if(strSingle.length > 0){
        strSingle = strSingle.substr(0, strSingle.length - 1);
    }

    var url = '/riskManagementAction.do';
    var params = 'multis=' + strSingle + '&action=multiStakeAllowed&stake=10000';

    var ret = '';
    var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response){
       	    //enable the multiple input box
		    var multipleInput = $('multiStake');
		    if($defined(multipleInput)){
		        multipleInput.readOnly=false;
		    }
       	    getMultipleStakeCallback(response, isUpdateInput, callBackFunc);
       },
       onFailure:function(response){
       	    //enable the multiple input box
            var multipleInput = $('multiStake');
            if($defined(multipleInput)){
                multipleInput.readOnly=false;
            }
            getMultipleStakeCallback('250.00', isUpdateInput, null);
       }});
    ajaxReq.send(url,params);
    ajaxReq=null;

    return ret;
}

function getMultipleStakeCallback(ret, isUpdateInput, callBackFunc){
    multiRiskAllowed = parseFloat(ret).toFixed(2);//alert('---'+multiRiskAllowed);

    if(isUpdateInput){
    	try{
	        var str=Cookie.get('multibetCookie');
	        if (str==false){return false;}
	        var bets=str.split('|');
	        mulStake=bets[0];
	        mulOdds=bets[1];
	        var mInput=$('multiStake');
	        mInput.value=mulStake;
	        validateMultiInput(mInput);;
	    }catch(exception){

	    }
    }
    if(null != callBackFunc){
    	return callBackFunc(ret);
    }
}

function validateMultipleValideCallback(ret){
	var arr = ret.split(',');
	var retAH = arr[0];
	var ret = arr[1];
    showMultipleError(false);
	//if more then 2 outcomes comeout from same
	//event ,then can't place bets
	if(ret != 'ok'){
		if(ret == 'Too much outcome'){
			showMultipleError(true);
		}

		var mCount=$('multiCount');
        var mAllStake=$('multiTotalStake');
        var mAllWin=$('multiTotelWin');
        var mInput = $('multiStake');

        mCount.setText('');
        mAllStake.setText('');
        mAllWin.setText('');
        mInput.value='0.00';
        hideMultiContent();

        mulStake=0.0;
        mulOdds=0.0;
        Cookie.remove('multibetCookie');
        isMultipleValidate=false;
        changeMultiples();
        return;
	}

	if(retAH != 'ok'){
		var arrAH = retAH.split('|');
		for(i=0; i <arrAH.length; i++){

            if(null != allBets[arrAH[i]]){
                allBets[arrAH[i]].includeAsMulti = true;
            }
		}
	}

	var count = 0;
	for(i in allBets){
		if(false == allBets[i].includeAsMulti){
			count += 1;
		}
	}

	if(count > 1){

		if(allCount <= 1){
            return;
        }
		showMultiContent();
        isMultipleValidate=true;
	}else{
		hideMultiContent();
	}
	changeMultiples();
	getMultipleStake(true, null);
	validateMultipleValideDone = true;
}

function getOddsType(odds, showTabs, callbackFunc){
	var url = '/validateUserBettinigs.do';
    var params = 'oriOdds=' + odds + '&action=oddsFormat&ttt=getOddsType';
    var ret = '';
    var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
        {
        	//alert(response);
        	if(showTabs!='') {
        		var showTabsArr = showTabs.split(',');
        		for(showTab in showTabsArr){
        			var multiDiv = $(showTabs);
	            	if($defined(multiDiv)){
	                	multiDiv.setText(response);
	            	}
        		}
        		mulOddsForUser = response;
        	}
        	if(null != callbackFunc){
        		var ret = callbackFunc(response);
        	}
        },
       onFailure:function(response){} });
    ajaxReq.send(url,params);
    ajaxReq=null;
}

function formatAllOdds(oddsType){
    var strOdds='';
    for(i in allBets){
   	    strOdds = strOdds + allBets[i].odds;
   	    strOdds = strOdds + ':';
   	    strOdds = strOdds + allBets[i].outcomeid;
   	    strOdds = strOdds + ',';
    }

    if(strOdds.length > 0){
        strOdds = strOdds.substr(0, strOdds.length - 1);
    }else{
    	return;
    }

    var url = '/validateUserBettinigs.do';
    var params = 'oddsType=' + oddsType + '&action=bettingOddsFormat' + '&oriOdds=' + strOdds 
    	+ "&multiOdds=" + mulOdds + '&ttt=formatAllOdds';

    var ret = '';
    var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
        {
            //alert(response);
            var allOddsOutcomeAllArr = response.split('~');
            var allOddsOutcomeArr = allOddsOutcomeAllArr[0].split(',');
            mulOddsForUser = allOddsOutcomeAllArr[1];
            
            var multiDiv = $('OddsNoDelete');
            if($defined(multiDiv)){
                multiDiv.setText(mulOddsForUser);
            }
                
            for(var i=0;i<allOddsOutcomeArr.length;i++){
            	var allOddsOutcome = allOddsOutcomeArr[i];
            	var oddsOutcomeArr = allOddsOutcome.split(':');
                var oddsDiv = $('Odds' + oddsOutcomeArr[1]);
                var oddsFormated = oddsOutcomeArr[0];
                allBets[oddsOutcomeArr[1]].formattedOdds = oddsFormated;
                if($defined(oddsDiv)){
                    oddsDiv.setText(oddsFormated);
                }
            }
            refreshFreeBetSec();
            //getOddsType(mulOdds, 'OddsNoDelete', multiOddsChangedCallback);
        },
       onFailure:function(response){
       } });
    ajaxReq.send(url,params);
    ajaxReq=null;
}

function validateMultipleValide(){
	//var ret = submitValidate('multipleValidate', validateMultipleValideCallback);
	var strSingle='';
	validateMultipleValideDone = false;
    for(i in allBets){
        strSingle = strSingle + allBets[i].outcomeid
            + ':' + allBets[i].odds
            + ':' + allBets[i].stake
            + ':' + allBets[i].eventId
            + ';';
    }
    if(strSingle.length > 0){
        strSingle = strSingle.substr(0, strSingle.length - 1);
    }


    var url = '/validateUserBettinigs.do';
    var params = 'singleBets=' + strSingle + '&action=multipleValidate&ttt=validateMultipleValide';
    if(mulOdds > 1.0){
        params = params + '&multiBets=' + mulOdds + '|' + mulStake;
    }
    var ret = '';
    var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response){validateMultipleValideCallback(response)},
       onFailure:function(response){} });
    ajaxReq.send(url,params);
    ajaxReq=null;

    return ret;
}

function validateOutcomeExists(eventId, outcomeid, odds, formattedOdds, title, outcomeName, stake, matchDate, participant, restrict, bettingType, tournamentName){
    var url = '/validateUserBettinigs.do';
    var params = 'action=outcomeExists&outcomeid=' + outcomeid + '&eventId=' + eventId + '&odds=' + odds + '&ttt=validateOutcomeExists';
    var ret = '';
    var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
            {
            	validateOutcomeExistsCallback(response, eventId, outcomeid, odds, formattedOdds, title, outcomeName, stake, matchDate, participant, restrict, bettingType, tournamentName)
            },
            onFail:function(response)
            {
            	validateOutcomeExistsCallbackFail(response);
            }});
    ajaxReq.send(url,params);
    ajaxReq=null;

    return ret;
}

function validateOutcomeExistsCallback(ret, eventId, outcomeid, odds, formattedOdds, title, outcomeName, stake, matchDate, participant, restrict, bettingType, tournamentName){
    if((bettingType.indexOf('Handicap') > -1) || (bettingType.indexOf(nameOfOver) > -1 ) || (bettingType.indexOf('handicap') > -1)){
        var url = '/validateUserBettinigs.do';
        var params = 'action=getHandicap&outcomeId=' + outcomeid + '&ttt=validateOutcomeExistsCallback';

	    var ret = '';
	    var ajaxReq=new XHR(
	       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
	            {
	            	var handiCap = response;
	            	var offer = new BettingOffer(eventId, outcomeid, odds, formattedOdds, title, outcomeName, stake, matchDate, participant, restrict, bettingType, handiCap, tournamentName, stake==0.0);
	            }
	       }
	    );
	    ajaxReq.send(url,params);
	    ajaxReq=null;
    }else{
        var offer = new BettingOffer(eventId, outcomeid, odds, formattedOdds, title, outcomeName, stake, matchDate, participant, restrict, bettingType, '', tournamentName, stake==0.0);
    }

    if(stake > 0.0 && isUserLoggedin){
        var url ='/riskManagementAction.do';
        var params = 'action=getUserRiskAllowed' + '&eventId=' + eventId + '&outcomeId=' + outcomeid;
        var ajaxReq=new XHR(
           {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
                {
                   var newRisk = parseFloat(response).toFixed(2);

                   allBets[outcomeid].UserRiskObj.reminderRisk = newRisk;
                    var inputEl = $('input' + outcomeid);
                    if(validateSingleInput(outcomeid, inputEl.value, 0)){
                        calAllStakeAndWin();
                    }
                }.bind(this)
            });
        ajaxReq.send(url,params);
        ajaxReq=null;

        params = 'action=getMatchRiskAllowed' + '&outcomeId=' + outcomeid + '&eventId=' + eventId;
        ajaxReq=new XHR(
           {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
                {
                   var newRisk = parseFloat(response).toFixed(2);

                   allBets[outcomeid].OutcomeRiskObj.reminderRisk = newRisk;
                    var inputEl = $('input' + outcomeid);
                    if(validateSingleInput(outcomeid, inputEl.value, 0)){
                        calAllStakeAndWin();
                    }
                }.bind(this)
            }
        );
        ajaxReq.send(url,params);
        ajaxReq=null;
    }
}

function validateOutcomeExistsCallbackFail(ret){
	//alert(ret);
}

function setHandicap(divName, outcomeid){
	var div = $(divName);
	if($defined(div)){
		var url = '/validateUserBettinigs.do';
	    var params = 'action=getHandicap&outcomeid=' + outcomeid + '&ttt=setHandicap';

	    var ret = '';
	    var ajaxReq=new XHR(
	       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
	            {
                    div.setText(response);
	            }
	        }
	    );
	    ajaxReq.send(url,params);
	    ajaxReq=null;
	}
}

function getOutcomeStakeLimit(eventId, outcomeid, odds, betOffer){
	var url = '/validateUserBettinigs.do';
    var params = 'action=stakeLimit&outcomeid=' + outcomeid + '&eventId=' + eventId + '&odds=' + odds + '&ttt=getOutcomeStakeLimit';

    var ret = '';
    var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
            {
                if($defined(allBets[outcomeid])){
                	betOffer.setStakeLimit((parseFloat(response)).toFixed(2));
                	allBets[outcomeid].restrict = (parseFloat(response)).toFixed(2);
                }
            }
        }
    );
    ajaxReq.send(url,params);
    ajaxReq=null;

    return ret;
}

/*This class is used to keep betting offer*/

var BettingOffer = new Class({
	initialize: function(eventId, outcomeid, odds, formattedOdds, title, outcomeName, stake, matchDate, participant, restrict, bettingType, handiCap, tournamentName, loadRisk){

	    if($defined(allBets[outcomeid])){
	        return;
	    }

        
        if(!canPlaceBettingNow){
        	return;
        }
                
        showCurrentBalance();
        
        if(null == multiRiskObj){
        	//multiRiskObj = new MultipleRisk();
        }
        $('singleDiv').style.display="block";
        this.eventId = eventId;
	    this.outcomeid = outcomeid;
	    this.odds = odds;
	    this.formattedOdds = formattedOdds;
	    this.title = title;
	    this.bandId = 'band' + outcomeid;
	    this.closeImageId = 'close' + outcomeid;
	    this.outcomeName = outcomeName;
	    this.date = matchDate;
	    this.bettingType=bettingType;
	    this.participant = participant;
	    this.tournamentName = tournamentName;
	    //Get ride of the parameter from over/under participant name
        if(this.bettingType.indexOf(nameOfOver) > -1){
            var tempParticiArr = participant.split(' ');
            this.participant = "";
            for(var i=0; i<tempParticiArr.length - 1;i++){
              this.participant += tempParticiArr[i];    
              this.participant += " ";
            }
        } 
	    this.restrict = restrict;
	    this.isValidate = true;
	    var desktop = $('BettingSlip');
	    var singleTitle = $('singlesTitle');		
		
        if(singleTitle){
        	var betToSave={
        		'eventId':this.eventId,
	            'outcomeid':this.outcomeid,
	            'odds':this.odds,
	            'formattedOdds':this.formattedOdds,
	            'outcomename':this.outcomeName,
	            'bettingtype':this.bettingType,
	            'stake':stake,
	            'title':this.title,
	            'bandid':this.bandId,
	            'date':this.date,
	            'participant':this.participant,
	            'restrict':this.restrict,
	            'selectioncount':allCount,
	            'scopeName':'Full Time Result',
	            'init':false,
	            'newOdds':0.0,
	            'newStake':0.0,
	            'newFormatedOdds':'',
	            'expired':'false',
	            'includeAsMulti':false,
	            'handiCap':handiCap,
	            'isValidate':true,
	            'tournamentName':tournamentName
	        };

	        var replacedExistOutcome = 0;
	        for(i in allBets){
	        	if(allBets[i].eventId == this.eventId){
	        		replacedExistOutcome = allBets[i].outcomeid;
	        		allBets[i]=null;
	        		delete(allBets[i]);
	        		if((bonus.freeBet.isInited) && $defined(bonus.freeBet.freeBetsCtrls)&&(bonus.freeBet.freeBetsCtrls!=null)){
	        			if($defined(bonus.freeBet.freeBetsCtrls[i])) {
	        				delete(bonus.freeBet.freeBetsCtrls[i]);
	        			}
	        		}
	        	}
	        }


	        //read the outcome risks
	        /*var outcomeRiskObj = new OutcomeRisk(this.outcomeid, this.eventId);
            if(outcomeRiskObj.suggestionStake(this.odds) <0.1){
                alert(this.outcomeName + ' can\'t access any more single bets!');
            }

            if(null == allOutcomeRisks[this.outcomeid]){
                allOutcomeRisks[this.outcomeid] = outcomeRiskObj;
            } */

	        if(replacedExistOutcome == 0){
	           allCount += 1;
	        }

	        if(allCount > 1){
                //
                showMultiContent();

            }else{
            	hideMultiContent();
            }

            if(stake > 0){
                betToSave.init=true;
            }

            var userRiskObj = new UserEventRisk(this.eventId, this.outcomeid);
            var outcomeRiskObj = new OutcomeRisk(this.outcomeid, this.eventId);

            if(loadRisk){
            	userRiskObj.loadTheRisks();
            	outcomeRiskObj.loadTheRisks();
            }

            betToSave.UserRiskObj = userRiskObj;
            betToSave.OutcomeRiskObj = outcomeRiskObj;

	        allBets[this.outcomeid]=betToSave;

            //multiRiskObj.addNewBet(this.eventId, this.outcomeid, this.odds);
	        //getOutcomeStakeLimit(eventId, outcomeid, odds,this);

	        var inputBandTitle;
	        if(replacedExistOutcome > 0){
	        	inputBandTitle = $('band' + replacedExistOutcome);
	        	inputBandTitle.setProperty('id', this.bandId);

	        }else{
	        	inputBandTitle = new Element('div', {
                    'class': 'betslipBand',
                    'id': this.bandId
                }).injectBefore(singleTitle);
	        }


		    var strWinNow= '';
		    if(parseFloat(stake) > 0.0){
		        strWinNow = (parseFloat(stake) * parseFloat(odds)).toFixed(2);
		    }
		    stake = parseFloat(stake).toFixed(2);
		    //var inputBandTable = new Element('table');
            var objShowBettingSummary = $('summaryTitle');
            objShowBettingSummary.setStyle('display','block');
			//Beginning : Unifies the height of sub-elements in Headline element.
			var highest=-1;
			
			var divsOfHL=$('Headline').getChildren();
        	divsOfHL.each(function(e){
        		var hi=e.clientHeight;
        		if (highest <= hi) {
					highest = hi;
				}	
        	});
			var lowest=highest;
			divsOfHL.each(function(e){
        		var hi=e.clientHeight;
        		if (lowest > hi) {
					lowest = hi;
				}	
        	});
			
			var navVer=navigator.appVersion;
			if(navVer.contains('MSIE 7.0') || navVer.contains('MSIE 8.0')){
				//divsOfHL.each(function(e){
				//	e.setStyle('margin-bottom',highest-lowest+'px');
				//});
				var topVal=highest-lowest;
				if(topVal>0)
					$('Bets').setStyle('margin-top',topVal+'px');
			}
			
			divsOfHL.each(function(e){
				e.setStyle('height',highest+'px');
			});
			//End : Unifies the height of sub-elements in Headline element.
			
            //bonus section begin
            var bonusValidateStr = "if(validFreeBetInput('" + this.outcomeid + "')) {}";
            var sHtmlInput = '<div id="Bet">'
            	+'<div id="lblFreeBetInfo' + this.outcomeid + '" ></div>'
            	+'<div id="lblInfo' + this.outcomeid + '" style="display:none;"></div>'
                +'<div id="Stake">' + nameOfStake + '</div>'
                +'<input type="text" name="stake" class="StakeTextbox" id="'+ 'input' + this.outcomeid
                + '" value="' + stake + '" onkeyup="calTheWin(' + this.outcomeid
                + ');' + bonusValidateStr + '" onblur="validateStatke(' + this.outcomeid + ',this);" onClick="inputSelectAll(\'input' + this.outcomeid
                +'\')" >' + '<div id="ToWin"><div id="result'+ this.outcomeid + '">&nbsp;' + strWinNow + '</div></div></div>'
                +'<div id="error' + this.outcomeid+ '" style="display:none">' +
                		'</div>';
            //bonus section end
            //var handicapDiv = "&nbsp;<div id='handicapDiv" + this.outcomeid + "' height='15'></div>";
		    var sHtml ='';
		    if (allCount > 1){
		    	sHtml = '<div id="BetDevider"></div>';
		    }
            if (isQuickBet) sHtml+=  '<div id="stake" style="width:200px;">'+title+'</div>';
		    var fullBettingType = '';
		    if(this.bettingType.indexOf(",") > 1){
		    	var arrTmp=this.bettingType.split(',');
		    	fullBettingType = arrTmp[0] + '&nbsp;' + handiCap + ',&nbsp;' + arrTmp[1];
		    }else{
		    	fullBettingType = this.bettingType + '&nbsp;' + handiCap;
		    }

            var tmpTournamentOutput = '';
            if(!(tournamentName == this.title)){
            	tmpTournamentOutput = tournamentName + '<br>';
            }
            
            var tipsParticipant = this.participant;

            tipsParticipant = tipsParticipant.replace(/\"/g, '\'');

		     sHtml += '<div id="Bet">'
                 + '<div id=DeleteIcon onclick="closeBand(\''
                + this.bandId + '\',\'' + this.outcomeid + '\')" >' + '</div>'
                +'<div id="Odds"><div id="Odds' + this.outcomeid + '">' + this.formattedOdds + '</div></div>' 
                + '<div id="InfoIcon"></div>' 
                + '<div id="Match">' +
                		'<table cellpadding=0 cellspacing=0><td colspan="3" title=" ' + nameOfSelections 
                + allCount +"&nbsp;&nbsp;--&nbsp;&nbsp;"+ this.date + ' :: <b>' + tmpTournamentOutput + this.title + '</b><br>' + fullBettingType + '<br>'
                + tipsParticipant
                 + '<br>'
                + '" id="bandTips' + this.bandId + '">'
                //+'<a onclick="console.trace();" href="/jsp/oddsmatrix/backoffice/debugOdds.jsp?eventId='+this.eventId+'&outcomeId='+this.outcomeid+'">*</a>'
                 + this.participant + '</td>'
		        + '<td></td></tr>'
		        + '<tr><td colspan="4" id="inputBand' + outcomeid + '">'
		        + '</td></tr></table></div></div>'+ sHtmlInput;
		        
		    //alert(sHtml);
		    inputBandTitle.setHTML(sHtml);
		    inputBand=$("inputBand" + outcomeid );

            changeMultiples();
            calMultiWin();
			validateMultipleValideDone = true;
		    validateMultipleValide();

            hideemptyInfoDiv();
            var Tips4 = new Tips($('bandTips' + this.bandId ), {
				showDelay: 100,
				hideDelay: 400,
				fixed: true,
                className: 'tool'
            });

            allBets[this.outcomeid].bandTips=Tips4;
			

        }
        
        calSingleCount();
		//bonus section begin
		showPromoOffer('all');
		//bonus section end
	},
	setStakeLimit:function(limit){
		this.restrict = limit;
	}
})

function addNewBet(eventId, outcomeid, odds, formattedValue, eventName, outcomeName, stake, matchDate, participant, restrict, bettingType, tournamentName){
   if(isOddsUpdated == 'false' || isUserValidate == 'false'){
   	    if(isUserValidate == 'false'){
            alert(validateUserMessage);
        }else{
            alert('The server is being restarted and is expected to be back up shortly. Thanks for your patience.');
        }
        
        if(allBets != null){
            clearAll();
            
        }
        return;
    }
    
    if(isSaveBettingNow){
    	return;
    }
    validateOutcomeExists(eventId, outcomeid, odds, formattedValue, eventName, outcomeName, stake, matchDate, participant, restrict, bettingType, tournamentName);
    //var offer = new BettingOffer(outcomeid, odds, eventName, outcomeName, stake, matchDate, participant, restrict, bettingType);
}

var UserEventRisk = new Class({
	 initialize: function(eventId, outcomeId){
	 	this.eventId = eventId;
	 	this.outcomeId = outcomeId;
	 	this.reminderRisk = 100;
    },
    calculateRemineRisk : function(stake, odds){
        var nowRisk = stake * (odds -1);
        this.reminderRisk = this.reminderRisk - nowRisk;
        return this.reminderRisk;
    },
    suggestionStake : function(odds){
        var allowedStake = this.reminderRisk / (odds - 1);
 
        var userId=userIdFH;
        if(userId == '15263'){
            if(parseFloat(allowedStake).toFixed(2) > 10)
               return 10;
        }

        if(parseFloat(allowedStake) < 0.1){
            allowedStake = allowedStake * 100;
            allowedStake = allowedStake - 0.51;
            allowedStake = allowedStake / 100;
        }

        return parseFloat(allowedStake).toFixed(2);
    },
    loadTheRisks:function(){
        var url ='/riskManagementAction.do';
        var params = 'action=getUserRiskAllowed' + '&eventId=' + this.eventId + '&outcomeId=' + this.outcomeId;
        var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
            {
               this.reminderRisk = parseFloat(response).toFixed(2);
            }.bind(this)
        });
        ajaxReq.send(url,params);
        ajaxReq=null;
    },
    reLoadTheRisks:function(currentEventId, currentOutcomeId){
        var url ='/riskManagementAction.do';
        var params = 'action=getUserRiskAllowed' + '&eventId=' + currentEventId + '&outcomeId=' + currentOutcomeId;
        var ajaxReq=new XHR(
       {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
            {
               this.reminderRisk = parseFloat(response).toFixed(2);
            }.bind(this)
        });
        ajaxReq.send(url,params);
        ajaxReq=null;
    }
})

var OutcomeRisk = new Class({
	initialize: function(outcomeId, eventId){
		this.outcomeId = outcomeId;
		this.eventId = eventId;
		this.reminderRisk = 1000;

	},
    calculateRemineRisk : function(stake, odds){
        var nowRisk = stake * (odds -1);
        this.reminderRisk = this.reminderRisk - nowRisk;
        return this.reminderRisk;
    },
    suggestionStake : function(odds){
        var allowedStake = this.reminderRisk / (odds - 1);
        return parseFloat(allowedStake).toFixed(2);
    },
    loadTheRisks:function(){
    	var url ='/riskManagementAction.do';
        var params = 'action=getMatchRiskAllowed' + '&outcomeId=' + this.outcomeId + '&eventId=' + this.eventId;
        var ajaxReq=new XHR(
           {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
                {
                    this.reminderRisk = parseFloat(response).toFixed(2);
                }.bind(this)
            }
        );
        ajaxReq.send(url,params);
        ajaxReq=null;
    },
    reLoadTheRisks:function(currentEventId, currentOutcomeId){
        var url ='/riskManagementAction.do';
        var params = 'action=getMatchRiskAllowed' + '&outcomeId=' + currentOutcomeId + '&eventId=' + currentEventId;
        var ajaxReq=new XHR(
           {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
                {
                    this.reminderRisk = parseFloat(response).toFixed(2);
                }.bind(this)
            }
        );
        ajaxReq.send(url,params);
        ajaxReq=null;
    }
})

var MultipleRisk = new Class({
	//Implements: [Options, Events],
	options: {
		stakeAllowed : 0.0,
		allMultiBets : new Object()
	},
	initialize: function(options){
		this.setOptions(options);
	},
	addNewBet:function(eventId, outcomeId, odds){
		var betObj = new Object();
		betObj.eventId = eventId;
		betObj.outcomeId = outcomeId;
		betObj.odds = odds;
		if(null == this.allMultiBets){
			this.allMultiBets = new Object();
		}
		this.allMultiBets[outcomeId] = betObj;
		//this.calculateRisk();
	}.bind(this),
	removeBet:function(outcomeId){
		this.allMultiBets[outcomeId] = null;
		delete(this.allMultiBets[outcomeId]);
		this.calculateRisk();
	}.bind(this),
	calculateRisk:function(){
        var url ='/riskManagementAction.do';
        var multis = '';
        for(i in this.allMultiBets){
            multis += this.allMultiBets[i].eventId;
            multis += '|';
            multis += this.allMultiBets[i].outcomeId;
            multis += '|';
            multis += this.allMultiBets[i].odds;
            multis += ',';
        }
        if(multis.length > 0){
            multis = multis.substr(0, multis.length - 1);
        }
        var params = 'action=multiRiskAllowedUser' + '&multis=' + multis;
        var ajaxReq=new XHR(
           {'method': 'post','autoCancel': 'false' ,async:true,onSuccess: function(response)
                {
                    this.stakeAllowed = parseFloat(response).toFixed(2);
                }.bind(this)
            }
        );
        ajaxReq.send(url,params);
        ajaxReq=null;
	}.bind(this)
})

function getArraySize(objArray){
	var count = 0;
	for(i in objArray){
		count += 1;
	}
	return count;
}

    function addNewBet(eventId, outcomeid, odds, formattedValue, eventName, outcomeName, stake, matchDate, participant, restrict, bettingType, tournamentName){
       if(isOddsUpdated == 'false' || isUserValidate == 'false'){
       	    if(isUserValidate == 'false'){
       	    	alert(validateUserMessage);
       	    }else{
                alert('The server is being restarted and is expected to be back up shortly. Thanks for your patience.');
            }
       	    
            if(allBets != null){
                clearAll();
                
            }
            return;
        }
        if(isSaveBettingNow){
            return;
        }
        
        if(slipStatus == 'done'){
        	closeAndReturn();
        }
        validateOutcomeExists(eventId, outcomeid, odds, formattedValue, eventName, outcomeName, stake, matchDate, participant, restrict, bettingType, tournamentName);
        //var offer = new BettingOffer(outcomeid, odds, eventName, outcomeName, stake, matchDate, participant, restrict, bettingType);
    }

    function printoutResult(){
        showPrintoutSummary();
    }

/**--start betslip scroll function**/
function getXY(Obj) {
	var sumTop = 0, sumLeft = 0;
	while(Obj != document.body){
		sumLeft += Obj.offsetLeft;
		sumTop += Obj.offsetTop;
		Obj = Obj.offsetParent;
	} 
	return {x:sumLeft, y:sumTop};
}

var needBsScroll = false;
window.onresize = resizeBsDiv;
window.onscroll = resizeBsDiv;
var lastTopPix=-1;
var bottomLineObj;
function resizeBsDiv() {
	if (needBsScroll) {
		BsObj.style.position= 'absolute';
		var topPix=parseInt(document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset,10);
		if (!topPix)
			topPix=0;
		if(BsObj.offsetHeight<maxHeight) {
			//when it's just loaded or over the top line, toppix is set as the top line
			if (lastTopPix==-1)
				lastTopPix = topPix;
			if (topPix<originalTop)
				topPix=originalTop;
				
			if ($defined(bottomLineObj)) {
			//when it's not beyond the bottom line, it scrolls
				var bottomLineXY = getXY(bottomLineObj);
				var bottomLineY = bottomLineXY.y+bottomLineObj.offsetHeight;
				var bottomY = topPix+BsObj.offsetHeight;
				if (bottomY<bottomLineY) {
					BsObj.style.top = topPix+'px';
					BsContainerObjXY = getXY(BsContainerObj);
					BsObj.style.left= BsContainerObjXY.x+'px';
				}
			} else {
				BsObj.style.top = topPix+'px';
				BsContainerObjXY = getXY(BsContainerObj);
				BsObj.style.left= BsContainerObjXY.x+'px';				
			}
		} else {
			//when scrolling down or over the top line, set top same as top line 
			if (topPix>lastTopPix || topPix<originalTop) 
				topPix = originalTop;
			BsObj.style.top = topPix+'px';
			BsContainerObjXY = getXY(BsContainerObj);
			BsObj.style.left= BsContainerObjXY.x+'px';
		}
		lastTopPix=topPix;
	}
}
function resizeBsDivForIframe() {
	if (needBsScroll) {
		var topPix=parseInt(parent.document.body.scrollTop || parent.document.documentElement.scrollTop || parent.window.pageYOffset,10);
		if (!topPix || topPix < parentHeaderH)
			topPix=0;
			
		topPix = topPix - parentHeaderH;
		if (topPix<0)
			topPix = 0;
		if(BsObj.offsetHeight<maxHeight) {
			//when it's just loaded or over the top line, toppix is set as the top line
			if (lastTopPix==-1)
				lastTopPix = topPix;
			if (topPix<originalTop)
				topPix=originalTop;
				
			if ($defined(bottomLineObj)) {
			//when it's not beyond the bottom line, it scrolls
				var bottomLineXY = getXY(bottomLineObj);
				var bottomLineY = bottomLineXY.y+bottomLineObj.offsetHeight;
				var bottomY = topPix+BsObj.offsetHeight;
				if (bottomY<bottomLineY) {
					BsObj.style.top = topPix+'px';
					BsContainerObjXY = getXY(BsContainerObj);
					BsObj.style.left= BsContainerObjXY.x+'px';
				}
			} else {
				BsObj.style.top = topPix+'px';
				BsContainerObjXY = getXY(BsContainerObj);
				BsObj.style.left= BsContainerObjXY.x+'px';				
			}
		} else {
			//when scrolling down or over the top line, set top same as top line 
			if (topPix>lastTopPix || topPix<originalTop) 
				topPix = originalTop;
			BsObj.style.top = topPix+'px';
			BsContainerObjXY = getXY(BsContainerObj);
			BsObj.style.left= BsContainerObjXY.x+'px';
		}
		lastTopPix=topPix;
	}
}
/**--end betslip scroll function**/


function NumberFormat(num, inputDecimal) {
    this.VERSION = 'Number Format v1.5.4';
    this.COMMA = ',';
    this.PERIOD = '.';
    this.DASH = '-';
    this.LEFT_PAREN = '(';
    this.RIGHT_PAREN = ')';
    this.LEFT_OUTSIDE = 0;
    this.LEFT_INSIDE = 1;
    this.RIGHT_INSIDE = 2;
    this.RIGHT_OUTSIDE = 3;
    this.LEFT_DASH = 0;
    this.RIGHT_DASH = 1;
    this.PARENTHESIS = 2;
    this.NO_ROUNDING = -1
    this.num;
    this.numOriginal;
    this.hasSeparators = false;
    this.separatorValue;
    this.inputDecimalValue;
    this.decimalValue;
    this.negativeFormat;
    this.negativeRed;
    this.hasCurrency;
    this.currencyPosition;
    this.currencyValue;
    this.places;
    this.roundToPlaces;
    this.truncate;
    this.setNumber = setNumberNF;
    this.toUnformatted = toUnformattedNF;
    this.setInputDecimal = setInputDecimalNF;
    this.setSeparators = setSeparatorsNF;
    this.setCommas = setCommasNF;
    this.setNegativeFormat = setNegativeFormatNF;
    this.setNegativeRed = setNegativeRedNF;
    this.setCurrency = setCurrencyNF;
    this.setCurrencyPrefix = setCurrencyPrefixNF;
    this.setCurrencyValue = setCurrencyValueNF;
    this.setCurrencyPosition = setCurrencyPositionNF;
    this.setPlaces = setPlacesNF;
    this.toFormatted = toFormattedNF;
    this.toPercentage = toPercentageNF;
    this.getOriginal = getOriginalNF;
    this.moveDecimalRight = moveDecimalRightNF;
    this.moveDecimalLeft = moveDecimalLeftNF;
    this.getRounded = getRoundedNF;
    this.preserveZeros = preserveZerosNF;
    this.justNumber = justNumberNF;
    this.expandExponential = expandExponentialNF;
    this.getZeros = getZerosNF;
    this.moveDecimalAsString = moveDecimalAsStringNF;
    this.moveDecimal = moveDecimalNF;
    this.addSeparators = addSeparatorsNF;
    if (inputDecimal == null) {
        this.setNumber(num, this.PERIOD);
    } else {
        this.setNumber(num, inputDecimal);
    }
    this.setCommas(true);
    this.setNegativeFormat(this.LEFT_DASH);
    this.setNegativeRed(false);
    this.setCurrency(false);
    this.setCurrencyPrefix('$');
    this.setPlaces(2);
}
function setInputDecimalNF(val) {
    this.inputDecimalValue = val;
}
function setNumberNF(num, inputDecimal) {
    if (inputDecimal != null) {
        this.setInputDecimal(inputDecimal);
    }
    this.numOriginal = num;
    this.num = this.justNumber(num);
}
function toUnformattedNF() {
    return (this.num);
}
function getOriginalNF() {
    return (this.numOriginal);
}
function setNegativeFormatNF(format) {
    this.negativeFormat = format;
}
function setNegativeRedNF(isRed) {
    this.negativeRed = isRed;
}
function setSeparatorsNF(isC, separator, decimal) {
    this.hasSeparators = isC;
    if (separator == null) separator = this.COMMA;
    if (decimal == null) decimal = this.PERIOD;
    if (separator == decimal) {
        this.decimalValue = (decimal == this.PERIOD) ? this.COMMA : this.PERIOD;
    } else {
        this.decimalValue = decimal;
    }
    this.separatorValue = separator;
}
function setCommasNF(isC) {
    this.setSeparators(isC, this.COMMA, this.PERIOD);
}
function setCurrencyNF(isC) {
    this.hasCurrency = isC;
}
function setCurrencyValueNF(val) {
    this.currencyValue = val;
}
function setCurrencyPrefixNF(cp) {
    this.setCurrencyValue(cp);
    this.setCurrencyPosition(this.LEFT_OUTSIDE);
}
function setCurrencyPositionNF(cp) {
    this.currencyPosition = cp
}
function setPlacesNF(p, tr) {
    this.roundToPlaces = !(p == this.NO_ROUNDING);
    this.truncate = (tr != null && tr);
    this.places = (p < 0) ? 0 : p;
}
function addSeparatorsNF(nStr, inD, outD, sep) {
    nStr += '';
    var dpos = nStr.indexOf(inD);
    var nStrEnd = '';
    if (dpos != -1) {
        nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
        nStr = nStr.substring(0, dpos);
    }
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(nStr)) {
        nStr = nStr.replace(rgx, '$1' + sep + '$2');
    }
    return nStr + nStrEnd;
}
function toFormattedNF() {
    var pos;
    var nNum = this.num;
    var nStr;
    var splitString = new Array(2);
    if (this.roundToPlaces) {
        nNum = this.getRounded(nNum);
        nStr = this.preserveZeros(Math.abs(nNum));
    } else {
        nStr = this.expandExponential(Math.abs(nNum));
    }
    if (this.hasSeparators) {
        nStr = this.addSeparators(nStr, this.PERIOD, this.decimalValue, this.separatorValue);
    } else {
        nStr = nStr.replace(new RegExp('\\' + this.PERIOD), this.decimalValue);
    }
    var c0 = '';
    var n0 = '';
    var c1 = '';
    var n1 = '';
    var n2 = '';
    var c2 = '';
    var n3 = '';
    var c3 = '';
    var negSignL = (this.negativeFormat == this.PARENTHESIS) ? this.LEFT_PAREN : this.DASH;
    var negSignR = (this.negativeFormat == this.PARENTHESIS) ? this.RIGHT_PAREN : this.DASH;
    if (this.currencyPosition == this.LEFT_OUTSIDE) {
        if (nNum < 0) {
            if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n1 = negSignL;
            if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n2 = negSignR;
        }
        if (this.hasCurrency) c0 = this.currencyValue;
    } else if (this.currencyPosition == this.LEFT_INSIDE) {
        if (nNum < 0) {
            if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n0 = negSignL;
            if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n3 = negSignR;
        }
        if (this.hasCurrency) c1 = this.currencyValue;
    }
    else if (this.currencyPosition == this.RIGHT_INSIDE) {
        if (nNum < 0) {
            if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n0 = negSignL;
            if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n3 = negSignR;
        }
        if (this.hasCurrency) c2 = this.currencyValue;
    }
    else if (this.currencyPosition == this.RIGHT_OUTSIDE) {
        if (nNum < 0) {
            if (this.negativeFormat == this.LEFT_DASH || this.negativeFormat == this.PARENTHESIS) n1 = negSignL;
            if (this.negativeFormat == this.RIGHT_DASH || this.negativeFormat == this.PARENTHESIS) n2 = negSignR;
        }
        if (this.hasCurrency) c3 = this.currencyValue;
    }
    nStr = c0 + n0 + c1 + n1 + nStr + n2 + c2 + n3 + c3;
    if (this.negativeRed && nNum < 0) {
        nStr = '<font color="red">' + nStr + '</font>';
    }
    return (nStr);
}
function toPercentageNF() {
    nNum = this.num * 100;
    nNum = this.getRounded(nNum);
    return nNum + '%';
}
function getZerosNF(places) {
    var extraZ = '';
    var i;
    for (i = 0; i < places; i++) {
        extraZ += '0';
    }
    return extraZ;
}
function expandExponentialNF(origVal) {
    if (isNaN(origVal)) return origVal;
    var newVal = parseFloat(origVal) + '';
    var eLoc = newVal.toLowerCase().indexOf('e');
    if (eLoc != -1) {
        var plusLoc = newVal.toLowerCase().indexOf('+');
        var negLoc = newVal.toLowerCase().indexOf('-', eLoc);
        var justNumber = newVal.substring(0, eLoc);
        if (negLoc != -1) {
            var places = newVal.substring(negLoc + 1, newVal.length);
            justNumber = this.moveDecimalAsString(justNumber, true, parseInt(places));
        } else { if (plusLoc == -1) plusLoc = eLoc;
            var places = newVal.substring(plusLoc + 1, newVal.length);
            justNumber = this.moveDecimalAsString(justNumber, false, parseInt(places));
        }
        newVal = justNumber;
    }
    return newVal;
}
function moveDecimalRightNF(val, places) {
    var newVal = '';
    if (places == null) {
        newVal = this.moveDecimal(val, false);
    } else {
        newVal = this.moveDecimal(val, false, places);
    }
    return newVal;
}
function moveDecimalLeftNF(val, places) {
    var newVal = '';
    if (places == null) {
        newVal = this.moveDecimal(val, true);
    } else {
        newVal = this.moveDecimal(val, true, places);
    }
    return newVal;
}
function moveDecimalAsStringNF(val, left, places) {
    var spaces = (arguments.length < 3) ? this.places : places;
    if (spaces <= 0) return val;
    var newVal = val + '';
    var extraZ = this.getZeros(spaces);
    var re1 = new RegExp('([0-9.]+)');
    if (left) {
        newVal = newVal.replace(re1, extraZ + '$1');
        var re2 = new RegExp('(-?)([0-9]*)([0-9]{' + spaces + '})(\\.?)');
        newVal = newVal.replace(re2, '$1$2.$3');
    } else {
        var reArray = re1.exec(newVal);
        if (reArray != null) {
            newVal = newVal.substring(0, reArray.index) + reArray[1] + extraZ + newVal.substring(reArray.index + reArray[0].length);
        }
        var re2 = new RegExp('(-?)([0-9]*)(\\.?)([0-9]{' + spaces + '})');
        newVal = newVal.replace(re2, '$1$2$4.');
    }
    newVal = newVal.replace(/\.$/, '');
    return newVal;
}
function moveDecimalNF(val, left, places) {
    var newVal = '';
    if (places == null) {
        newVal = this.moveDecimalAsString(val, left);
    } else {
        newVal = this.moveDecimalAsString(val, left, places);
    }
    return parseFloat(newVal);
}
function getRoundedNF(val) {
    val = this.moveDecimalRight(val);
    if (this.truncate) {
        val = val >= 0 ? Math.floor(val) : Math.ceil(val);
    } else {
        val = Math.round(val);
    }
    val = this.moveDecimalLeft(val);
    return val;
}
function preserveZerosNF(val) {
    var i;
    val = this.expandExponential(val);
    if (this.places <= 0) return val;
    var decimalPos = val.indexOf('.');
    if (decimalPos == -1) {
        val += '.';
        for (i = 0; i < this.places; i++) {
            val += '0';
        }
    } else {
        var actualDecimals = (val.length - 1) - decimalPos;
        var difference = this.places - actualDecimals;
        for (i = 0; i < difference; i++) {
            val += '0';
        }
    }
    return val;
}
function justNumberNF(val) {
    newVal = val + '';
    var isPercentage = false;
    if (newVal.indexOf('%') != -1) {
        newVal = newVal.replace(/\%/g, '');
        isPercentage = true;
    }
    var re = new RegExp('[^\\' + this.inputDecimalValue + '\\d\\-\\+\\(\\)eE]', 'g');
    newVal = newVal.replace(re, '');
    var tempRe = new RegExp('[' + this.inputDecimalValue + ']', 'g');
    var treArray = tempRe.exec(newVal);
    if (treArray != null) {
        var tempRight = newVal.substring(treArray.index + treArray[0].length);
        newVal = newVal.substring(0, treArray.index) + this.PERIOD + tempRight.replace(tempRe, '');
    }
    if (newVal.charAt(newVal.length - 1) == this.DASH) {
        newVal = newVal.substring(0, newVal.length - 1);
        newVal = '-' + newVal;
    }
    else if (newVal.charAt(0) == this.LEFT_PAREN && newVal.charAt(newVal.length - 1) == this.RIGHT_PAREN) {
        newVal = newVal.substring(1, newVal.length - 1);
        newVal = '-' + newVal;
    }
    newVal = parseFloat(newVal);
    if (!isFinite(newVal)) {
        newVal = 0;
    }
    if (isPercentage) {
        newVal = this.moveDecimalLeft(newVal, 2);
    }
    return newVal;
}