﻿
var BOOKIE = new function BookieUtilities(){

  <!--- // varaibles --->
  var self = this;

  <!--- // modules --->
  this.Ticket;
  this.LotoTicket;
  this.Debug;

  <!--- // configuration --->
  this.configuration = {
    'version':              1.0,
    'debug':                false,
    'effects':              true,
    'effectsUpdate':        false,
    'FORCE_SWITCH':         true
  }

};

Number.prototype.roundEx = function(decimals) { if (decimals > 0) {var toRound = this * (Math.pow(10, decimals));var strToRound = (toRound.toString().indexOf(".") < 0) ? toRound.toString() + ".0" : toRound.toString();var reminder = strToRound.substring(strToRound.indexOf(".") + 1, strToRound.indexOf(".")  + 2);    if (parseInt(reminder, 10) >= 5)  return ((parseInt(strToRound.substring(0, strToRound.indexOf(".")), 10) + (this > 0 ? 1 : (-1))) / (Math.pow(10, decimals))); else  return (parseInt(strToRound.substring(0, strToRound.indexOf(".")), 10) / (Math.pow(10, decimals))); } return this;}
Number.prototype.toStringEx = function() { var delimiter = ApplicationConfig.delimiter;var delimiterK = ApplicationConfig.delimiterK;/*arguments[0]|ApplicationConfig.delimiter*/; nStr = this+''; var x = nStr.split('.'); var x1 = x[0]; if(x.length > 1  && x[1].length == 1)  x[1]+='0'; var x2 = x.length > 1 ? delimiter + x[1] : delimiter+'00'; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) x1 = x1.replace(rgx, '$1' + delimiterK + '$2'); return x1 + x2; }

var fieldNames = "sport_id|competition_id|country_id|continent_id|special_event_id|bet_type_id|tip_name_id|warrning_id|stat_id|tip1|tip2|tip3|tip4|tip5|tip6|tip7|tip8|tip9|BetCodeBasic|mktime|Team1|Team2".split('|');
fieldNames.push('tipSelectedIdx','tipSelectedName','tipSelectedValue','tipFixed','winningTips');
var $IDX={}; for(i=0,l=fieldNames.length;i<l;i++) $IDX[fieldNames[i]]=i;


  var eTicket=[];
  var TICKET_DATA={};
  
  var TICKET_CONFIG_CONST = {
    minBets           :1,
    maxBets           :32,
    maxSystemBets     :20,
    minPayment        :1,
    maxPayment        :50000,    
    maxCombinationWin :30000,
    maxSystemWin      :300000,
    manipulationCost  :0.0,
    minSystemStakeLoto:0.01
  }
  
  /*
  var startPayment = TICKET_CONFIG_CONST.minPayment;
  var startStake = TICKET_CONFIG_CONST.minPayment/(1+TICKET_CONFIG_CONST.manipulationCost);
  */
  var startPayment = TICKET_CONFIG_CONST.minPayment;
  var startStake = 1;  
  
  var TICKET_CONFIG_DEFAULT = {
    ticketType    : ' ',
    payment		    : startPayment,
    stake         : startStake,
    fixedBets     : 0,
    systemBets    : 0,
    systemStakes  : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    systemMatrix  : '00000000000000000000',
    ratio         : 1,
    income        : 1
  };

  var TICKET_CONFIG = {};
  Object.extend(TICKET_CONFIG, TICKET_CONFIG_DEFAULT);


  var TICKET_VIEWPORT={
    mode    :0,
    position:{x:897,y:90},
    positionStartup:{x:897,y:90},
    hidden  :false,
    autohide:false,
    hover   :false,
    scrollOffset : 0
  };



// *** Ticket object

