/* ARUBE Auto-Generated Javasctipt */
/* (c) 2008 Rubets.com */
/* www.rubets.com */
/* Copy and reuse of this code is strictly prohibited */
/* All rights reserved */
/*  */

var arube = arube || {};
arube.Utils = arube.Utils || {};

arube.Utils.cookieJar = new CookieJar({
        expires:36000,   /* seconds */
        path: '/arube/'
    });


/* Modal dialog initialization */
arube.Utils.messageObj = new DHTML_modalMessage();	/* We only create one object of this class */
arube.Utils.messageObj.setShadowOffset(5);	/* Large shadow */

arube.Utils.displayMessage = function (url, width, height)
{
        arube.Utils.messageObj.setSource(url);
        arube.Utils.messageObj.setCssClassMessageBox(false);
        arube.Utils.messageObj.setSize(width,height);
        arube.Utils.messageObj.setShadowDivVisible(true);
        arube.Utils.messageObj.display();
};

function arube_Utils_focusHelper()
{
    if ($(this.elementToFocus) != null)
    {
        Form.Element.focus(this.elementToFocus);
    }
    this.stop();
};

arube.Utils.displayMessageEx = function (url, width, height, elementToFocus)
{
    arube.Utils.displayMessage(url, width, height);
    var pe = new PeriodicalExecuter(arube_Utils_focusHelper, 1);
    pe.elementToFocus = elementToFocus;
};

arube.Utils.refreshMessage = function (width, height)
{
        arube.Utils.messageObj.setCssClassMessageBox(false);
        if (width != null && height != null)
          arube.Utils.messageObj.setSize(width,height);
        arube.Utils.messageObj.setShadowDivVisible(true);
        arube.Utils.messageObj.display();
};

arube.Utils.undisplayMessage = function(reload)
{
    arube.Utils.messageObj.close();
	if (reload) {
	    window.location=window.location;
	}
};


/* parses a string of parameters in format
 * key1=value1;key2=value2;...;keyN=valueN
 * and returns a hash  param[key1..N] = values1..N 
 **/
arube.Utils.parseServerResponse = function(resp, separator) {
    if (typeof separator == 'undefined') {
        separator=";";
    }
    var pairs = resp.split(separator);
    var params = new Array();
    for(i=0; i < pairs.length; i++) {
        var arr = pairs[i].split("=");
        if (arr.length == 2)
          params[ arr[0] ] = arr[1];
    }
    return params;
};

arube.Utils.updateUrl = function(url, nameVal, val)
{
    url = '' + url;
    var sharpSuffix = '';
    var suffix = nameVal + '=';
    
    /* cut off the part after sharp */
    var sharpIndex = url.indexOf('#');
    if (sharpIndex != -1) {
        sharpSuffix = url.substr( sharpIndex, url.length - sharpIndex );
        url = url.substr( 0, sharpIndex );
    }
    
    if (url.indexOf('?') != -1) {
        var startIndex = url.indexOf(suffix);
        if (startIndex != -1) {
            var endIndex = url.indexOf('&', startIndex + 1 );
            if (endIndex == -1)
                endIndex = url.length;
            var oldVal = url.substr(url.indexOf(suffix), endIndex - startIndex );
            url = url.replace( oldVal, suffix + val );
        }
        else
            url += '&' + suffix + val;
    }
    else {
        url += '?' + suffix + val;
    }
    url += sharpSuffix;
    return url;
};

arube.Utils.fixFloat = function(num) {
    var str = "" + num;
    if (str.indexOf(',', 0) != -1) {
        str = str.replace( ',', '.' );
    }
    return parseFloat(str);
};

/* language switcher function */
arube.Utils.changeLang = function(lang) 
{
    window.location = arube.Utils.updateUrl( window.location, 'lang', lang );
    return false;
};

