﻿var noKlient = 4;
var defaultKlient = 4;
var timeout1 = 6000;
var maxVaha = 100; //vaha = [1..max]
var vaha = new Array();
var pokus = new Array();

var cookieLimit = 35;   //dni
var cookieName = 'klient';
var newPreferedCookie = false;
var preferedKlient = '';
var myPreferedKlient = '';
var callClientOk = false;

var fTimeOut = 0;
var callCount = 0;
// ---------------------------------------------------------------


function BackFromServer(a_htp) {
  var a_KlientBack = '';
  var a_KlientVaha = 0;

  a_KlientBack = a_htp.charAt(1);

  if ( (a_KlientBack != null) && (a_KlientBack != '') && (a_KlientBack >= 1) && (a_KlientBack <= noKlient ) ) {
    pokus[a_KlientBack]++;
    a_KlientVaha = a_htp.substring(3,a_htp.length);
    if ( (a_KlientVaha != null) && (a_KlientVaha != '') ) {
      a_KlientVaha = a_KlientVaha * 1;
      if ( (a_KlientVaha >= 0) && (a_KlientVaha <= maxVaha ) ) {
        vaha[a_KlientBack] = a_KlientVaha;
        vaha[0] = vaha[0] + 1;
        callCount ++;
        //fast call for cookies client
        if ( myPreferedKlient != '' ) {
          if ( myPreferedKlient == a_KlientBack ) {
            clearTimeout(fTimeOut);
            KlientOk(a_KlientBack);
            return;
          }
        }
        else {
          if ( preferedKlient == a_KlientBack ) {
            clearTimeout(fTimeOut);
            KlientOk(a_KlientBack);
            return;
          }
        }
      }
    }
  }

  //faster call without Timeout
  if ( callCount == noKlient ) {
    clearTimeout(fTimeOut);
    KlientOk(0);
  }
}

// ----------------------------------------------------------------
function Call(klient) {
  var call_Raiffeisenbank = null;
  var v_htp = '';

  v_htp = 'https://klient'+klient+'.rb.cz'+'/ebts/version_02'+lang+'/'+ banka +'.html'
  document.location = v_htp;

  return true;
}

function GetBestClient() {
  var klient = 0;

  //klient from cookie
  if ( preferedKlient != '' ) {
    if ( vaha[preferedKlient] > 0 ) {
      //call prefered client
      return preferedKlient;
    }
  }

  if ( vaha[0] > 0 )
    newPreferedCookie = true;

  if ( vaha[0] == 1 ) {
    //only one klient from carousel
    for (var v_cnt = 1; v_cnt <= noKlient; v_cnt++) {
      if ( vaha[v_cnt] > 0 ) {
        return v_cnt;
      }
    }
  }

  if ( vaha[0] == 0 ) {
    // no respond - random klient
    klient = Math.ceil(Math.random()*4);
    if ( ( klient < 1 ) || (klient > noKlient) ) {
      klient = defaultKlient;
    }
    vaha[klient] = 5;
    if ( myPreferedKlient != '' )
      vaha[myPreferedKlient] = vaha[myPreferedKlient] + 5;
    else
      if ( preferedKlient != '' )
        vaha[preferedKlient] = vaha[preferedKlient] + 5;

    newPreferedCookie = true;
  }

  //balancing
  var sum = 0;
  var no = 0;
  for (var v_cnt = 1; v_cnt <= noKlient; v_cnt++) {
    if ( vaha[v_cnt] > 0 ) {
      sum = sum + vaha[v_cnt];
      no++;
    }
  }
  var k = (Math.random()*sum);
  sum = 0;
  for (var v_cnt = 1; v_cnt <= noKlient; v_cnt++) {
    if ( vaha[v_cnt] > 0 ) {
      sum = sum + vaha[v_cnt];
      if ( sum >= k ) {
        klient = v_cnt;
        break;
      }
    }
  }
  //end balancing

  if ( klient == 0 )
    klient = defaultKlient;

  return klient;
}

function KlientOk(a_Klient) {
  if ( !callClientOk ) {
    if ( a_Klient == 0 )
      a_Klient = GetBestClient();

    //call best klient URL
    callClientOk = Call(a_Klient);

    //cookie
    if ( newPreferedCookie ) {
      SetCookie(cookieName, a_Klient, cookieLimit);
    }
  }
}


// begin

//my prefered klient from cookie setting by client
myPreferedKlient = GetCookie('prefered');
//prefered klient from cookie
preferedKlient = GetCookie(cookieName);
if ( preferedKlient != '' ) {
  //cookie exist
  if ( ( preferedKlient < 1) || (preferedKlient > noKlient) ) {
    preferedKlient = '';
  }
}

for (var v_cnt = 0; v_cnt <= noKlient; v_cnt++) {
  vaha[v_cnt] = 0;
  pokus[v_cnt] = 0;
}

fTimeOut = setTimeout("KlientOk(0);", timeout1);