BOOKIE.Ticket = new function TicketUtilities(){

  var self = this;

  this.eTicket = $('eTicket');

  this.init = function() {

    if(typeof(pageofferJS)=="undefined") return;

    // hook up event handling
    $$('.competitionData').each( function(item){
      item.observe('click',BOOKIE.Ticket.IB);
    });

    $$('table.competitionData tr td.t').each(function(td) {
      td.observe('click', tip_onclick);
    });


    $$('.titlebar .top').each( function(item){
      item.observe('click',BOOKIE.Ticket.scrollToTop);
    });

    if(eTicketConfig.autoscrollBookmarks) UTIL.scrollToBookmarks();   

    // sync
    self.getTicket();
    //self.getTicketEx();

    new Draggable('eTicket', { handle: 'eTicketTitleBar', onEnd:self.eTicketMoveEnd });
    window.onscroll = BOOKIE.Ticket.viewportScrolling;
    window.onresize = BOOKIE.Ticket.viewportResize;   
  }


  function initTicket(){

    eTicket[0] = TICKET_DATA;
    Object.extend(TICKET_CONFIG, TICKET_CONFIG_DEFAULT);
    eTicket[1] = TICKET_CONFIG;
    eTicket[2] = TICKET_VIEWPORT;

    var scroff = document.viewport.getScrollOffsets();

    $('eTicket').setStyle({
      left: TICKET_VIEWPORT.position.x+'px',
      top: scroff.top+TICKET_VIEWPORT.position.y+'px'
    });

    showViewport();
  }

	this.viewportResize = function(event){
		
    if($$('div.offer-bookmark')){
    	
			wid = $$('div.offer-bookmark')[0].getDimensions().width;
			lef = $$('div.offer-bookmark')[0].cumulativeOffset().left; 
			off = 0;
			if(Prototype.Browser.IE) off = 0;
	
	  	TICKET_VIEWPORT.position.x = wid + lef + off;
	  	TICKET_VIEWPORT.positionStartup.x = wid + lef + off;
	  	
	    $('eTicket').setStyle({
	      left: TICKET_VIEWPORT.position.x+'px'
	      /*,
	      top: posY+'px'*/
	    });	  	
    } 
	}

  this.viewportScrolling = function(event){

    if(getTicketBetsNo()==0) return;

    var scroff = document.viewport.getScrollOffsets();
    var ypos = scroff.top+TICKET_VIEWPORT.position.y;
    var xpos = TICKET_VIEWPORT.position.x;

    var viewport = document.viewport.getDimensions();
    var ticket = $('eTicket').getDimensions();

    var bOversize = (ticket.height > viewport.height);

    var posY = 0;

    if(bOversize){

      var scrollDirection = (scroff.top > TICKET_VIEWPORT.scrollOffset) ? 1 : -1;

      posY = (scrollDirection==-1) ? scroff.top : scroff.top-(ticket.height-viewport.height);

    } else {

      posY = scroff.top+TICKET_VIEWPORT.position.y;

      var ticketY = $('eTicket').getStyle('top');
      ticketY=+(ticketY.substring(0,ticketY.length-2));

      if(posY<scroff.top) posY = scroff.top;
      if((scroff.top+viewport.height)<(ticketY+ticket.height)) {

        posY = scroff.top+viewport.height-ticket.height;
      }

    }

    if(!bOversize){
      posY = document.viewport.getScrollOffsets().top;
      if(posY<TICKET_VIEWPORT.positionStartup.y) posY=TICKET_VIEWPORT.positionStartup.y;
    }

    TICKET_VIEWPORT.scrollOffset = scroff.top;

    $('eTicket').setStyle({
      left: TICKET_VIEWPORT.position.x+'px',
      top: posY+'px'
    });

    if($('eTicketPrint').innerHTML!='')
      UTIL.elementToScreenCenter('eTicketPrint');
  }

  this.scrollToTop = function(){  window.scrollTo(0,0);  }

  this.hoverOn = function(){

    if(TICKET_VIEWPORT.hover) $('eTicket').setOpacity(0.9);
    TICKET_VIEWPORT.hover=true;
  }


  this.hoverOff = function(){

    if(!TICKET_VIEWPORT.hover) $('eTicket').setOpacity(0.3);
    TICKET_VIEWPORT.hover=false;
  }


  this.eTicketMoveEnd = function(){

    var ticket = $('eTicket').getDimensions();
    var viewport = document.viewport.getDimensions();
    var scroff = document.viewport.getScrollOffsets();
    var pos = $('eTicket').cumulativeScrollOffset();
    var absPos = $('eTicket').cumulativeOffset();

    //TICKET_VIEWPORT.position.x = absPos.left;
    TICKET_VIEWPORT.position.y = (absPos.top-pos.top);
/*
    if(TICKET_VIEWPORT.position.x<0){
      TICKET_VIEWPORT.position.x=0;
      $('eTicket').setStyle({left:'0px'});
    }

    if((TICKET_VIEWPORT.position.x+ticket.width) > viewport.width){
      TICKET_VIEWPORT.position.x=viewport.width-ticket.width;
      $('eTicket').setStyle({left:TICKET_VIEWPORT.position.x+'px'});
    }
*/
    if(absPos.top < 0){

      $('eTicket').setStyle({top:scroff.top+'px'});
      TICKET_VIEWPORT.position.y = 0;
    }

    if((scroff.top+viewport.height) < (absPos.top +ticket.height)){

      TICKET_VIEWPORT.position.y = scroff.top+viewport.height-ticket.height;
      $('eTicket').setStyle({top:TICKET_VIEWPORT.position.y+'px'});
    }

  }


  this.DB  = function(BetCode){

    delete TICKET_DATA[BetCode];
    deselectTicketItemInOffer(BetCode);
    showViewport();
    self.setTicket();
  }


  this.changeStake  = function(){

    var newStake = $('stake').value;

    if(isNaN(newStake)) {

      $('stake').value  = TICKET_CONFIG.stake;
      return;
    }

    if(newStake < TICKET_CONFIG_CONST.minPayment || newStake > TICKET_CONFIG_CONST.maxPayment){

      if(newStake < TICKET_CONFIG_CONST.minPayment)
        showNotification($LANG['MINIMUMPAYMENT']+TICKET_CONFIG_CONST.minPayment+' '+$LANG['CURRENCY']);

      if(newStake > TICKET_CONFIG_CONST.maxPayment)
        showNotification($LANG['MAXIMUMPAYMENT']+TICKET_CONFIG_CONST.maxPayment+' '+$LANG['CURRENCY']);

      $('stake').value  = TICKET_CONFIG.stake.roundEx(2).toStringEx();
      $('payment').value  = TICKET_CONFIG.payment.roundEx(2).toStringEx();
      return;
    }
        
    var newPayment = newStake * (1+TICKET_CONFIG_CONST.manipulationCost);

    TICKET_CONFIG.payment = newPayment;
    TICKET_CONFIG.stake = newStake;

    showViewport();
    self.setTicket();
  }
  
  this.changePayment  = function(){

    var newPayment = $('payment').value;

    if(isNaN(newPayment)) {

      $('payment').value  = TICKET_CONFIG.payment;
      return;
    }

    if(newPayment < TICKET_CONFIG_CONST.minPayment || newPayment > TICKET_CONFIG_CONST.maxPayment){

      if(newPayment < TICKET_CONFIG_CONST.minPayment)
        showNotification($LANG['MINIMUMPAYMENT']+TICKET_CONFIG_CONST.minPayment+' '+$LANG['CURRENCY']);

      if(newPayment > TICKET_CONFIG_CONST.maxPayment)
        showNotification($LANG['MAXIMUMPAYMENT']+TICKET_CONFIG_CONST.maxPayment+' '+$LANG['CURRENCY']);

      $('stake').value  = TICKET_CONFIG.stake.roundEx(2).toStringEx();
      $('payment').value  = TICKET_CONFIG.payment.roundEx(2).toStringEx();
      return;
    }
    
    var stake = newPayment / (1+TICKET_CONFIG_CONST.manipulationCost);

    TICKET_CONFIG.payment = newPayment;
    //TICKET_CONFIG.stake = stake.roundEx(2).toStringEx();
    TICKET_CONFIG.stake = stake;

    showViewport();
    self.setTicket();
  }  
  

  this.TF  = function(BetCode){/* toggle fix */

    dbg("ACTION: toggle fixed bet ..."+BetCode);

    TICKET_DATA[BetCode][$IDX.tipFixed]=($('fixed'+BetCode).checked)?1:0;

    updateSystemMatrix();

    showViewport();
    self.setTicket();
  }


  this.TS  = function(){/* toggle system */

    dbg("ACTION: toggle ticket fixed ...");

    var bSystemTicket = (TICKET_CONFIG.ticketType=='S') ? true : false;

    TICKET_CONFIG.ticketType = (bSystemTicket) ? ' ' : 'S';

    if(bSystemTicket) $('eTicket').removeClassName('system');
    else $('eTicket').addClassName('system');

    updateSystemMatrix();

    showViewport();

    self.setTicket();
  }


  this.TSS  = function(){/* toggle system selection */  		

    updateSystemMatrix();

    showViewport();
    self.setTicket();
  }


  function updateSystemMatrix(){

    if(TICKET_CONFIG.ticketType==' '){

      TICKET_CONFIG.systemMatrix = TICKET_CONFIG_DEFAULT.systemMatrix;
      return;
    }

    var sysMatrix = '';

    for(var s=0;s < 20; s++){

      if($('sys_'+s) && $('sys_'+s).checked)
        sysMatrix += '1';
      else
        sysMatrix += '0';
    }

    TICKET_CONFIG.systemMatrix = sysMatrix;
  }


  this.clearFixes = function(){

    for(BetCode in TICKET_DATA)
      TICKET_DATA[BetCode][$IDX.tipFixed]=0;

    showViewport();
    self.setTicket();
  }


  this.IB  = function(event){

    var srcElement = Event.element(event);

    if(!srcElement.hasClassName('t')) return;

    if($('hinfo')) $('hinfo').addClassName('hide');

    var tdSiblings = srcElement.siblings();
    var tipCode = +(tdSiblings[0].innerHTML);
    var tipSelectedIdx = srcElement.previousSiblings().size()-3;
    var tipValue = pageofferJS[tipCode][$IDX.tip1+tipSelectedIdx];
    var tipSelectedValue = tipValue;

    var tipNameId = pageofferJS[tipCode][$IDX.tip_name_id];
    var tipNames  = OFFERDATA.tip_names[tipNameId].split('|');
    var tipSelectedName = tipNames[tipSelectedIdx];

    var tipCompetitionId = pageofferJS[tipCode][$IDX.competition_id];
    var tipCompetitionName = OFFERDATA.competitions[tipCompetitionId];

    var tipSportId = pageofferJS[tipCode][$IDX.sport_id];
    var tipSportName = OFFERDATA.sports[tipSportId];

    var tipBetCodeBasic = pageofferJS[tipCode][$IDX.BetCodeBasic];

    var tipBlockingBets = (OFFERDATA.blocking_bets[tipCode]) ? OFFERDATA.blocking_bets[tipCode]:[];
    var tipBlockingCompetitions = (OFFERDATA.blocking_competitions[tipCompetitionId]) ? OFFERDATA.blocking_competitions[tipCompetitionId]:[];

    var tipMinBets = (tipBlockingCompetitions.length>0) ? tipBlockingCompetitions[0] : 1;
    var tipMaxBets = (tipBlockingCompetitions.length>0) ? tipBlockingCompetitions[1] : 32;

    addItem({
        'tipCode':tipCode,
        'tipSelectedIdx':tipSelectedIdx,
        'tipSelectedName':tipSelectedName,
        'tipSelectedValue': tipSelectedValue,
        'tipCompetitionId': tipCompetitionId,
        'tipBetCodeBasic': tipBetCodeBasic
    });

    showViewport();

    if(getTicketBetsNo()==1){
      dbg("frist bet");
      self.viewportScrolling();
    }

    self.setTicket();
  }


  function checkConfiguration(){

    var bConfiguration = true;

    var TicketBetsNo = getTicketBetsNo();
    if(TicketBetsNo==0) return bConfiguration;

    var TicketBetsNoMin = getTicketBetsNoMin();
    var TicketBetsNoMax = getTicketBetsNoMax();

    if(TicketBetsNo > TICKET_CONFIG_CONST.maxBets){
      showNotification($LANG['MAXBETS']+TICKET_CONFIG_CONST.maxBets);
      bConfiguration=false;
    }

    if(TicketBetsNoMin > TicketBetsNo){
      showNotification($LANG['MINBETS']+TicketBetsNoMin);
      bConfiguration=false;
    }

		if(TICKET_CONFIG.ticketType==' '){
	    if(TICKET_CONFIG.income>TICKET_CONFIG_CONST.maxCombinationWin){
	      showNotification($LANG['MAXWINNING']+TICKET_CONFIG_CONST.maxCombinationWin+' '+$LANG['CURRENCY']);
	      bConfiguration=false;
	    }
  	}else{
	    if(TICKET_CONFIG.income>TICKET_CONFIG_CONST.maxSystemWin){
	      showNotification($LANG['MAXWINNING']+TICKET_CONFIG_CONST.maxSystemWin+' '+$LANG['CURRENCY']);
	      bConfiguration=false;
	    }  		
  	}

    dbg("bConfiguration : "+bConfiguration);
    return bConfiguration;
  }


  function addItem(params){

      var params = {
        tipCode:          params.tipCode || 0,
        tipSelectedIdx :  params.tipSelectedIdx || 0,
        tipSelectedName:  params.tipSelectedName || '',
        tipSelectedValue: params.tipSelectedValue || 0,
        tipBetCodeBasic:  params.tipBetCodeBasic || 0,
        tipCompetitionId: params.tipCompetitionId || 0,
        tipFixed:         params.tipFixed || 0,
        winningTips:      params.winningTips || '0'
      };

      if(params.tipCode==0) return false;
      if(params.tipSelectedName=='') return false;
      if(params.tipSelectedValue==0) return false;


      var bBetCodeInTicket = isBetCodeInTicket(params);
      var bBetCodeTipInTicket = isBetCodeTipInTicket(params);
      var bEventInTicket = isEventInTicket(params);
      var bInsertBet=true;


      // BLOCKING

        var bInsertBlocking=false;

        var BetBlockingBets = getBetBlockingBets(params.tipCode);
        var BetBlockingCompetitions = getBlockingCompetitions(params.tipCompetitionId);

        var TicketBlockingBets = getTicketBlockingBets();
        var TicketBlockingCompetitions = getTicketBlockingCompetitions();
        
        var bTicketBonusDvoznak = (TicketBlockingCompetitions.indexOf(1)>-1) ? true : false;
        var bBetBonusDvoznak = (BetBlockingCompetitions.indexOf(1)>-1) ? true : false;

        dbg("BetBlockingBets : "+BetBlockingBets);
        dbg("BetBlockingCompetitions : "+BetBlockingCompetitions);
        dbg("TicketBlockingBets : "+TicketBlockingBets);
        dbg("TicketBlockingCompetitions : "+TicketBlockingCompetitions);


        if(TicketBlockingBets.indexOf(params.tipCode)>-1){

          dbg("Bet blocked by Ticket : "+params.tipCode + " NOT ALLOWED");
          bInsertBlocking=true;
          showNotification($LANG['BETNOTCOMBINABLE']);
        }

/*
        BetBlockingBets.each( function (BetBlocking) {

          if(TicketBlockingBets.indexOf(BetBlocking)>0){

            dbg("Bet blocked by Bet vs Ticket : "+BetBlocking + " NOT ALLOWED");
            bInsertBlocking=true;
          }

        });
*/

        if(BetBlockingCompetitions.indexOf(1)>-1){
          if(TicketBlockingCompetitions.length>0)
          if(TicketBlockingCompetitions.indexOf(1)==-1){

            bInsertBlocking=true;
            showNotification($LANG['BETNOTCOMBINABLE']);
          }
        }

        if(TicketBlockingCompetitions.indexOf(1)>-1){

          if(BetBlockingCompetitions.indexOf(1)==-1){
            dbg("TicketBlockingCompetitions (1) : NOT ALLOWED");
            bInsertBlocking=true;
            showNotification($LANG['TICKETNONCOMBINABLE']);
          }
        }
        
        if(bInsertBlocking)
        	deselectTicketItemInOffer(params.tipCode);

        if(!bInsertBlocking)
        if(TicketBlockingCompetitions.indexOf(params.tipCompetitionId)>-1){

          dbg("Bet blocked by Ticket comeptition: "+params.tipCompetitionId + " NOT ALLOWED");
          //bInsertBlocking=true;

          if(BOOKIE.configuration.FORCE_SWITCH){

            // remove incompatible competitons (bets) from ticket

            if(!bBetCodeInTicket){

              TicketBlockingCompetitionBets = getTicketBlockingCompetitionBets(params.tipCompetitionId);
              dbg("removing : "+TicketBlockingCompetitionBets);

              newBet = getBetTeams(params.tipCode);
              oldBets = '';
              TicketBlockingCompetitionBets.each( function(oldBetCode){

                oldBets += getBetTeams(oldBetCode);
              })

              $msg = oldBets+'<br /> '+$LANG['BETSSWITCH']+' <br />'+newBet;
              showNotification($msg);

              deleteBets(TicketBlockingCompetitionBets);

              // allow insert
              bInsertBlocking=false;

              // refresh new blockings
              BetBlockingBets = getBetBlockingBets(params.tipCode);
              BetBlockingCompetitions = (OFFERDATA.blocking_competitions[params.tipCompetitionId]) ? OFFERDATA.blocking_competitions[params.tipCompetitionId]:[];
              TicketBlockingBets = getTicketBlockingBets();
              TicketBlockingCompetitions = getTicketBlockingCompetitions();

            }

          }

        }

/*
        BetBlockingCompetitions.each( function (BetBlockingCompetition) {

          if(TicketBlockingCompetitions.indexOf(BetBlockingCompetition)>0){

            dbg("Bet blocked by TicketBlockingCompetitions and BetBlockingCompetition : "+BetBlockingCompetition +" vs "+ TicketBlockingCompetitions + " NOT ALLOWED");
            bInsertBlocking=true;
          }

        });
*/      
        
				
				if(TicketBlockingCompetitions.indexOf(params.tipCompetitionId)>-1){
				
				  dbg("Bet blocked by TicketBlockingCompetitions : "+params.tipCompetitionId +" vs "+ TicketBlockingCompetitions + " NOT ALLOWED");
				  bInsertBlocking=true;
				}

    



      // ACTIONS

        // delete bet

        if(bBetCodeInTicket && bBetCodeTipInTicket){

          dbg("ACTION: delete bet ...");

          removeItem(params);
          deselectTicketItemInOffer(params.tipCode);
          return false;
        }

        // change bet tip

        if(bBetCodeInTicket && !bBetCodeTipInTicket){

          dbg("ACTION: change bet tip ..."+bBetCodeInTicket);

          TICKET_DATA[params.tipCode][$IDX.tipSelectedIdx]=params.tipSelectedIdx;
          TICKET_DATA[params.tipCode][$IDX.tipSelectedName]=params.tipSelectedName;
          TICKET_DATA[params.tipCode][$IDX.tipSelectedValue]=params.tipSelectedValue;

          deselectTicketItemInOffer(params.tipCode);
          selectTicketItemInOffer(params.tipCode);
          return true;
        }

        // change event bet

        if(bEventInTicket && !bTicketBonusDvoznak){

          dbg("ACTION: change bet event ...");

          delete TICKET_DATA[bEventInTicket];
          deselectTicketItemInOffer(bEventInTicket);
          insertItem(params);
          return true;
        }

        // insert new
        
        if(!bBetCodeInTicket && !bInsertBlocking){

          dbg("ACTION: insert new bet ...");
          insertItem(params);
        }
        
        // insert new
        
        if(bTicketBonusDvoznak && bBetBonusDvoznak){

          dbg("ACTION: insert new bet ...");
          insertItem(params);
        }        

      return false;
  }


  function insertItem(params){

        var betCode=params.tipCode;
        TICKET_DATA[betCode]=pageofferJS[params.tipCode];
        TICKET_DATA[betCode][$IDX.tipSelectedIdx]=params.tipSelectedIdx;
        TICKET_DATA[betCode][$IDX.tipSelectedName]=params.tipSelectedName;
        TICKET_DATA[betCode][$IDX.tipSelectedValue]=params.tipSelectedValue;
        TICKET_DATA[betCode][$IDX.tipFixed]=params.tipFixed;
        TICKET_DATA[betCode][$IDX.winningTips]=params.winningTips;

        selectTicketItemInOffer(betCode);
  }


  function removeItem(params){

    delete TICKET_DATA[params.tipCode];

    dbg(TICKET_DATA);
  }


  function isBetCodeInTicket(params){

    return (TICKET_DATA[params.tipCode]==undefined) ? false : params.tipCode;
  }


  function isBetCodeTipInTicket(params){

    if(TICKET_DATA[params.tipCode]==undefined) return false;

    return (TICKET_DATA[params.tipCode][$IDX.tipSelectedIdx]==params.tipSelectedIdx) ? true : false;
  }


  function isEventInTicket(params){

    for(BetCode in TICKET_DATA){

      if(TICKET_DATA[BetCode][$IDX.BetCode]!=params.tipCode)
      if(TICKET_DATA[BetCode][$IDX.BetCodeBasic]==params.tipBetCodeBasic){

        dbg("event in ticket ... replace made -x "+BetCode);
        return BetCode;
      }
    }
    return false;
  }


  function getTicketBlockingBets(){

    var TicketBlockingBets = [];
    var BetBlockingBets;

    for(BetCode in TICKET_DATA){

      BetBlockingBets = getBetBlockingBets(BetCode);
      if(BetBlockingBets.length>3){

        for(var i=3,l=BetBlockingBets.length;i<l;i++)
          TicketBlockingBets.push(BetBlockingBets[i]);
      }
    }
    return TicketBlockingBets.uniq();
  }


  function getBetBlockingBets(BetCode){

    return (OFFERDATA.blocking_bets[BetCode]!=undefined) ? OFFERDATA.blocking_bets[BetCode]:[];
  }

  function getBetTeams(BetCode){

    if(TICKET_DATA[BetCode])
      return  TICKET_DATA[BetCode][$IDX.Team1]+' - '+TICKET_DATA[BetCode][$IDX.Team2];

    if(pageofferJS[BetCode])
      return  pageofferJS[BetCode][$IDX.Team1]+' - '+pageofferJS[BetCode][$IDX.Team2];

    return '';
  }


  function getTicketBlockingCompetitions(){

    var TicketBlockingCompetitions = [];
    var BetBlockingCompetitions;
    var CompetitionId;

    for(BetCode in TICKET_DATA){

      CompetitionId = TICKET_DATA[BetCode][$IDX.competition_id];
      BetBlockingCompetitions = getBlockingCompetitions(CompetitionId);
      if(BetBlockingCompetitions.length>0){

        for(var i=0,l=BetBlockingCompetitions.length;i<l;i++)
          TicketBlockingCompetitions.push(BetBlockingCompetitions[i]);
      }
    }

    return TicketBlockingCompetitions.uniq();
  }


  function getTicketBlockingCompetitionBets(competition_id){

    var TicketBlockingCompetitionBets = [];
    var BetBlockingCompetitions;
    var CompetitionId;

    for(BetCode in TICKET_DATA){

      CompetitionId = TICKET_DATA[BetCode][$IDX.competition_id];
      BetBlockingCompetitions = getBlockingCompetitions(CompetitionId);

      if(BetBlockingCompetitions.indexOf(competition_id)>-1){

        TicketBlockingCompetitionBets.push(BetCode);
      }
    }

    return TicketBlockingCompetitionBets.uniq();
  }


  function getTicketCompetitions(){

    var TicketCompetitions = [];
    var CompetitionId;

    for(BetCode in TICKET_DATA)
      TicketCompetitions.push(TICKET_DATA[BetCode][$IDX.competition_id]);

    return TicketCompetitions.uniq();
  }

  function getTicketCompetitionBetTypes(competition_id){

    var TicketCompetitionBetTypes = [];
    var CompetitionId;

    for(BetCode in TICKET_DATA){
      if(competition_id==TICKET_DATA[BetCode][$IDX.competition_id])
        TicketCompetitionBetTypes.push(TICKET_DATA[BetCode][$IDX.bet_type_id]);
    }

    return TicketCompetitionBetTypes.uniq();
  }

  function getOfferCompetitions(){

    var OfferCompetitions = [];
    var CompetitionId;

    for(BetCode in pageofferJS)
      OfferCompetitions.push(pageofferJS[BetCode][$IDX.competition_id]);

    return OfferCompetitions.uniq();
  }

  function deleteBets(TicketBets){

    TicketBets.each( function(BetCode){

      deselectTicketItemInOffer(BetCode);
      delete TICKET_DATA[BetCode];
    });

  }

  function getBlockingCompetitions(CompetitionId){

    var BlockingCompetitions=[];
    if(OFFERDATA.blocking_competitions[CompetitionId]!=undefined){
      if(OFFERDATA.blocking_competitions[CompetitionId].length>2){
        for(var i=2,l=OFFERDATA.blocking_competitions[CompetitionId].length;i<l;i++)
          BlockingCompetitions.push(OFFERDATA.blocking_competitions[CompetitionId][i]);
      }
    }

    return BlockingCompetitions;
  }

  this.showTicketItemsInOffer = function(){

    for(BetCode in TICKET_DATA){

      tipSelectedIdx = TICKET_DATA[BetCode][$IDX.tipSelectedIdx];

      $$(".bc"+BetCode).each(function(item_td){
          item_td.childElements()[3+tipSelectedIdx].addClassName("act");
      })
    }
  }

  function removeTicketItemsInOffer(){

    $$("td.act").each(function(item_td){
        item_td.removeClassName("act");
    });
  }

  function deselectTicketItemInOffer(BetCode){

    $$("tr.bc"+BetCode+" td.act").each(function(item_td){
        item_td.removeClassName("act");
    });
  }

  function selectTicketItemInOffer(BetCode){

      var tipSelectedIdx = TICKET_DATA[BetCode][$IDX.tipSelectedIdx];

      $$("tr.bc"+BetCode).each(function(item_td){
          item_td.childElements()[3+tipSelectedIdx].addClassName("act");
      });
  }

  function Faktorijel(n){

    var faktorijel=1;
    for(i=1;i<=n;i++) faktorijel*=i;
    return faktorijel;
  }

  function getTicketBetsNo(){

    var bet_no=0;
    for(BetCode in TICKET_DATA) bet_no++;
    return bet_no;
  }

  function getTicketBetsNoMin(){

    var TicketBetsNoMin=0;
    var competition_id=0;
    var min_bets=0;

    for(BetCode in TICKET_DATA) {

      competition_id = TICKET_DATA[BetCode][$IDX.competition_id];

      if(OFFERDATA.blocking_competitions[competition_id]){

        min_bets = OFFERDATA.blocking_competitions[competition_id][0];

        if(TicketBetsNoMin < min_bets)
          TicketBetsNoMin = min_bets;
      }
    }

    if(TicketBetsNoMin==0) TicketBetsNoMin = TICKET_CONFIG_CONST.minBets;

    return TicketBetsNoMin;
  }

  function getTicketBetsNoMax(){

    var TicketBetsNoMax=0;
    var competition_id=0;
    var max_bets=0;

    for(BetCode in TICKET_DATA) {

      competition_id = TICKET_DATA[BetCode][$IDX.competition_id];

      if(OFFERDATA.blocking_competitions[competition_id]){

        min_bets = OFFERDATA.blocking_competitions[competition_id][1];
        if(TicketBetsNoMax < max_bets)
          TicketBetsNoMax = max_bets;
      }
    }

    if(TicketBetsNoMax==0) TicketBetsNoMax = TICKET_CONFIG_CONST.maxBets;

    return TicketBetsNoMax;
  }

  function getTicketBetsNoNonFixed(){

    var bet_no=0;
    for(BetCode in TICKET_DATA)
      if(TICKET_DATA[BetCode][$IDX.tipFixed]==0)
        bet_no++;

    return bet_no;
  }

  this.getTicketEx = function(){

    getTicketDo(eTicketFrame.eTicket);
  }


  this.getTicket = function(){

      new Ajax.Request('ajax/eticket_ajax.php', {
        method: 'get',
        parameters: 'task=getTicket',
        onSuccess: function(transport) {

          getTicketDo(transport.responseText);
        }
     })
  }

  function getTicketDo(responseText){

    if(responseText==undefined)
      setTimeout("getTicketDo(eTicketFrame.eTicket)",100);

    if(responseText=='NONE' || responseText.length==0){
      initTicket();
      displayInitPosition();
      showViewport();
      return;
    }
    else {

      eval("eTicket = "+decodeURI(responseText));
      TICKET_DATA = eTicket[0];
      TICKET_CONFIG = eTicket[1];
      TICKET_VIEWPORT = eTicket[2];
    }

    if(TICKET_CONFIG.ticketType=='S') $('eTicket').addClassName('system')
    else $('eTicket').removeClassName('system');


    showViewport();
    displayInitPosition();

    if(!eTicketConfig.pullSubTables){

      self.showTicketItemsInOffer();

    } else {

      if(StandingPoint.task == 'teams') return false;
      if(StandingPoint.task == 'bet_type') {

        self.showTicketItemsInOffer();
        return false;
      }

      var OfferCompetitions = getOfferCompetitions();
      var SubCompetitions = [];

      for(BetCode in TICKET_DATA){

        competition_id = TICKET_DATA[BetCode][$IDX.competition_id];
        bet_type_id = TICKET_DATA[BetCode][$IDX.bet_type_id];

        if(OfferCompetitions.indexOf(competition_id)>-1)
          if(!pageofferJS[BetCode] && bet_type_id!=1)
            SubCompetitions.push(competition_id);
      }

      SubCompetitions = SubCompetitions.uniq();
      SubCompetitions.each( function(competition_id){ UTIL.getCompetitionBets(competition_id,StandingPoint.day_id,-1); });

      setTimeout(self.showTicketItemsInOffer,1500);
      setTimeout(self.hideCompetitionsBetTypeInactive,1800);
  }

  }

  this.hideCompetitionBetTypeInactive = function(comp_id){

      var container_el = 'competition-bet-container-'+comp_id;
      var toolbar_container_el = 'competition-toolbar-container-'+comp_id;
      $(toolbar_container_el).show();
      $(container_el).show();

      var btContainer_el = 'btContainer-'+comp_id+'-';
      var btContainers = $$('#'+container_el+' .btContainer');
      if($(btContainer_el+1)) btContainers.push($(btContainer_el+1));

      var TicketCompetitionBetTypes = getTicketCompetitionBetTypes(comp_id);
      var TicketCompetitionBetTypeIDs = [];

      var btToolbarLinks = $$('#bttb-'+comp_id+' a');
      if(btToolbarLinks && !Browser.msie)
      btToolbarLinks.each( function(btToolbarLink){

        if(btToolbarLink.hasClassName('highlight'))
          btToolbarLink.removeClassName('highlight');
      });

      TicketCompetitionBetTypes.each( function(bet_type_id){

        elID="btContainer-"+comp_id+"-"+bet_type_id;
        TicketCompetitionBetTypeIDs.push("btContainer-"+comp_id+"-"+bet_type_id);

        if($(btContainer_el+bet_type_id))
          $(btContainer_el+bet_type_id).show();

        if(!Browser.msie){
          linkBT = $("bt-"+comp_id+"-"+bet_type_id);
          if(linkBT)
            linkBT.addClassName('highlight');
        }
      });

      if(!Browser.msie)
        if($("bt-all-"+comp_id))
          $("bt-all-"+comp_id).removeClassName('highlight');
        else
          dbg("not existing: bt-all-"+comp_id);

      btContainers.each( function(btContainer){

        if(TicketCompetitionBetTypeIDs.indexOf(btContainer.id)==-1)
          btContainer.hide();
      });

  }

  this.hideCompetitionsBetTypeInactive = function(){

      var OfferCompetitions = getOfferCompetitions();
      var SubCompetitions = [];
      for(BetCode in TICKET_DATA){
        competition_id = TICKET_DATA[BetCode][$IDX.competition_id];
        if(OfferCompetitions.indexOf(competition_id)>-1){
            SubCompetitions.push(competition_id);
        }
      }

      SubCompetitions = SubCompetitions.uniq();

      SubCompetitions.each( function(comp_id){

        self.hideCompetitionBetTypeInactive(comp_id);
      });

      return false;
  }

  function displayInitPosition(){

    var scroff = document.viewport.getScrollOffsets();
    
    //if(Prototype.Browser.IE) TICKET_VIEWPORT.positionStartup.x = 900;

    if(TICKET_VIEWPORT.position.y < TICKET_VIEWPORT.positionStartup.y)
      TICKET_VIEWPORT.position.y=TICKET_VIEWPORT.positionStartup.y;
/*
    if(TICKET_VIEWPORT.position.x>TICKET_VIEWPORT.positionStartup.x)
      TICKET_VIEWPORT.position.x=TICKET_VIEWPORT.positionStartup.x;
*/
    if($$('div.offer-bookmark')){
    	
			wid = $$('div.offer-bookmark')[0].getDimensions().width;
			lef = $$('div.offer-bookmark')[0].cumulativeOffset().left; 
			off = 0;
			if(Prototype.Browser.IE) off = 0;
	
	  	TICKET_VIEWPORT.position.x = wid + lef + off;
	  	TICKET_VIEWPORT.positionStartup.x = wid + lef + off;
    }      

    $('eTicket').setStyle({
    left: TICKET_VIEWPORT.position.x+'px',
    top: scroff.top+TICKET_VIEWPORT.position.y+'px'
    });

  }

  this.setTicket = function(){

/*
      ticketLeft = $('eTicket').getStyle('left');
      if(ticketLeft!=null)
        TICKET_VIEWPORT.position.x = +(ticketLeft.substring(0,ticketLeft.length-2));
      else
        TICKET_VIEWPORT.position.x = 800;
*/
      eTicket[0] = TICKET_DATA;
      eTicket[1] = TICKET_CONFIG;
      eTicket[2] = TICKET_VIEWPORT;

      new Ajax.Request('ajax/eticket_ajax.php', {
        method: 'post',
        parameters: 'task=setTicket&eticket='+encodeURI(Object.toJSON(eTicket)),
        onSuccess: function(transport) {

          if(BOOKIE.configuration.effectsUpdate)
            new Effect.Highlight('ticket-items', { queue: 'end',startcolor: '#ffffff',endcolor: '#9cbcdc' });
        }
      });

    return false;
  }

  this.storeTicket = function(){

      if(!checkConfiguration()) return false;

      new Ajax.Request('ajax/eticket_ajax.php', {
        method: 'post',
        parameters: 'task=storeTicket',
        onSuccess: function(transport) {

          if(transport.responseText=='EXCIDE'){

            showNotification($LANG['TICKETNOTGENERATED']);
            return false;
          }

          if(transport.responseText=='EXCIDE_USER'){

            showNotification($LANG['TICKETNOTGENERATED']);
            return false;
          }

          ticketCode = transport.responseText.split("|");

          if(ticketCode[0]=='OK'){

            printTicket(ticketCode[1]);
          } else {

            showNotification($LANG['TICKETNOTGENERATED']);
            return false;
          }

          if(BOOKIE.configuration.effectsUpdate)
            new Effect.Highlight('ticket-items', { queue: 'end',startcolor: '#ffffff',endcolor: '#9cbcdc' });
        }
      });

    return false;
  }

	this.printTicketRec = function(ticketCode){
      new Ajax.Request('ajax/eticket_ajax.php', {
        method: 'get',
        parameters: 'task=printTicketRecord&ticketCode='+ticketCode,
        onSuccess: function(transport) {}
			});
	}

  function printTicket(ticketCode){
  	
      var eTicket_url = 'ajax/eticket_ajax.php?task=printTicket&ticketCode='+ticketCode;
      
  		if(Prototype.Browser.IE){
  			var eTicket_url = 'ajax/eticket_ajax.php?task=printTicket&ticketCode='+ticketCode+'&ua=ie';
  			window.open(eTicket_url ,'_blank','height=500,width=550,status=yes,toolbar=yes,menubar=yes,location=no,scrollbars=yes');
  			return false;
  		}
      
      var iframe_html = "<div class=\"eTicketClose\" onclick=\"$('eTicketPrint').innerHTML='';$('eTicketPrint').hide();UTIL.hideOverlay();\"><span></span></div>"
                        +"<div class=\"eTicketPrint\" onclick=\"BOOKIE.Ticket.printTicketRec("+ticketCode+");eTicketPrintFrame.print();\"></div>"
                        +"<iframe id=\"eTicketPrintFrame\" name=\"eTicketPrintFrame\" height=\"300px\" width=\"500px\" style=\"border:0;z-index:200;\" src=\""+eTicket_url+"\">This is iframe print</iframe>";

      UTIL.showOverlay();

      $('eTicketPrint').innerHTML = iframe_html;
      $('eTicketPrint').show();


          var ticket = $('eTicketPrint').getDimensions();
          var viewport = document.viewport.getDimensions();
          var scroff = document.viewport.getScrollOffsets();
          var sx = viewport.width/2-ticket.width/2;
          var sy = scroff.top+viewport.height/2-ticket.height/2;
          $('eTicketPrint').setStyle({left:sx+'px',top:sy+'px'});


      //UTIL.centerlizeElement('eTicketPrint');
      return false;

      new Ajax.Request('ajax/eticket_ajax.php', {
        method: 'post',
        parameters: 'task=printTicket&ticketCode='+ticketCode,
        onSuccess: function(transport) {


          UTIL.showOverlay();
          $('eTicketPrint').innerHTML = transport.responseText;
          $('eTicketPrint').show();

          var ticket = $('eTicketPrint').getDimensions();
          var viewport = document.viewport.getDimensions();
          var scroff = document.viewport.getScrollOffsets();
          var sx = viewport.width/2-ticket.width/2;
          var sy = scroff.top+viewport.height/2-ticket.height/2;
          $('eTicketPrint').setStyle({left:sx+'px',top:sy+'px'});
        }
      });

    return false;
  }


  this.clearTicket = function(){

    TICKET_DATA={};
    Object.extend(TICKET_CONFIG, TICKET_CONFIG_DEFAULT);

    removeTicketItemsInOffer();
    self.setTicket();
    showViewport();

    if($('hinfo')) $('hinfo').removeClassName('hide');

    return false;
  }


  this.showTicketInOffer = function(){

    var BetCodes = [];

    for(BetCode in TICKET_DATA)
      BetCodes.push(BetCode);

    if(BetCodes.length>0)
      window.location.href='?type=offer&task=search_ticket&betcodes='+BetCodes.join('|');

    return false;
  }


  this.NotificationQueue=0;
  this.NotificationElement = 'ticket-info';


  function showNotification($msg,$duration){

    $msg = $msg || '';
    $duration = $duration || 2000;
    if($msg=='') return;

    $(self.NotificationElement).innerHTML = $msg;
    $(self.NotificationElement).removeClassName('hide');
    $(self.NotificationElement).show();
    $(self.NotificationElement).setOpacity(1);

    if(BOOKIE.configuration.effects)
      new Effect.Highlight(self.NotificationElement,{startcolor: '#ffffff',endcolor: '#9cbcdc'});

    self.NotificationQueue++;
    setTimeout("BOOKIE.Ticket.clearNotification();", $duration );
  }


  this.clearNotification = function(){

    self.NotificationQueue--;

    if(self.NotificationQueue==0) {

      if(BOOKIE.configuration.effects){

        Effect.Fade(self.NotificationElement, { duration: 1.0 });
        setTimeout("BOOKIE.Ticket.clearNotificationHTML();", 1000 );
      }
      else clearNotificationHTML();
    }
  }


  this.clearNotificationHTML = function(){

    if(self.NotificationQueue==0){
      $(self.NotificationElement).innerHTML ='';
      $(self.NotificationElement).show();
      $(self.NotificationElement).addClassName('hide');
    }
  }



  // Viewport

  function showViewport(){

    showTicketItems();
    showTicketItemsSystem();
    //showTicketViewportInfo();
  }

  function showTicketViewportInfo(){

    var viewportInfo=
      '(x:'+TICKET_VIEWPORT.position.x+', y:'+TICKET_VIEWPORT.position.y+') <br />'+
      'mode: '+TICKET_VIEWPORT.mode+' <br />'
    ;

    $('ticket-info').innerHTML = viewportInfo;
  }

  function showTicketItems(){

    if(getTicketBetsNo()==0) {
    	
      $('eTicket').hide();
      return;
      
    } else {
    	
    	if($('hinfo')) $('hinfo').addClassName('hide');
      $('eTicket').show();
    }


    var html_ticketItems='';
    var cnt=0;
    for(BetCode in TICKET_DATA){

      Team1   = TICKET_DATA[BetCode][$IDX.Team1];
      Team2   = TICKET_DATA[BetCode][$IDX.Team2];
      Tip     = getNumber(TICKET_DATA[BetCode][$IDX.tipSelectedValue]);
      TipName = TICKET_DATA[BetCode][$IDX.tipSelectedName];

      var tipSelectedIdx = TICKET_DATA[BetCode][$IDX.tipSelectedIdx];
      removeBet  = ' <a href="#" onclick="BOOKIE.Ticket.DB('+BetCode+'); return false;"><span class="delbet"></span></a>';

      chk = (TICKET_DATA[BetCode][$IDX.tipFixed]) ? 'checked="checked"':'';
      fixBet = '<input onclick="BOOKIE.Ticket.TF('+BetCode+');" '+chk+' type="checkbox" class="checkbox" value="" name="" id="fixed'+BetCode+'"/>'

      cnt++;
      html_ticketItems +=
      '<div class="betItem">'+
        '<div class="betcode"> '+cnt+'.</div>'+
        '<div class="t">'+Team1+' - '+Team2+'</div>'+
        '<div class="tn">'+TipName+'</div>'+
        '<div class="tv">'+Tip+'</div>'+
        '<div class="cb">'+fixBet+'</div>'+
        '<div class="cmd">'+removeBet+'</div>'+
        '<div class="clear"></div>'+
      '</div>';
    }

    $('ticket-items').innerHTML = html_ticketItems;
  }


  function showTicketItemsSystem(){

    var TicketItemsNo = getTicketBetsNoNonFixed();

    if(TicketItemsNo < 2){

      TICKET_CONFIG.ticketType=' ';
    } else {

      //TICKET_CONFIG.ticketType='S';
    }

    var bSystemTicket = (TICKET_CONFIG.ticketType=='S') ? true : false;

    var chk = (bSystemTicket) ? 'checked="checked"':'';

    var html_ticketItems='';

    if(TicketItemsNo>1)
      html_ticketItems='<input onclick="BOOKIE.Ticket.TS();" '+chk+' type="checkbox" class="checkbox" value="" name="" id="toggleSystem" /> <label for="toggleSystem">'+$LANG['SYSTEMTICKET']+'</label> <br /> ';



    var ratio=1;

    var bet_no = 0;

    if(TICKET_DATA)
    for(BetCode in TICKET_DATA){
      bet_no++;
      ratio*=TICKET_DATA[BetCode][$IDX.tipSelectedValue];
    }


    //var income = Math.round(TICKET_CONFIG.stake * ratio * 100)/100;
    var income = TICKET_CONFIG.stake * ratio;
    /*
    dbg("ratio:"+ratio);
    dbg("stake:"+TICKET_CONFIG.stake);
    dbg("income:"+income);
    */


if(bSystemTicket){

    var SystemAllCombinations=0;

    var ratioSystem = 1;

    var bet_no_sys = TicketItemsNo;

    var noSystemBets = (bet_no<TICKET_CONFIG_CONST.maxSystemBets) ? bet_no_sys : TICKET_CONFIG_CONST.maxSystemBets;

    if(bet_no_sys>20) bet_no_sys=20;

    for(var i=0; i<bet_no_sys;i++){

      if(i<TICKET_CONFIG_CONST.maxSystemBets){

        SystemCombinations = getCombinationsCount(bet_no_sys,i+1);

        if(TICKET_CONFIG.systemMatrix.substr(i,1)=='1')
          SystemAllCombinations+=SystemCombinations;

        si=i+1;

        var chk=(TICKET_CONFIG.systemMatrix.substr(i,1)=='1') ? 'checked="checked"' : '';

        strSystemCombinations = Math.round(SystemCombinations);
        html_ticketItems+='<div class="sys-check"><input type="checkbox" class="checkbox" id="sys_'+i+'" '+chk+' onclick="BOOKIE.Ticket.TSS();" name="" value="" /><label for="sys_'+i+'">'+(i+1)+'/'+noSystemBets+' ('+strSystemCombinations+') '+'</label><div class="clear"></div></div>';

      }
    }

    html_ticketItems+='<div class="clear"></div>';
    html_ticketItems+='<div class="summaryItem">';
    html_ticketItems+='<div class="leftSide">Parova: <b>'+bet_no+'</b></div>';
    html_ticketItems+='<div class="rightSide">Komb.: <b>'+SystemAllCombinations+'</b></div>';
    html_ticketItems+='<div class="clear"></div></div>';

    income = calculateSystem();
}

    var stake = TICKET_CONFIG.stake;
    var payment = stake / (1+TICKET_CONFIG_CONST.manipulationCost);
    var manipulationCost  = TICKET_CONFIG.payment - TICKET_CONFIG.stake;

    //html_ticketItems+='<div class="summaryItem stakepay"><div class="leftSide">'+$LANG['PAYMENT']+':</div> <div class="rightSide"><input type="text" onchange="BOOKIE.Ticket.changePayment();" size="6" class="stakeBox rightSide stake" id="payment" value="'+getNumber(+TICKET_CONFIG.payment)+'" /></div></div>';
    //html_ticketItems+='<div class="clear"></div>';
    html_ticketItems+='<div class="summaryItem stakepay"><div class="leftSide">'+$LANG['STAKE']+':</div> <div class="rightSide"><input type="text" onchange="BOOKIE.Ticket.changeStake();" size="6" class="stakeBox rightSide stake" id="stake" value="'+getNumber(+TICKET_CONFIG.stake)+'" /></div></div>';
    html_ticketItems+='<div class="clear"></div>';
    //html_ticketItems+='<div class="summaryItem ratio"><div class="leftSide">'+$LANG['MANIPULATIONCOST']+':</div> <div class="rightSide"><span class="rightSide bold label">'+getNumber(manipulationCost)+'</span></div></div>';
    //html_ticketItems+='<div class="clear"></div>';    
    html_ticketItems+='<div class="summaryItem ratio"><div class="leftSide">'+$LANG['RATIO']+':</div> <div class="rightSide"><span class="rightSide bold label">'+getNumber(ratio)+'</span></div></div>';
    html_ticketItems+='<div class="clear"></div>';
    html_ticketItems+='<div class="summaryItem winning"><div class="leftSide">'+$LANG['WINNINGS']+':</div>  <div class="rightSide"><span class="rightSide bold label">'+getNumber(income)+'</span></div></div>';
    html_ticketItems+='<div class="clear"></div>';

    TICKET_CONFIG.ratio=ratio;
    TICKET_CONFIG.income=income;

		if(TICKET_CONFIG.ticketType==' '){
	    if(TICKET_CONFIG.income>TICKET_CONFIG_CONST.maxCombinationWin){
	      showNotification($LANG['MAXWINNING']+TICKET_CONFIG_CONST.maxCombinationWin+' '+$LANG['CURRENCY']);
	      bConfiguration=false;
	    }
  	}else{
	    if(TICKET_CONFIG.income>TICKET_CONFIG_CONST.maxSystemWin){
	      showNotification($LANG['MAXWINNING']+TICKET_CONFIG_CONST.maxSystemWin+' '+$LANG['CURRENCY']);
	      bConfiguration=false;
	    }  		
  	}
  	
    TICKET_CONFIG.fixedBets=getTicketBetsNo();
    TICKET_CONFIG.systemBets=getTicketBetsNoNonFixed();

    dbg(TICKET_CONFIG.systemMatrix);

    $('ticket-items-system').innerHTML = html_ticketItems;
  }



  function getSystemAllCombinations(){

    var SystemAllCombinations=0;

    var bet_no_sys = getTicketBetsNoNonFixed();

    var noSystemBets = bet_no_sys;

    for(var i=0; i<bet_no_sys;i++){

      if(i<TICKET_CONFIG_CONST.maxSystemBets){

        SystemCombinations = getCombinationsCount(bet_no_sys,i+1);

        if(TICKET_CONFIG.systemMatrix.substr(i,1)=='1')
          SystemAllCombinations+=SystemCombinations;
      }
    }

    return SystemAllCombinations;
  }


  // system calculations

  function calculateSystem(){

    var stake = TICKET_CONFIG.stake;
    var payment = stake * (1+TICKET_CONFIG_CONST.manipulationCost);
    var manipulationCost  = stake - payment;

    dbg("uplata : "+payment);
    dbg("ulog : "+stake);
    dbg("mt : "+manipulationCost);
    
    var ulog1 = new Array();
    var ulogk = new Array();

    var sisdobitak = new Array();

    var ultecajevi = new Array();
    var iztecajevi = new Array();
    var fixtecajevi = new Array();

    var ratio = 1;

    for(BetCode in TICKET_DATA){

      ratio = TICKET_DATA[BetCode][$IDX.tipSelectedValue];

      if(TICKET_DATA[BetCode][$IDX.tipFixed]==1) fixtecajevi.push(ratio);
      else ultecajevi.push(ratio);
    }

    dbg("fixtecajevi : "+fixtecajevi);
    dbg("ultecajevi : "+ultecajevi);

    var fixtecaj = 1;
    if (fixtecajevi.length>0)
      for (var i=0;i<fixtecajevi.length;i++)
        fixtecaj = fixtecaj * fixtecajevi[i];

    dbg("fixtecaj : "+fixtecaj);

    var brojsistema = getTicketBetsNoNonFixed();
    var totalSystems = getTicketBetsNoNonFixed();

    dbg("brojsistema : "+brojsistema);

    SystemAllCombinations = getSystemAllCombinations();

    ulog = 0;
    var ukupnisisdobitak = 0;

    for (var broj=0; broj<brojsistema; broj++)
    {

      ulog1[broj] = 0;
      ulogk[broj] = 0;

      iztecajevi = new Array();

      if(TICKET_CONFIG.systemMatrix.substr(broj,1)=='1') {

        dbg("sistem : "+broj);

        bk = getCombinationsCount(brojsistema,broj);

        dbg("broj kombinacija sistema : "+bk);

        ulog1[broj] = payment/SystemAllCombinations;
        dbg("ulog1["+broj+"] = "+ulog1[broj]+', ulog : '+payment +', ukupnibk : '+SystemAllCombinations);

        //ulogk[broj] = Math.round(ulog1[broj]*bk*100)/100;
        ulogk[broj] = ulog1[broj]*bk;
        dbg("ulogk["+broj+"] = "+ulogk[broj]+", = "+ulog1[broj]+" * "+bk);


        ulog = ulog + ulogk[broj];

        //Kombinacije(broj+1, ultecajevi, 1, iztecajevi);
        calculateSystemRatio(broj+1, ultecajevi, 1, iztecajevi);

        dbg("iztecajevi : "+iztecajevi);

        dbg("dobitak po sistemu : "+iztecajevi[0]*ulogk[broj]);

        sisdobitak[broj] = 0;

        if (iztecajevi.length>0)
          for (var i=0;i<iztecajevi.length;i++)
            sisdobitak[broj] = sisdobitak[broj] + ulogk[broj]/bk*fixtecaj*iztecajevi[i];


        dbg("sisdobitak["+broj+"] : "+sisdobitak[broj]);

        ukupnisisdobitak += sisdobitak[broj];

      }
    }

    dbg("ukupni sis dobitak : "+ukupnisisdobitak);

    return ukupnisisdobitak;

  }


  function FactorialCombinations(n, k1, k2){
    return (Faktorijel(n)/(Faktorijel(k1)*Faktorijel(k2)));
  }


  function getCombinationsCount(n, r){
    if ((r == 0) || (r == n)) return 1;
    else if ((r > n) || (r < 0)) return 0;
    else return FactorialCombinations(n, r, n-r);
  }


  function calculateSystemRatio(n, a, z, D) {
    if (n==0) { D[D.length] = z;  return; }
    for (var j=0;j<a.length;j++) calculateSystemRatio(n-1, a.slice(j+1), z*a[j], D);
    return;
  }


  function getNumber(numValue){

    return numValue.roundEx(2).toStringEx();
  }


  function IzracunajMT(tip, iznos){

    if (tip=="ulog")
      trosak=(iznos * postotrosak) / 100.0;
    if (tip=="uplata")
      trosak=(iznos * postotrosak) / (100.0 + postotrosak);

    return trosak;
  }

}


