var slider_el = new Array();


var isDisplay = function(el){
	if(el.getStyle('display') == 'block') return true; else return false;
}

var isActive = function(a){
	if(a.hasClass('active')) return true; else return false;
}


/************************************************************
*
*	AccordionView
*	Аккордеон для одиночного дива в стиле 
*	бла-бла-ба (показать подробнее/скрыть подробнее)
*	требует передать объект ссылки, скрытый объект и родительский контейнер
*	Ширина считается по ширине родителя
*
***************************************************************/

var AccordionView = new Class({
	Implements: [Events, Options],
	
	options: {
		parent: false,
		hidden: false,
		duration: 500
		
	},
	
	initialize: function(a, options){
		this.setOptions(options);
		
		var elem = this.options.hidden;
		var _self = this;
		this.flag = false;
		
		//считаем его ширину. полагаем, что она равна ширине содержащего контейнера (parent)
		elem.setStyle('width', this.options.parent.getStyle('width'));
		
		this.showEffect = new Fx.Morph(elem, {
			duration: this.options.duration,
			onComplete: function(){
				if(_self.flag){
					this.set({display: 'none'});
				}
				if(!_self.flag){
					//a.set('text', _self.options.hideText);
					//a.removeClass('plus');
					//a.addClass('minus');
				}
				else{
					//a.set('text', _self.options.showText);
					//a.removeClass('minus');
					//a.addClass('plus');
				}
			},
			onStart: function(){
				if(!_self.flag){
					this.set({display: 'block'});
				}
			}
			
		});
	},

	transform: function(){
		var elem = this.options.hidden;
		//вспомогательная переменная. показывает, в каком состоянии блок
		this.flag = this.is_visible();
		//сбрасываем фиксацию высоты
		elem.setStyle('height','auto');

		if(!this.flag){
			var sz = elem.getDimensions();
			this.showEffect.set({display: 'block', height: 1});
			this.showEffect.start({
				'height': [1, sz.height]
			});
		}
		else{
			
			var sz = elem.getSize();
			this.showEffect.start({
				'height': [sz.y, 1]
			});

		}
		
	},
	is_visible: function(){
		
		var visible = true;
		if(this.options.hidden.getStyle('display') != 'block') visible = false;
		return visible;
	}
});

/************************************************************
*
*	AccordionView
*	Аккордеон для одиночного дива в стиле 
*	бла-бла-ба (показать подробнее/скрыть подробнее)
*	требует передать объект ссылки, скрытый объект и родительский контейнер
*	Открывается мгновенно!!! Зато не важна ширина и можно использовать с левыми картинками
*
***************************************************************/

var AccordionView2 = new Class({
	Implements: [Events, Options],
	
	options: {
		parent: false,
		hidden: false,
		duration: 500,
		hideText: 'Скрыть подробности',
		showText: 'Показать подробнее'
		
	},
	
	initialize: function(a, options){
		this.setOptions(options);
		
		var elem = this.options.hidden;
	
		this.flag = false;
		
		this.a = a;
		
			
		
	},

	transform: function(){
		var elem = this.options.hidden;
		//вспомогательная переменная. показывает, в каком состоянии блок
		//this.flag = this.is_visible();
		this.flag = isDisplay(this.options.hidden);
		//сбрасываем фиксацию высоты
		elem.setStyle('height','auto');

	
		
				if(this.flag){
					this.options.hidden.setStyles({display: 'none'});
					this.a.set('text', this.options.showText);
					this.a.removeClass('minus');
					this.a.addClass('plus');
				}
				else{
					this.options.hidden.setStyles({display: 'block'});
					this.a.set('text', this.options.hideText);
					this.a.removeClass('plus');
					this.a.addClass('minus');
				}
				
				
		
	},
	is_visible: function(){
		
		var visible = true;
		if(this.options.hidden.getStyle('display') != 'block') visible = false;
		return visible;
	}
});


