/*--- accordion ---*/
jQuery.fn.acc = function(_options){
	var _options = jQuery.extend({
		speed: 400,
		active: 'active',
		list: '.children()',
		opener: 'a.opener',
		slide: 'div.slide'
	}, _options);
	
	return this.each(function(){
		var _list = eval('jQuery(this)' + _options.list);
		var _active = _options.active;
		var _speed = _options.speed;
		var _a = _list.index(_list.filter('.' + _active + ':eq(0)'));
		if(_a != -1) _list.removeClass(_active).eq(_a).addClass(_active);
		for(var i = 0; i < _list.length; i++){
		    _list.eq(i).data('btn', _list.eq(i).children(_options.opener).eq(0));
		    _list.eq(i).data('box', _list.eq(i).children(_options.slide).eq(0));
		    if(i == _a) _list.eq(i).data('box').css('display', 'block');
		    else _list.eq(i).data('box').css('display', 'none');
		    _list.eq(i).data('btn').data('ind', i);
		    _list.eq(i).data('btn').click(function(){
		        if (_list.eq(jQuery(this).data('ind')).data('box').length != 0) {
					changeEl(jQuery(this).data('ind'));
					return false;
				}
		    });
		}
		var anim_f = true;
		var a_h, ind_h, _k;
		function changeEl(_ind){
		    if(anim_f){
		        anim_f = false;
		        if(_a == _ind){
		            _list.eq(_a).removeClass(_active).data('box').animate({height: 0}, {
		                duration: _speed,
		                complete: function(){
		                    jQuery(this).css({display:'none', height:'auto'});
		                    _a = -1;
		                    anim_f = true;
							removeLevels();
		                }
		            });
		        }
		        else{
		            _list.eq(_ind).data('box').css('display', 'block');
		            ind_h = _list.eq(_ind).data('box').outerHeight();
		            _list.eq(_ind).data('box').height(0);
		            if(_a != -1){
		                a_h = _list.eq(_a).removeClass(_active).data('box').outerHeight();
		                _k = a_h/ind_h;
		            }
		            _list.eq(_ind).addClass(_active).data('box').animate({height: ind_h}, {
		                duration: _speed,
		                step: function(t_h){
		                    if(_a != -1) _list.eq(_a).data('box').height(a_h - t_h*_k);
		                },
		                complete: function(){
		                    _list.eq(_ind).data('box').height('auto');
		                    if(_a != -1) _list.eq(_a).data('box').css({display:'none', height: 'auto'});
		                    _a = _ind;
		                    anim_f = true;
							removeLevels();
		                }
		            });
		        }
		    }
		}
	});
}

function removeLevels(){
	$('ul.accordion').eq(0).children('li').each(function(){
		if(!$(this).hasClass('selected')){
			var _cont = $(this).find('div.slide').find('li.selected');
			_cont.each(function(){
				if($(this).hasClass('selected')){
					$(this).find('a.opener').click();
				}
			});
		}
	});
}
$.fn.gallery = function(options) {
	return new Gallery(this.get(0), options);
}

function Gallery(context, options) {
	this.init(context, options);
}

