function interval(actIntervals) {
	this.intervals = {
		"0" : {
			"left" : 0,
			"right" : 70,
			"moveToPoint" : 25
		},
		"1" : {
			"left" : 70,
			"right" : 165,
			"moveToPoint" : 107
		},
		"2" : {
			"left" : 165,
			"right" : 265,
			"moveToPoint" : 208
		},
		"3" : {
			"left" : 265,
			"right" : 370,
			"moveToPoint" : 300
			// уточнить значение крайнего интервала
		}
	};
	this.resultIntervals = {
		"0" : {
			"left" : 0,
			"right" : 70,
			"moveToPoint" : 25
		},
		"1" : {
			"left" : 70,
			"right" : 165,
			"moveToPoint" : 107
		},
		
		"2" : {
			"left" : 165,
			"right" : 265,
			"moveToPoint" : 208
		},
		"3" : {
			"left" : 265,
			"right" : 370,
			"moveToPoint" : 300
			// уточнить значение крайнего интервала
		}
	};

	if (typeof actIntervals === "object") {
		this.initIntervalsFromArray(actIntervals)
	} else
		this.activeIntervals = [1, 1, 1, 1];

	this.recalcIntervals();
};

/**
 * 
 */
interval.prototype.initIntervalsFromArray = function(intervals) {
	this.activeIntervals = intervals;
};

/**
 * 
 */
interval.prototype.recalcIntervals = function() {
	var i;
	for (i = 0; i < this.activeIntervals.length; i++) {
		// console.log(this.activeIntervals[i] + '/r/n');

		if (0 == this.activeIntervals[i]) {
			this.intervalChange(i);
		} else { // 1 == this.activeIntervals[i]
			 this.resultIntervals[i].disactivated = false;//this.resultIntervals[i] = this.intervals[i];//этот интервал уже изменен прошлыми обработками предидущих интервалов и перезаписывать его нельзя
		}

	}
};

/**
 * 
 */
interval.prototype.intervalChange = function(i) {
	
	switch(i) {
		case 0:
			//тут мы не боимся передать размер интервала правому НЕактивному интервалу, так как он будет обработан следующим в цикле и передаст весь свйо размер соседнему к нему активному
			this.resultIntervals[i+1].left -= this.intervals[i].right*1;
			this.resultIntervals[i].disactivated = true;
			return;
			
		case 1:
			if ((1 == this.activeIntervals[i-1])&&(1 == this.activeIntervals[i+1])){// Если справа и слева от
				// неактивного интервала
				// находятся активные, то он
				// отдает половину левому и
				// половину правому
				this.resultIntervals[i-1].right += (this.resultIntervals[i].right*1 - this.resultIntervals[i].left*1)/2;
				this.resultIntervals[i+1].left -= (this.resultIntervals[i].right*1 - this.resultIntervals[i].left*1)/2;
				this.resultIntervals[i].disactivated = true;
				
				
			};
			if ((0 == this.activeIntervals[i-1])&& (1 == this.activeIntervals[i + 1])) {
				//this.resultIntervals[i+1].left -= (this.intervals[i].right*1 - this.intervals[i].left*1);
				this.resultIntervals[i+1].left -= this.resultIntervals[i].right*1;
				this.resultIntervals[i].disactivated = true;
			};
			if ((1 == this.activeIntervals[i-1])&& (0 == this.activeIntervals[i + 1])) {
				this.resultIntervals[i-1].right = this.resultIntervals[i].right*1 ;
				this.resultIntervals[i].disactivated = true;
			};
			if ((0 == this.activeIntervals[i-1])&& (0 == this.activeIntervals[i + 1])) {
				this.resultIntervals[i+1].left -= (this.resultIntervals[i].right*1-this.resultIntervals[i].left*1);
				this.resultIntervals[i].disactivated = true;
			};
			
			return;
			
		case 2:
			if ((1 == this.activeIntervals[i-1])&&(1 == this.activeIntervals[i+1])){// Если справа и слева от
				// неактивного интервала
				// находятся активные, то он
				// отдает половину левому и
				// половину правому
				this.resultIntervals[i-1].right += (this.resultIntervals[i].right*1 - this.resultIntervals[i].left*1)/2;
				this.resultIntervals[i+1].left -= (this.resultIntervals[i].right*1 - this.resultIntervals[i].left*1)/2;
				this.resultIntervals[i].disactivated = true;
				
			};
			if ((0 == this.activeIntervals[i-1])&& (1 == this.activeIntervals[i + 1])) {
				this.resultIntervals[i+1].left -= (this.resultIntervals[i].right*1 - this.resultIntervals[i].left*1) ;
				this.resultIntervals[i].disactivated = true;
			};
			if ((1 == this.activeIntervals[i-1])&& (0 == this.activeIntervals[i + 1])) {
				this.resultIntervals[i-1].right += (this.resultIntervals[i].right*1 - this.resultIntervals[i].left*1) ;
				this.resultIntervals[i].disactivated = true;
			};
			if ((0 == this.activeIntervals[i-1])&& (0 == this.activeIntervals[i + 1])) {//должны передать вес самому левому активному, тоесть не соседу слева а через 1, так как сосед уже прошел в цикле
				this.resultIntervals[i-2].right += (this.resultIntervals[i].right*1 - this.resultIntervals[i].left*1);
				this.resultIntervals[i].disactivated = true;
			};
			return;
			
		case 3:
			if ((0 == this.activeIntervals[i-1])){//если слева неактивный интервал, мы должны передать весь размер текущего интервала не ему а самому левому активному
				if(0 == this.activeIntervals[i-2]){//если неактивен и второй слева интервал, сразу передаем вес третьему слева, так как он последний и его активность проверять ненужно, т.к 1 из 4 интервалов всегда активен
					this.resultIntervals[i-3].right = this.resultIntervals[i].right*1 ;
					this.resultIntervals[i].disactivated = true;
				}else{
					this.resultIntervals[i-2].right = this.resultIntervals[i].right*1;
					this.resultIntervals[i].disactivated = true;
				}
			}else{//если слева активный интервал, сразу передаем ему размер
				this.resultIntervals[i-1].right = this.resultIntervals[i].right*1;
				this.resultIntervals[i].disactivated = true;
			}
			return;
	}
	
};

/* Тестовая инициализация

regions = new Array(0, 1, 1, 0);
smth = new interval(regions);
for(i=0;i<4;i++){
	if(smth.resultIntervals[i].disactivated === false){
		console.log(i+' left:'+smth.resultIntervals[i].left);
		console.log(i+' right:'+smth.resultIntervals[i].right);	
	}
}

*/