/* 
*****  возвращает путь к файлу и имя файла  ****
dir_name - путь от корня до файла не включая его
file_name - полное имя файла
ext - расширение с точкой
остальные для формата   имя_файла_нечто_состояние_язык.расширение
lang - язык
 state - состояние 
name - все что до двух предыдущих
*/
var File = new Class({

	initialize: function (path)
	{
		this.path = path; 
		this.dir_name='/';
		this.string_array=this.path.split('/');
		for(i=3;i<this.string_array.length-1;i++)
		{
			this.dir_name = this.dir_name + this.string_array[i] + '/';
		}
		this.file_name = this.string_array[this.string_array.length -1];
	
		//парсим имя файла
		this.tmp = new Array();
		this.tmp = this.file_name.split('.');//расширение по точке
		this.ext = '.' + this.tmp[1];
		this.tmp2 = new Array();
		this.tmp2 = this.tmp[0].split('_');//  _ - разделитель
		this.lang = '_' + this.tmp2[this.tmp2.length - 1];
		this.state = '_' + this.tmp2[this.tmp2.length - 2];
		this.name = this.tmp2[0];
		for(i=1;i<(this.tmp2.length - 2);i++)
		{
			this.name = this.name + '_' + this.tmp2[i];
		}
	}
});


/* *************************************
*
*  UMI REQUEST
*
************************************ */

var umiRequest = new Class({
	initialize: function (){

		},
	send: function (request){
			this.cook = document.cookie;//получаем все куки
			request.setHeader('Cookie', this.cook);
			request.send();
		}
});

var umi = new umiRequest();





var __Slider = new Class({

	Implements: [Events, Options],

	options: {
		liWidth: 98,
		liMargin: 0,
		startPoint: 0

	},
	initialize: function (){
			//var slidercontainer = $('slidercontainer');
			
			var slider = new Fx.Scroll('browser', {
				duration: 2000,
				link: 'cancel',
				transition: Fx.Transitions.Quad.easeInOut
			});
				
			this.scroll = new Hash({
						//'id': id,
						'slider': slider,
						'x': 0,
						'fotos': this.fotos
					});
			
			
			var startPoint = Cookie.read('gallery_items');

			
			if(startPoint) {
				this.scroll.slider.set(0,startPoint);
			}
			else this.scroll.slider.toTop();

		},

	onTop: function(){
		var el;
		var pos = $('browser').getScroll().y;
		var l = slider_el.length;
		
		for(i=l-1; i > 0; i--){
			if(slider_el[i] < pos){el = i; break;}
		}
		if(slider_el[el - 3]) this.scroll.slider.start(0,slider_el[el - 3] - 2);
		else this.scroll.slider.toTop();
	
	},
	onBottom: function(){
		var el;
		var pos = $('browser').getScroll().y;
		var l = slider_el.length;
		
		for(i=0; i < l; i++){
			if(slider_el[i] > pos){el = i; break;}
		}
	
		if(slider_el[el + 3])this.scroll.slider.start(0, slider_el[el + 3] - 2);
		else this.scroll.slider.start(0, slider_el[l - 3]);

	}
	
	

});

function ajax_show_gallery(el){
	if(el.getElement('.ajax_gallery_container')){
		
	var gal = el.getElement('.ajax_gallery_container');
	var id = gal.getProperty('data:element_id');

	gal.set('html', '<div style="height:40px; padding-top: 40px;padding-left: 50px"><img src="/gif/wait/loading-thickbox.gif"></div>');
		var request = new Request({
			method: 'post',
			url: '/content/getGallery/?id=' + id + '&template=gallery',
			evalScripts: true,
			onComplete: function(text){
				gal.set('html', text);
				initializeSlider();
				//milkbox = new Milkbox();
				milkbox = new Lightbox();
				setLength(id);
			}
		});
		umi.send(request);
	}
}


/************************************************************
*
*	RadioAccord  (радио - по аналогии с радоибаттон)
*	Аккордеон для нескольких связанных блоков. 
*	Общий контейнер -trigger, элемент-переключатель - switcher, скрываемый блок - out
*	требует передать имена классов этих элементов
*	Открывается мгновенно!!! 
*
***************************************************************/

