/**
 * Библиотека FLINE (FonBet Line)
 */

function array_search(needle, haystack){
	for(var i in haystack){
		if(haystack[i] == needle) return i;
	}
	return false;
}

function html_set_class(obj, className){
	obj.setAttribute('class', className); 		//для нормальных броузеров
	obj.setAttribute('className', className); //для IE
}
function html_get_class(obj){
	var res = obj.getAttribute('class'); 		//для нормальных броузеров
  if(res == null){
		res = obj.getAttribute('className'); //для IE
  }
  return res;
}
/*
function html_set_style(obj, styleDesc){
	obj.style.cssText = styleDesc;
	obj.setAttribute('style', styleDesc); // для Opera
}
*/
function html_show_hide(obj, isVisible, isTableRow){
	if(isVisible){
	  if(isTableRow){
	    obj.style.display = 'block';                     //для IE
			try{obj.style.display = 'table-row';}catch(e){}  //для Opera/Firefox, try/catch - чтобы в IE не было ошибки
	  }else{
	    obj.style.display = 'block';
	  }
	}else{
		obj.style.display = 'none';
	}
}


function fline_uniqid(){
  var dt = new Date();
  var uid = dt.valueOf()+Math.random();
  return uid;
}

/**
 * Присавивает объекту новое имя класса с проверкой
 * что текущее равно указанному
 */
function fline_set_class_with_check(objId, newClassName, oldClassName){
  var obj = document.getElementById(objId);
  if(obj == null) return;
  var currentClassName = html_get_class(obj);
  //alert(currentClassName + ' == ' + oldClassName);
  if(currentClassName == oldClassName){
  	html_set_class(obj, newClassName);
  }else{
    FLINE_Log.notice('fline_set_class_with_check', 'Check failed. objId = '+objId+'; oldClassName = '+oldClassName+'; currentClassName =  '+currentClassName+'; newClassName = '+newClassName+';');
  }
}
function FException(message){
    this.message = message;
    this.name = "FException";
}
FException.prototype.toString = function(){
    return this.name+": "+message;
}
/**
 * Класс таймера
 * @param interval время до срабатывания таймера в миллисекундах, после срабатывания вызывает onTimeout
 * @param delta интервал (в миллисекундах) между запусками функции onDelta - промежуточные действия во время работый таймера
 */
function FTimer(interval, delta) {
    this.nativeTimer = null;
    this.startTime = null;
    this.endTime = null;
    this.onTimeout = null; //функция для запуска после окончания таймера
    this.onDelta = null;   //функция для запуска после окончания интервала
    
    if(interval == null) throw new FException("Interval is null");
    this.interval = interval;
    if(delta == null) delta = interval;
    if(delta <= interval){
        this.delta = delta;
    }else{
        throw new FException("Delta ("+delta+") should be less or equal to interval ("+interval+")");
    }
}
FTimer.prototype.start = function() {
    if(this.interval == 0) return;
    this.startTime = new Date();
    this._createNativeTimer(this.delta);
}
FTimer.prototype.cancel = function() {
    if(this.nativeTimer == null) return;
    window.clearTimeout(this.nativeTimer);
}
FTimer.prototype.getTimeFromStart = function(){
    if(this.startTime == null) return 0;
    var now = new Date();
    return now.valueOf() - this.startTime.valueOf();
}
FTimer.prototype.getTimeToEnd = function(){
    var rest = this.interval - this.getTimeFromStart();
    return (rest < 0)?0:rest;
}
FTimer.prototype._createNativeTimer = function(msec){
    var me = this;
    this.nativeTimer = window.setTimeout(function(){me._onNativeTimeout();}, msec);
}
FTimer.prototype._onNativeTimeout = function(){
    var elapsed = this.getTimeFromStart();
    if(elapsed < this.interval){
	var rest = this.interval - elapsed;
	if(rest < this.delta){
	    this._createNativeTimer(rest);
	}else{
	    this._createNativeTimer(this.delta);
	}
	if(this.onDelta != null){
	    this.onDelta(this);
	}
    }else{
	if(this.onTimeout != null){
	    this.onTimeout(this);
	}
    }
}
loadingJSLoaded++;