arube.Utils.getElementsByClass = function(klasse){
  var class_arr = new Array();
  var all_tags = document.getElementsByTagName("*");

  for(i=0; i < all_tags.length; i++){
    if(all_tags[i].className == klasse){
      class_arr.push(all_tags[i]);
    }
  }

  return class_arr;
};

/* increases/decreases edit box value. Useful for up/down arrows */
arube.Utils.increaseEditBox = function(elId, delta) {
    var elem = document.getElementById( elId );
    if (elem == null) 
        return;
    if (isNaN(elem.value)) 
        elem.value = "1.00";
    else {
        elem.value = Math.round( (parseFloat(elem.value) +  parseFloat(delta)) * 100 ) / 100;
    }
};

arube.Utils.openLocalization = function(id) {
    $(id).style.display="";
    $(id+'_openBtn').style.display="none";
};

arube.Utils.closeLocalization = function(id) {
    $(id).style.display="none";
    $(id+'_openBtn').style.display="";
};

    
arube.Utils.formatCurrency = function(amount, currency, dp) {
    dp = (dp == null) ? 2 : dp;
    var multiplier = 1;
    var padding = '.';
    for(i = 0; i < dp; i++) {
        multiplier *= 10;
        padding += '0';
    }
    var num = isNaN(amount)?0:amount;
    var res = Math.abs( Math.round( num*multiplier ) / multiplier ) + '';
    
    var parts = res.split(".");
    if (parts[1] == null)
        res += padding;
    else
    if (parts[1].length < dp) {
      for(i = parts[1].length; i < dp; i++)
        res += '0';
    }
    if (currency != null) {
        res = arube.Utils.decodeCurrency( currency, true ) + res;
    }
    if (amount < 0) 
        res = "-" + res;
    return res;
};

arube.Utils.formatOdds = function(odds) {
    return arube.Utils.formatNumber(odds, 2);
};

arube.Utils.formatNumber = function(amount, dp) {
    dp = (dp == null) ? 2 : dp;
    var multiplier = 1;
    var padding = '.';
    for(i = 0; i < dp; i++) {
        multiplier *= 10;
        padding += '0';
    }
    var num = isNaN(amount)?0:amount;
    var res = Math.abs( Math.round( num*multiplier ) / multiplier ) + '';

    var parts = res.split(".");
    if (parts[1] == null)
        res += padding;
    else
    if (parts[1].length < dp) {
      for(i = parts[1].length; i < dp; i++)
        res += '0';
    }
    return res;
};


arube.Utils.marketDelimiter = '¬';
arube.Utils.marketParamDelimiter = '¤';
arube.Utils.pathDelimiter = '~';

arube.Utils.stripLastPathElement = function(path) {
        var newPath = path;
        var index = path.lastIndexOf( arube.Utils.pathDelimiter );
        if (index != -1)
            newPath = path.substr( 0, index ); 
        return newPath;
};

arube.Utils.getMarketSetFromPath = function(path) {
        var marketSet = path;
        var index = path.indexOf( arube.Utils.pathDelimiter );
        if (index != -1)
            marketSet = path.substr( 0, index );
        return marketSet;
};

/* if shortStr == true, func returns the symbol like $, Â£, otherwise it returns EUR, USD, etc.. */
arube.Utils.decodeCurrency = function(code, shortStr) {
    switch(parseInt(code)) {
        case 10:
            return (shortStr == true) ? '$' : 'ДОЛ.США';
        case 11:
            return (shortStr == true) ? 'f' : 'СТАРОФЕТ';
        case 12:
            return (shortStr == true) ? 'F' : 'ФЕТ';
        case 13:
            return (shortStr == true) ? 'C' : 'КУР(тест)';
        case 8:
            return (shortStr == true) ? '&euro;' : 'ЕВРО';
        case 5:
            return (shortStr == true) ? 'р' : 'РУБ';
        default:
            return (shortStr == true) ? '?' : 'НЕИЗВ.';
    }
};