var RadioAccord = new Class({
	Implements: [Events, Options],
	
	options: {
		trigger: '.trigger',
		switcher: '.switch',
		out: '.out',
		storeState: false
		
	},
	
	initialize: function(options){
		this.setOptions(options);
		
		var _self = this;
		this.A = new Array();//в этом массиве храним весь комплект
		this.trigger = $$(this.options.trigger).each(function(item, index){
			var switcher = item.getElement(_self.options.switcher);
			var out = item.getElement(_self.options.out);
			_self.A[index] = new Hash({
				trigger: item,
				switcher: switcher,
				out: out
			});
			
			switcher.addEvent('click', function(e){
				if(e) e.stop();
				//alert(this.className);
				_self.doSomeThing(this);
				if(_self.options.storeState) _self.options.storeState.run();
			});
		});
		
		this.closeAll();
		
	},

	getOutByEl: function(el){
		var i = 0;
		this.A.each(function(item, index){
			if(item.switcher == el) i = index;
		});
		return this.A[i].out;
	},
	
	closeAll: function(){
		this.A.each(function(item){
			item.out.setStyle('display', 'none');
		});
		return true;
	},
	
	showOut: function(el){
		el = this.getOutByEl(el);
		el.setStyle('display', 'block');
		
		ajax_show_gallery(el);
		return true;
	},
	
	isDisplay: function(el){
		el = this.getOutByEl(el);
		
		if(el.getStyle('display') == 'none') return false; else return true;
	},
	
	doSomeThing: function(el){
		//alert(this.isDisplay(el));
		if(this.isDisplay(el)){
			this.closeAll();
		}
		else{
			this.closeAll();
			this.showOut(el);
		}
		return true;
	}
});



/************************************************************
*
*	MenuAccord  (
*	Аккордеон для меню
*	Передаем имя контейнера trigger
*	Получаем массив ВСЕХ li. Для каждого проверяем наличие дочернего ul
*	Если он есть, ставим класс ajax для элемента switcer
*	Это конец инициализации
*
*	При клике на переключателе проверяем наличие дочернего
*	Если есть, проверяем его состояние
*	Если он открыт, то закрываем только его 
*	Если он закрыт,  то открываем только его
*
***************************************************************/

var MenuAccord = new Class({
	Implements: [Events, Options],
	
	options: {
		trigger: '.trigger',
		switcher: 'a'
		
	},
	
	initialize: function(options){
		this.setOptions(options);
		
		var _self = this;
		
		var lis = $(this.options.trigger).getElements('li');
		lis.each(function(item){
			var li = _self.hasChildren(item);
			if(li){
				var a = item.getElement(_self.options.switcher);
				a.addClass('ajax');
				a.addEvent('click', function(e){
					e.stop();
					_self.doSomeThing(this);
				});
				if(!a.hasClass('active')) li.setStyle('display', 'none');
			}
		});
		
		
		
	},
	
	hasChildren: function(el){
		if(el.tagName != 'LI') el = el.getParent('li');
		var ul = el.getFirst('ul');
		if(ul) var li = ul.getFirst('li'); else return false;
		if(li) return ul; else return false;
	},
	
	isDisplay: function(el){
		el = this.hasChildren(el);
		if(el){
			if(el.getStyle('display') == 'none') return false; else return true;
		}
		return null;
	},
	
	getLevel: function(el){//не используется
		var classEl = el.getProperty('class');
		var classEl = classEl.split(" ");
		var c = classEl.length;
		for(i=0; i<c; i++){
			if(classEl[i].test('line')) return classEl[i];
		}
		return false;
	},
	
	closeOut: function(el){
		el.setStyle('display', 'none');
		return true;
	},
	
	showOut: function(el){
		el.setStyle('display', 'block');
		return true;
	},
		
	doSomeThing: function(el){
		el = this.hasChildren(el);
		if(el){
			var display = this.isDisplay(el);
			if(display == true){
				//закрываем меню
				this.closeOut(el);
			}
			if(display == false){
				//открываем меню 
				this.showOut(el);
			}
			
		}
	}

});






/* ****************************
*
*	Навешиваем обработчики и инициализаторы
*
***************************** */




// зто создаем объекты-карусельки
function initializeSlider(liWidth, liMargin)
{
	if(scroll.length > 0) {
		//Не удалось заставить правильно считаться размеры галереи с произвольными картинками.
		//поэтому просто уничтожаем все и создаем объекты заново.
		scroll.each(function(item,index){delete(scroll[index])});
		scroll = new Array();
	}
	var galleries = new Array();
	galleries = $$('.gallery');
	
	for(a=0;a<galleries.length;a++){
		var id = galleries[a].id;
		scroll[id] = new multiSlider(id,{
			liWidth: liWidth,
			liMargin: liMargin,
			startPoint: startPoint.toInt()
		});
	}
}


/* ********************************************
*
*	  начало слайдера 
*
********************************************* */

function scroll2Right(id){
	scroll[id].scrollRight();
}

function scroll2Left(id){
	scroll[id].scrollLeft();
}

function setLength(id){
	initializeSlider();
}

function setStartPoint(){
	var sl = $$('.slidercontainer');
	var startPoint = sl[0].getScroll().x;
	var cook = Cookie.write('startPoint', startPoint);
	
}