Gallery.prototype = {
	options:{},
	init: function (context, options){
		this.options = $.extend({
			duration: 700,
			slideElement: 1,
			autoRotation: false,
			effect: false,
			listOfSlides: 'ul > li',
			switcher: false,
			disableBtn: false,
			nextBtn: 'a.link-next, a.btn-next, a.next',
			prevBtn: 'a.link-prev, a.btn-prev, a.prev',
			circle: true,
			direction: false,
			IE: false
		}, options || {});
		var _el = $(context).find(this.options.listOfSlides);
		if (this.options.effect) this.list = _el;
		else this.list = _el.parent();
		this.switcher = $(context).find(this.options.switcher);
		this.nextBtn = $(context).find(this.options.nextBtn);
		this.prevBtn = $(context).find(this.options.prevBtn);
		this.count = _el.index(_el.filter(':last'));
		
		if (this.options.switcher) this.active = this.switcher.index(this.switcher.filter('.active:eq(0)'));
		else this.active = _el.index(_el.filter('.active:eq(0)'));
		if (this.active < 0) this.active = 0;
		this.last = this.active;
		
		this.woh = _el.outerWidth(true);
		if (!this.options.direction) this.installDirections(this.list.parent().width());
		else {
			this.woh = _el.outerHeight(true);
			this.installDirections(this.list.parent().height());
		}
		
		if (!this.options.effect) {
			this.rew = this.count - this.wrapHolderW + 1;
			if (!this.options.direction) this.list.css({marginLeft: -(this.woh * this.active)})
			else this.list.css({marginTop: -(this.woh * this.active)})
		}
		else {
			this.rew = this.count;
			this.list.css({opacity: 0}).removeClass('active').eq(this.active).addClass('active').css({opacity: 1}).css('opacity', 'auto');
			this.switcher.removeClass('active').eq(this.active).addClass('active');
		}
		
		if (this.options.disableBtn) {
			if (this.count < this.wrapHolderW) this.nextBtn.addClass(this.options.disableBtn);
			if (this.active == 0) this.prevBtn.addClass(this.options.disableBtn);
		}
		if (this.count == 0){
			this.nextBtn.addClass('hidden');
			this.prevBtn.addClass('hidden');
			_el.find('.caption').css({left:'10px'});
		}
		
		this.initEvent(this, this.nextBtn, this.prevBtn, true);
		this.initEvent(this, this.prevBtn, this.nextBtn, false);
		
		if (this.options.autoRotation) this.runTimer(this);
		
		if (this.options.switcher) this.initEventSwitcher(this, this.switcher);
	},
	installDirections: function(temp){
		this.wrapHolderW = Math.ceil(temp / this.woh);
		if (((this.wrapHolderW - 1) * this.woh + this.woh / 2) > temp) this.wrapHolderWwrapHolderW--;
	},
	fadeElement: function(){
		if ($.browser.msie && this.options.IE){
			this.list.eq(this.last).css({opacity:0});
			this.list.removeClass('active').eq(this.active).addClass('active').css({opacity:'auto'});
		}
		else{
			this.list.eq(this.last).animate({opacity:0}, {queue:false, duration: this.options.duration});
			this.list.removeClass('active').eq(this.active).addClass('active').animate({
				opacity:1
			}, {queue:false, duration: this.options.duration, complete: function(){
				$(this).css('opacity','auto');
			}});
		}
		if (this.options.switcher) this.switcher.removeClass('active').eq(this.active).addClass('active');
		this.last = this.active;
	},
	scrollElement: function(){
		if (!this.options.direction) this.list.animate({marginLeft: -(this.woh * this.active)}, {queue:false, duration: this.options.duration})
		else this.list.animate({marginTop: -(this.woh * this.active)}, {queue:false, duration: this.options.duration})
		if (this.options.switcher) this.switcher.removeClass('active').eq(this.active).addClass('active');
	},
	runTimer: function($this){
		if($this._t) clearTimeout($this._t);
		$this._t = setInterval(function(){
			$this.toPrepare($this, true);
		}, this.options.autoRotation);
	},
	initEventSwitcher: function($this, el){
		el.click(function(){
			$this.active = $this.switcher.index($(this));
			if($this._t) clearTimeout($this._t);
			if (!$this.options.effect) $this.scrollElement();
			else $this.fadeElement();
			if ($this.options.autoRotation) $this.runTimer($this);
			return false;
		});
	},
	initEvent: function($this, addEventEl, addDisClass, dir){
		addEventEl.click(function(){
			if($this._t) clearTimeout($this._t);
			if ($this.options.disableBtn &&($this.count > $this.wrapHolderW)) addDisClass.removeClass($this.options.disableBtn);
			$this.toPrepare($this, dir);
			if ($this.options.autoRotation) $this.runTimer($this);
			return false;
		});
	},
	toPrepare: function($this, side){
		if (($this.active == $this.rew) && $this.options.circle && side) $this.active = -$this.options.slideElement;
		if (($this.active == 0) && $this.options.circle && !side) $this.active = $this.rew + $this.options.slideElement;
		for (var i = 0; i < $this.options.slideElement; i++){
			if (side) {
				if ($this.active + 1 > $this.rew) {
					if ($this.options.disableBtn && ($this.count > $this.wrapHolderW)) $this.nextBtn.addClass($this.options.disableBtn);
				}
				else $this.active++;
			}
			else{
				if ($this.active - 1 < 0) {
					if ($this.options.disableBtn && ($this.count > $this.wrapHolderW)) $this.prevBtn.addClass($this.options.disableBtn);
				}
				else $this.active--;
			}
		};
		if ($this.active == $this.rew && side) if ($this.options.disableBtn &&($this.count > $this.wrapHolderW)) $this.nextBtn.addClass($this.options.disableBtn);
		if ($this.active == 0 && !side) if ($this.options.disableBtn &&($this.count > $this.wrapHolderW)) $this.prevBtn.addClass($this.options.disableBtn);
		if (!$this.options.effect) $this.scrollElement();
		else $this.fadeElement();
	},
	stop: function(){
		if (this._t) clearTimeout(this._t);
	},
	play: function(){
		if (this._t) clearTimeout(this._t);
		if (this.options.autoRotation) this.runTimer(this);
	}
}

$(document).ready(function(){
	jQuery('ul.accordion').acc({
		speed: 400,
		active: 'selected',
		list: '.children()',
		opener: 'span.opener',
		slide: '.slide'
		
	});
	gal1 = $('div.gallery').gallery({
		duration: 500,
		autoRotation: 5000,
		listOfSlides: 'div.gallery-holder ul > li'
	});
});
