// Переключатель в стиле ipnone вер. 1.0
//Обязательные элементв разметки
//Ширина ползунка должна ровняться ширине кнопки



(function(){
//Служебные функции
f={};
//Вешаем обработчики событий
f.addEvent=function (elem, type, handler){
  if (elem.addEventListener){
    elem.addEventListener(type, handler, false)
  } else {
    elem.attachEvent("on"+type, handler)
  }
}
//Удаляем обработчик событий
f.removeEvent=function (elem, type, handler){
  if (elem.removeEventListener){
    elem.removeEventListener(type, handler, false)
  } else {
    elem.detachEvent("on"+type, handler)
  }
}
//остановить всплытие
f.stopEvent=function(event) {
    event = event || window.event // кросс-браузерно
    if (event.stopPropagation) {
        // Вариант стандарта W3C:
        event.stopPropagation()
    } else {
        // Вариант Internet Explorer:
        event.cancelBubble = true
    }
}

////
document.body.onmousedown=function(){return false};
document.body.onselectstart=function(){return false};
for (var i=0, j=document.forms.length; i<j; i++){
	var e=document.forms[i].elements;
	for (var m=0, n=e.length; m<n; m++){
		e[m].onmousedown=function(e){
			e=e||window.event;
			e.stopPropagation ? e.stopPropagation() : (e.cancelBubble=true)
			return true;
		}
		e[m].onselectstart=function(e){
			e=e||window.event;
			e.stopPropagation ? e.stopPropagation() : (e.cancelBubble=true)
			return true;
		}
	}
}

Switch=function(menu){this.menu=menu; this.init();}
Switch.prototype={
	init:function(){
		this.menu.w=this.menu.clientWidth;
		this.items=[];
		this.getItems();//Находим li
		this.getRules(); // для окея
	},
	getRules:function(){
		var obj=this;
		try{
			this.rules=document.getElementById('full_rules');
			this.rules.onclick=function(){
				if(obj.slider.isMove) {return false;}	
			}
		}catch(e){}
	},	
	getItems:function(){
		var c=this.menu.childNodes;
		for(var i=0,j=c.length;i<j;i++){
			if (c[i].nodeName=='LI'){	
				this.items.push(c[i]);
				this.getA(c[i]);
				this.getContent(c[i]);
				if(c[i].className.indexOf('active')!=-1){
					this.showContent(c[i]);
					this.createSlider(c[i]);
				}
			}
		}
	},
	getA:function(el){
		if(el.firstChild.nodeName=='A')el.a=el.firstChild
		else el.a=el.firstChild.nextSibling;
		el.a.onclick=function(){return false;}
	},
	getContent:function(el){
		el.content=document.getElementById(el.a.rel);
	},	
	showContent:function(el){
		el.content.className=el.content.className+' active';
	},		
	createSlider:function(li){
		var obj=this;
		this.slider=document.createElement('LI');
		this.slider.className='slider';
		this.slider.x=li.offsetLeft;
		this.slider.style.left=this.slider.x+'px';
		this.slider.isMove=false; //двигается или нет ползунок
		this.slider.offset=8; //величина смещения ползунка;
		this.slider.time=40; //время смещения ползунка;
		this.menu.appendChild(this.slider);
		this.slider.w=this.slider.clientWidth;
		f.addEvent(document.body, 'mousedown', function(event){obj.addWindowDown.call(obj, event); return false;})	
	},
	addWindowDown:function(event){
		//если слайдер еще двигается, ждем-с
		if(this.slider.isMove) return false;
		
		event = event || window.event;
		var t=event.target||event.srcElement;
		var li=t.parentNode;
		if(li.parentNode && li.parentNode==this.menu){
			var obj=this;
			function move(event){obj.addWindowMove.call(obj, event); return false;};
			function up(event){obj.addWindowUp.call(obj, event, move, up); return false;};
				
			this.mouseX=event.clientX;
			
			f.addEvent(document.body, 'mousemove', move);	
			f.addEvent(document.body, 'mouseup', up);
		}
	},
	addWindowMove:function(event){
		this.newMouseX=event.clientX;
		var left=this.slider.x+this.newMouseX-this.mouseX;
		
		//проверяем крайние точки
		if(left<0) left=0;
		else if (left>this.menu.w-this.slider.w) left=this.menu.w-this.slider.w;
		
		this.slider.newX=left;
		this.slider.style.left=this.slider.newX+'px';
	},
	addWindowUp:function(event, move, up){
		
		var obj=this;
		
		f.removeEvent(document.body, 'mousemove', move);
		f.removeEvent(document.body, 'mouseup', up);
		
		this.slider.isMove=true;//блокируем повторное нажатие до выяснения обстоятельств
		
		//если двигали ползунок 
		if(this.slider.newX!=undefined){
			this.slider.x=this.slider.newX;
			this.numBtn=Math.round(this.slider.newX/this.slider.w);
		}
		//значит просто кликнули на кнопку
		else{
			var t=event.target||event.srcElement;
			var li=t.parentNode;
			for(var i=0, j=this.items.length;i<j;i++){
				if(this.items[i]==li){
					this.numBtn=i;	
					break;
				}
			}				
		}
		
		this.slider.newX=this.numBtn*this.slider.w;
		
		//определяем в какую сторону будем двигать		
		if(this.slider.newX-this.slider.x>0){
			this.stopInterval=setInterval(function(){obj.moveSliderRight.call(obj);}, obj.slider.time);
		}
		else{
			this.stopInterval=setInterval(function(){obj.moveSliderLeft.call(obj);}, obj.slider.time);			
		}
	},
	moveSliderRight:function(){
		this.slider.x+=this.slider.offset;
		if(this.slider.x>=this.slider.newX)	this.stopSlider();
		else this.slider.style.left=this.slider.x+'px';
	},
	moveSliderLeft:function(){
		this.slider.x-=this.slider.offset;
		if(this.slider.x<=this.slider.newX) this.stopSlider();
		else this.slider.style.left=this.slider.x+'px';
	},
	stopSlider:function(){
		clearInterval(this.stopInterval);
		this.slider.style.left=this.slider.newX+'px';
		this.slider.x=this.slider.newX;
		this.slider.newX=undefined;
		
		//Если пункт до этого был неактивным, делаем его активным и осущ нужные действия
		if(this.items[this.numBtn].className!='active'){
			
			//для окея
			if(this.items[this.numBtn].a.rel=='rules_bar') this.rules.href='/doc/rules.doc';
			else if(this.items[this.numBtn].a.rel=='rules_okey') this.rules.href='/doc/rules_okey.doc';
			
			//меняем активный пункт и содержимое			
			for(var i=0, j=this.items.length;i<j;i++){
				if(i==this.numBtn) {
					this.items[i].className='active';
					this.items[i].content.className=this.items[i].content.className+' active';
				}
				else{
					this.items[i].className='';
					this.items[i].content.className=this.items[i].content.className.replace(/ active/, '');
				}
			}
		}
		//Для 18 ти лет
		if(this.items[this.numBtn].className=='active' && this.items[this.numBtn].a.rel=='_18_no'){
			document.getElementById('alert_wrapper').className='active';
		}
		if(this.items[this.numBtn].className=='active' && this.items[this.numBtn].a.rel=='_18_city'){
			window.location.href="/main/saint-petersburg/bar/";
		}
		
		
		this.slider.isMove=false; // можем опять двигать
	}	
}
	


////
//находим все Switch
function searchSwitch(){
	var a=document.getElementsByTagName('*');
	for (var i=0, j=a.length;i<j;i++){
		if (a[i].className.indexOf('Switch')!=-1)	new Switch(a[i]);
	}
}

//привязываем событие
f.addEvent(window, 'load', searchSwitch);
//if (!window.addEventListener) window.attachEvent('onload', searchSwitch);
//else document.addEventListener('DOMContentLoaded', searchSwitch, false);





})();