/* ***************************
*
* класс для нескольких каруселек на одной странице
* html должен быть такой
*
*<div class="galleryBlck" id="galleryBlck_%parent%">
* <table cellpadding=0 cellspacing=0  class="gallery gallery_block" id="%id%">
*		<tr>
*			<td class="gallery-arr-l"  onclick="scroll_to(%id%, 'left')">
*				<img class="slider_arrow" src="/gif/l.gif">
*			</td>
*			<td align="center">
*				<div class="browser">	
*					<div class="slidercontainer" id="slidercontainer_%id%">
*						<ul class="slider_list" id="slider_list_%id%">
*							<li><a.....><img...>
*
****************************** */

var scroll = new Array();
startPoint = Cookie.read('startPoint');
if(!startPoint) startPoint = 0;


var multiSlider = new Class({

	Implements: [Events, Options],

	options: {
		liWidth: 98,
		liMargin: 0,
		startPoint: false,
		fixWidth: true

	},
	initialize: function (id){
			var params = Array.link(arguments, {options: Object.type, elements: $defined});
			this.setOptions(params.options || null);
			this.id = id;
			
			if(Browser.Engine.trident && (Browser.Engine.version == 4)) this.is_ie6 = true;

			var str = '#' + id + ' .li_slider';//формируем строку для фоток с класом foto_slider внутри элемнта с #id
			//this.gallWFull = $('all_gallery').getDimensions().x - 60;
			//alert(this.gallWFull);
			
			var ss = this.calculateMaxWidth(str);
			str = ss[0];//все фоты
			this.fotos = $$(str).length;//всего фоток
			this.allWidth = ss[1];//все фоты в одну ленту
			if(this.allWidth < 100) this.allWidth = $('slider_list_' + id).getParent('.radioAccord_1').getSize().x;

			var slider = this.addEffect();
			this.scroll = this.set2Hash(slider);
			
			this.updateListLength();//устанавливаем ширину видимой часи слайдера
			//this.setListLength();//устанавливаем ширину видимой часи слайдера

			this.addId(str);//ставим ид на li для навигации
			
			$('slider_list_' + id).style.width = this.allWidth + 'px';
			if(this.is_ie6){
				$('slider_list_' + this.id).setStyle('width',this.allWidth + 50);
			}

			if(this.options.startPoint) 
				this.scroll.slider.set(this.options.startPoint,0);
			else this.scroll.slider.toLeft();
			
			this.setCache(0);//начальная фотка

		},
	prepareParams: function(){
		$('sider_container_td_' + this.id).setStyle('width', 400);
		$('sider_container_td_' + this.id).setStyle('width', 'auto');
		this.getGallWidth();//макс ширина контейнера
		this.getAvarageWidth();//средня ширина фоты
		this.countMaxFotos();//макс фото в контейнере
		
		if(!this.is_ie6) this.hideArr();
		this.trueWidth = this.calculateWidth();//реальная ширина
	},
	
	hideArr: function(){
		//убираем стрелки если мало фоток
		if(!this.is_scrollable()){
			$(this.id).getElements('.gallery-arr').setStyle('visibility','collapse');
		}else{
			$(this.id).getElements('.gallery-arr').setStyle('visibility','visible');
		}
	},
	//все фоты в одну ленту. Возвращает массив: все фоты в списке, исключая display:none и длину строки
	calculateMaxWidth: function(str){
		var sss = 0;
		var _self = this;
		var ss = new Array();
		$$(str).each(function(item,index){
			if(item.getStyle('display') != 'none') ss[index] = item;
			//считаем размер li и ее отсутпы. все суммируем без разбора
			sss +=  item.getDimensions().x + item.getStyle('margin-left').toInt() + item.getStyle('margin-right').toInt();
		});
		return [ss, sss];
	},
	addId: function(str){
		//ставим ид на li для навигации
		$$(str).each(function(item,index){
			item.setProperty('id', 'li_' + index);
			var title = item.getElement('div.hidetitle');
			if(title) {
				title = title.get('html');
				item.getElement('a').setProperty('title', title);
				//item.getElement('a').store('title', title);
			}
		});
	},
	
	addEffect: function(){
		var slidercontainer = 'slidercontainer_' + this.id;
		var slider = new Fx.Scroll(slidercontainer, {
			duration: 2000,
			link: 'cancel',
			transition: Fx.Transitions.Quad.easeInOut
		});
		return slider;
	},
	set2Hash: function(slider){
		this.scroll = new Hash({
						'id': this.id,
						'slider': slider,
						'x': 0,
						'fotos': this.fotos
					});
		return this.scroll;
	},
	
	//если кол. фоток в галереее меньше макс возможного - вернуть false
	is_scrollable: function(){
		
		if(this.fotos <= this.intFoto) return false; else return true;
	},
	//считаем макс. ширину контейнера
	getGallWidth: function(){
		this.gallW = this.allWidth;
		//this.gallWFull = $('galleryBlck_' + this.id).getDimensions().x;
		//alert(this.gallWFull);
	},
	//считаем среднюю ширину фотки
	getAvarageWidth: function(){
		this.liw = this.allWidth / this.fotos;//для переменной ширины
		return this.liw;
	},
	//считаем сколько фоток модет поместиться макс в контейнере
	countMaxFotos: function(){
		this.intFoto = (this.gallWFull / this.liw).toInt();
		return this.intFoto;
	},
	
	calculateWidth: function(){
		if(this.gallW > this.gallWFull){
			this.trueWidth = this.gallWFull;
		}
		else {
			this.trueWidth = this.gallW;
		}
		if(this.is_ie6){
			//ширина окна
			var w = window.getSize().x;
			
			if(this.trueWidth > w) this.trueWidth = w - 300;
			else this.trueWidth = this.trueWidth + 50;
		}
		return this.trueWidth;
	},

	setListLength: function(){
		this.prepareParams();
		$('browser_' + this.id).setStyle('width',this.trueWidth);
	
		$('slidercontainer_' + this.id).setStyle('width',this.trueWidth);
		$('slider_list_' + this.id).setStyle('width',this.trueWidth);
		if(this.is_ie6){
			$('slider_list_' + this.id).setStyle('width','auto');
		}
		$(this.id).setStyle('width',this.trueWidth);
		$('sider_container_td_' + this.id).setStyle('width', this.trueWidth);

		this.scroll.slider.toLeft();
	},
	updateListLength2: function(){
		this.updateListLength.delay(500,this);
	},
	updateListLength: function(){
	//ВНИМАНИЕ! Обновление не работает. Вместо этого вызывать инициализацию, грохать все галереи и создавать объекты заново. Все в TO DO
		//ширина табл 100%, ширина контейнеров 720 чтобы уменьшить
		$(this.id).setStyle('width','100%');
		$('browser_' + this.id).setStyle('width',400);
		$('slidercontainer_' + this.id).setStyle('width',400);
		
		this.gallWFull = $('all_gallery').getDimensions().x - 60;
		
		$('browser_' + this.id).setStyle('width','auto');
		$('slidercontainer_' + this.id).setStyle('width','auto');
		
		this.setListLength();
	},
	getCache: function(){
			x = this.scroll.x; 
			return x;
	},
	setCache: function(x){
			this.scroll.x = x;
			return x;
	},
	scrollRight: function(){
			var newEl = this.getCache() + this.intFoto;
			var end = this.fotos - 1;
		
			if(newEl > end){
				this.setCache(end);
				this.scroll.slider.toRight();
			}
			else{
				this.setCache(newEl);
				this.scroll.slider.start(this.liw * newEl, 0);
			}
	},
	scrollLeft: function(){
			var newEl = this.getCache() - (this.intFoto * 2) + 1;

			if(newEl < 0){
				this.setCache(0);
				this.scroll.slider.toLeft();
			}
			else{
				this.setCache(newEl);
				this.scroll.slider.start(this.liw * newEl, 0);
			}
	}

});

/*
var cCookie = new Class ({

	Implements: [Events, Options, Cookie],

	options: {
		
	},
	initialize: function (name, value){
		var params = Array.link(arguments, {options: Object.type, elements: $defined});
		this.setOptions(params.options || null);
		
		this.cookieData = new Array();
		
		return this.write(name, value, this.options);
	},
	
	addValue: function(oValue){
		//oValue must be a object
		this.cookieData.push(oValue);
	},
	prepareString: function(){
		var i, str = "";
		for(var i = 0; i < this.cookieData.length; i++) {
			var elementData = this.cookieData[i];
			var value = new String(elementData.value);
			var inputName = new String(elementData.name);
			
			if(!inputName || !value) {
				continue;
			}
			
			str += elementData.type + "," + inputName.length + "," + inputName + "," + value.length + "," + value;
		}
	}
	
});

*/