arube.Utils.errorCodes= {
     1: "ок",
     2: "Ошибка",
     3: "Добавлено",
     4: "Ошибка",
     5: "ID не существует",
     20: "Исход с таким номером не существует",
     21: "Не достаточно элементов для удаления",
     22: "Событие с таким номером не существует",
     23: "Не может быть удалено, уже используется",
     24: "Удачно",
     25: "Арена такого типа уже зарегистрирована",
     26: "Ошибка! Должно быть не менее 2х исходов",
     27: "Ошибка! Арена с таким номером не существует",
     28: "Ошибка! Тип арены не зарегистрирован",
     29: "Ошибка! Условие пари не обнаружено",
     30: "Ошибка! Ожидаются параметры пари",
     31: "Ошибка! Спортивный период неизвестен",
     32: "Такое пари уже существует",
     100: "Недостаточно средств на счету",
     101: "Ставка не может быть менее",
     
     102 :"Коэфф должен быть > 1.01 и < 1000.0",
     103: "У Вас нет этой валюты",
     104: "Ваш кошелёк заблокирован",
     105: "Вы не можете сейчас делать ставки",
     106: "Вы не автор данной ставки",
     107: "Пари уже заключено или ставка отменена",
     108: "Величина ставки превышает допустимый лимит",
     109: "Нельзя принимать свои ставки",
     200: "Невозможно выполнить операцию",
     201: "Вы не вошли в систему",
     202: "Приложение не инициализировано"
};

arube.Utils.decodeError = function(code) {
      msg = arube.Utils.errorCodes[code];
      if (typeof msg == 'undefined') {
              msg = "Ошибка";
      }
      return msg;
};

arube.Utils.betStatus = {
    1 : "Непарная",
    2 : "Парная",
    3 : "Возврат",
    5 : "Аннулир.",
    4 : "Рассчитана",
    0 : "N/A"
};

arube.Utils.eventStatus = {
    0 : "Не началось",
    1 : "Не началось",
    3 : "В игре",
    4 : "Завершено",
    5 : "Отменено",
    10 : "Не началось",
    11 : "Declined",
    12 : "Отложено",
    13 : "Задержано",
    14 : "Приостановлено"
};

arube.Utils.arenaStatus = {
    0 : "N/A",
    1 : "Открыта для ставок",
    2 : "Закрыта",
    4 : "Завершена"
};

/***********  MARKET TREE OPERATIONS  ************/
arube.MarketList = arube.MarketList || {};
arube.MarketList.marketHash = new Hash();
arube.MarketList.rootMarkets = new Hash();
arube.MarketList.currentPath = "";

arube.MarketList.openMarketPath = function(itemType, path) {

    /* if nothig was changed - stop reloading */
    if (path == arube.MarketList.currentPath )
        return;

    if (itemType != 2) {
        if (itemType == 3) {
            return;
        }
        if (path == null) path = "";
        var viewAvailable = arube.MarketList.openTreePath(path);
        /* uncomment this if root items should not cause page reload while browsing events view
        if (viewAvailable == false && (typeof market_id != 'undefined' || marketSet == arube.MarketList.currentMarketSet)) { */
        if (viewAvailable == false) {
                return;
        }
    }

    var currMarketSet = arube.Utils.getMarketSetFromPath(arube.MarketList.currentPath);
    var newMarketSet = arube.Utils.getMarketSetFromPath(path);

    if (itemType == 0) { /* market tree */
        if (typeof reloadEventViewer == 'function' && currMarketSet == newMarketSet) {
            arube.MarketList.currentPath = path;
            reloadEventViewer(path);
            return;
        }
        if (typeof turnOnEventViewerUpdate == 'function')
                turnOnEventViewerUpdate();
        arube.showProgress();
        var newPath = "/arube";
        if (path != null && path.indexOf('w_') != -1) {
            newPath += "/go/home/wagers?q=" + path;
        }
        else
        if (path != null && path.indexOf('line_') != -1) {
            newPath += "/go/line/browse?q=" + path;
        }
        else {
            newPath += "/go/home/events" + (path != null ? ('?q=' + path) : "");
        }
        window.location=newPath;
    }
    else
    if (itemType == 1 || itemType == 2) { /* event or arena */
        if (typeof turnOnEventViewerUpdate == 'function')
                turnOnEventViewerUpdate();
        arube.showProgress();
        window.location="/arube/arena/v.htm" + (path != null ? ('?q=' + path) : "");
    }

};