document.observe("dom:loaded", function() {

  if(eTicketConfig.active){
    BOOKIE.Ticket.init();
  }
});


var $LANG = {}
$LANG['CODE']="Šifra";
$LANG['TEAMS']="Parovi";
$LANG['TIPNAME']="tip";
$LANG['COEFICIENT']="koef";
$LANG['SHOW']="Prikaži sve";
$LANG['CLEAR']="OBRIŠI";
$LANG['SAVE']="Pohrani";
$LANG['PAIRS']="Parovi";
$LANG['RATIO']="Tečaj";
$LANG['WINNINGS']="Dobitak";
$LANG['STAKE']="Ulog";
$LANG['PAYMENT']="Uplata";
$LANG['SYSTEMTICKET']="Sistemski listić";
$LANG['BETSSWITCH']=" zamjenjen sa ";
$LANG['MINIMUMPAYMENT']="Minimalna uplata je ";
$LANG['MAXIMUMPAYMENT']="Maksimalna uplata je ";
$LANG['CURRENCY']=" km";
$LANG['MAXBETS']="Maksimalan broj oklada za odabranu kombinaciju je ";
$LANG['MINBETS']="Minimalan broj oklada za odabranu kombinaciju je ";
$LANG['BETNOTCOMBINABLE']="Par se ne može kombinirati sa parovima na listiću ... ";
$LANG['TICKETNONCOMBINABLE']="Parovi sa listića ne mogu se kombinirati sa ostatkom ponude ... ";
$LANG['MAXWINNING']="Maksimalni dobitak je ";
$LANG['TICKETNOTGENERATED']="Lisić nije generiran ... molimo pokušajte malo kasnije.";
$LANG['MANIPULATIONCOST']="Manip. trošak (%)";