/* adds a single market to the tree */
arube.MarketList.addSingleMarket = function(market, visible, style_suffix) {
    var newA = document.createElement('a');
    newA.setAttribute('id', market['path'] );
    if (market['type'] != 3) {
        newA.className =  (market['level'] == 1 ?  market['style'] : ("level" + (market['level']-1))) + style_suffix;
        newA.href = "javascript:arube.MarketList.openMarketPath(" + market['type'] +", '" + market['path'] + "')";
    }
    else {
        newA.className =  "level_datesep";
        newA.href = "javascript:";
    }

    var contentElem = newA;
    if (market['level'] <= 1) {
        var newFont = document.createElement('font');
        newA.appendChild(newFont);
        contentElem = newFont;
    }
    if (typeof market['marketSymbol'] != 'undefined' && market['marketSymbol'] != '') {
        contentElem.innerHTML = '<span class="arenaType">' + market['marketSymbol'] +'</span>';
    }
    contentElem.innerHTML += style_suffix == '' ? market['name'] : ("<b>" + market['name']  +"</b>");
    newA.style.display = visible;
    $('marketList').appendChild( newA );
};

arube.MarketList.parseMarkets = function(markets) {
    arube.MarketList.marketHash = new Hash();
    var allItems = markets.split( arube.Utils.marketDelimiter );
    for(var index = 0; index < allItems.length; index++) {
        var item = allItems[index];
        var marketItems = item.split( arube.Utils.marketParamDelimiter );
        var market = new Array();
        market['path'] = arube.MarketList.currentMarketSet + arube.Utils.pathDelimiter + marketItems[0];
        market['eventViewExists'] = marketItems[1];
        market['type'] = marketItems[2];
        market['arenaSymbol'] = marketItems[3];
        market['name'] = marketItems[4];
        market['style'] = marketItems[5];
        market['set'] = arube.MarketList.currentMarketSet;
        arube.MarketList.marketHash.set( market['path'], market );
    }
    /* fill children */
    arube.MarketList.rootMarkets = new Hash();
    arube.MarketList.marketHash.each(function(pair) {
        var path = pair.key;
        var market = pair.value;
        market['level'] = arube.MarketList.calculatePathLevel(path);
        if (market['level'] > 1) {
            var parentPath = arube.MarketList.trimTail( market['path'], 1 );
            market['parent'] = arube.MarketList.marketHash.get( parentPath );
            if (typeof market['parent'] != 'undefined') {
                if (typeof market['parent']['children'] == 'undefined') {
                    market['parent']['children'] = new Hash();
                }
                market['parent']['children'].set( market['path'], market );
            }
            else {
                //alert( 'parent not found for ' + market['path'] );
            }
        }
        else {
            arube.MarketList.rootMarkets.set( market['path'], market );
        }
    });
};

/* removes tail from the path. e.g.: for path 100~200~300~400 it will return 100~200~300 */
arube.MarketList.trimTail = function(path, skipAmount) {
    if (typeof path == 'undefined' || path == "")
        return path;
    if (typeof skipAmount == 'undefined' || isNaN(skipAmount)) {
        skipAmount = 1;
    }
    var pathElems = path.split(arube.Utils.pathDelimiter);
    var result = '';
    for(var i=0; i < pathElems.length-skipAmount; i++) {
        result += pathElems[i] + (i < (pathElems.length-skipAmount-1) ? arube.Utils.pathDelimiter : '');
    }
    return result;
};

/* returns the tail of the path. e.g.: for path 100~200~300~400 it will return 400 */
arube.MarketList.getTail = function(path, indexFromBack) {
    if (typeof path == 'undefined' || path == "") 
        return path;
    if (typeof indexFromBack == 'undefined' || isNaN(indexFromBack)) {
        indexFromBack = 0;
    }
    var pathElems = path.split(arube.Utils.pathDelimiter);
    return pathElems[pathElems.length-1-indexFromBack];
};

/* for path = all~100~200~300~400 returns a list like:
* all~100
* all~100~200
* all~100~200~300
* all~100~200~300~400 */
arube.MarketList.getPathList = function(path) {
    var lst = new Hash();
    var pathElems = path.split(arube.Utils.pathDelimiter);
    var tmpPath = pathElems[0];
    for(var index = 1; index < pathElems.length; index++) {
        if (pathElems[index] != "" && pathElems[index] != null) {
            tmpPath += (index == 0 ? "" : arube.Utils.pathDelimiter) + pathElems[index];
            lst.set(tmpPath, 1);
        }
    }
    return lst;
};

arube.MarketList.calculatePathLevel = function(path) {
    return path.split( arube.Utils.pathDelimiter ).length - 1;
};

/* returns 0 if testPath doesn't belong to any path in searchList
*         1 if testPath was found in searchList (or part of it)
*         2 if testPath is an extension of last element of searchList, i.e. children of opened path */
arube.MarketList.isPathInList = function(searchList, testPath) {
    /* skip >N+1 levels  */
    if (arube.MarketList.calculatePathLevel(testPath) > searchList.length+1)
        return 0;

    for(var index = 0; index < searchList.length; index++) {
        if ( (index == searchList.length -1  && testPath.match(new RegExp("^" + searchList[index] + arube.Utils.pathDelimiter +  "{1}.*" ) ) ) ||
                testPath.match(new RegExp("^" + searchList[index] + "$" ) ) ) {
                return ((index == searchList.length -1 && searchList[index] != testPath) ? 2 : 1);
        }
    }
    return 0;
};

arube.MarketList.openTreePath = function(path) {
    var retMarketViewExists = false;
    var pathList = null;
    if (path != "")
        pathList = arube.MarketList.getPathList(path);

    var marketList = arube.MarketList.rootMarkets;
    $('marketList').innerHTML = '';
    if (pathList != null) {
        pathList.each(function(pair) {
            var market = arube.MarketList.marketHash.get(pair.key);
            marketList = (typeof market == 'undefined') ? undefined : market['children'];
            if (typeof marketList != 'undefined') {
                arube.MarketList.addSingleMarket(market, '', '_select');
            }
            else
            if (typeof market != 'undefined' && typeof market['parent'] != 'undefined') {
                marketList = market['parent']['children'];
            }
        });
    }
    if (typeof marketList != 'undefined') {
        marketList.each(function(pair) {
            if (pathList != null && typeof pathList.get(pair.key) != 'undefined') {
                arube.MarketList.addSingleMarket(pair.value, '', '_select');
            }
            else {
                arube.MarketList.addSingleMarket(pair.value, '', '');
            }
        });
    }
    var market = arube.MarketList.marketHash.get(path);
    return (typeof market != 'undefined' ? market['eventViewExists'] : true);
};

arube.ShowLogin = function() {
    arube.Utils.displayMessageEx('/arube/home/login.htm', 350, 250, 'login_login');
};

arube.ModalWindow = Class.create({
        initialize: function(){
                this.cont = "";
                this.overlay = "";
                this.win = "";
                this.container = new Element('div', {id:'modal-container'});
                var container = this.container;
                $(document.body).insert({bottom:container});
        },
        show: function(element, overlay, needClose){
                this.close();
                this.cont = element;
                if(overlay) this.overlay = this.container.appendChild(new Element('div', {'class':'modal-overlay'}));
                this.win = this.container.appendChild(new Element('div', {'class':'modal-window'}));
                this.win.insert({bottom:this.cont});
        		if (typeof needClose != 'undefined' && needClose) {
                    var closeBtn = new Element('div',{id:'modal-close-btn'}).update('[Закрыть]');
        			this.win.insert({bottom:closeBtn});
        			$("modal-close-btn").observe('click', this.close.bind(this));
        		}
        },
        close: function(e){
                if(e) e.stop();
                this.container.childElements().invoke('remove');
        }
});