BOOKIE.Ticket.viewport = new function(){

  this.init = function(){

    var eticket_template='';

      new Ajax.Request('ajax/eticket_ajax.php', {
        method: 'post',
        parameters: 'task=getTemplate&template=template_eticket.html',
        onSuccess: function(transport) {

          $('eticket-offer').innerHTML =  transport.responseText;

          // hide system
          $('eticket-systemitems').addClassName('hide');
          $('eticket-ticketinfosystem').addClassName('hide');
        }
      });
  }
}

function dbg(msg){

  if(BOOKIE.configuration.debug){
    if(!Prototype.Browser.IE)
    	if(console)
      	console.log(msg);
  }
}

function log (msg, clear) {

  var logger = document.getElementById('logger');

  if (!logger) {

    logger = document.createElement('DIV');
    logger.id = 'logger';
    logger.className = 'logger';

    document.getElementsByTagName('BODY')[0].appendChild(logger);

    logger = document.getElementById('logger');
  }

  if (clear === true) logger.innerHTML = '';

  if (typeof msg == 'object') {

    for (m in msg) {

      logger.innerHTML += m + ' => ' + msg[m]+'<br>';
    }
  }

  else logger.innerHTML += msg+'<br>';
}

function printError(e) {

  var r = "";

  r += "<strong>"+e.name+"</strong>";
  r += "<p>"+e.fileName + " ["+e.lineNumber+"]</p>";
  r += "<p><b>"+e.message+"</b></p>";
  r += "<pre>"+e.stack+"</pre><hr>";

  return r;
}