arube.progressIndicator;
arube.progressIndicatorContent;

arube.initProgressIndicator = function() {
    arube.progressIndicatorContent = new Element('div',{'class':'ProgressIndicator'});
    arube.progressIndicatorContent.update( '<table cellpadding="0" cellspacing="0" border="0"><tr>' +
            '<td><img src="/arb_resources/imgs/ajax-loader.gif"></td>' +
            '<td class="text-msg">Загружается, пожалуйста подождите....</td>' +
            '</tr></table>' );
    arube.progressIndicator = new arube.ModalWindow;
};

arube.showProgress = function(modal) {
    if (typeof modal != 'undefined') {
        modal = false;
    }
    arube.progressIndicator.show( arube.progressIndicatorContent, modal, false );
    return false;
};

arube.hideProgress = function(sofort) {
    if (typeof sofort == 'undefined' || sofort != true) {
        window.setTimeout('arube.hideProgress(true)',400);
    }
    else {
        arube.progressIndicator.close();
    }
};

arube.displayError = function(text) {
    var win = new arube.ModalWindow;
    var cont = new Element('div', {'class':'ErrorMessage'});
    cont.update( '<table cellpadding="0" cellspacing="0" border="0"><tr>' +
            '<td><img src="/arb_resources/imgs/error-icon.gif"></td>' +
            '<td class="text-msg">' + text + '</td>' +
            '</tr></table>' );
    win.show( cont, true, true );
};

arube.displayWarning = function(text) {
    var win = new arube.ModalWindow;
    var cont = new Element('div', {'class':'ErrorMessage'});
    cont.update( '<table cellpadding="0" cellspacing="0" border="0"><tr>' +
            '<td><img src="/arb_resources/imgs/warn-icon.gif"></td>' +
            '<td class="text-msg">' + text + '</td>' +
            '</tr></table>' );
    win.show( cont, true, true );
};

arube.doLogin = function(login, pass) {
   ajaxFacade.tryLogin(login, pass, arube.doLoginResponse);
};

arube.doLoginResponse = function(res) {
    var msg;
    switch (res) {
        case 0:
            msg = 'Логин/Пароль неверны';
            break;
        case 1:
            msg = 'В доступе отказано';
            break;
        case 3:
            msg = 'Аккаунт не активирован';
            break;
        case 4:
            msg = 'Аккаунт заблокирован';
            break;
        case 5:
            msg = 'Слишком много попыток. Попробуйте позже.';
            break;
        case 2:
            if ($('loginPopup')) {
                arube.Utils.undisplayMessage(true);
            }
            else {
                window.location=window.location;
            }
            return;
    }
    if ($('loginPopup')) {
        var code = '<br/><span class="error-box">' + msg + '</span><br/><br/>';
        dwr.util.setValue("login_errors", code, { escapeHtml:false } );
    }
    else {
        alert(msg);
    }
};

arube.Utils.highlightEvent = function(event_id, highlight, elem)
{
    arube.showProgress ();
    ajaxFacade.highlightEvent( event_id, highlight,
        function(resp) { arube.hideProgress(); if (resp != 1) { alert(arube.Utils.decodeError(resp)); }; elem.hide(); } );
};


arube.Utils.DMChecker = function()
{
    setTimeout(function(){
        if (typeof jQuery != 'undefined') {
            alert("Внимание, в вашей версии браузера обнаружен плагин Download Master. Для корректной работы сайта убедительная просьба его отключить");
            window.location="http://docs.rubets.com/index.php?id=42";
        }
    }, 5000);
};
