// init page
window.addEvent('domready', function() {
	initPopups();
	initOpenClose();
	initSearchArea();
	initScrollGallery();
});

// open close function
function initOpenClose() {
	var _duration = 350;
	var _activeClass = 'active';
	var _slideBlocks = $$("div.expandable");
	_slideBlocks.each(function(_el, i){
		var _item = _el;
		var _opener = _item.getElement("a.expand");
		var _slider = _item.getElement("div.expandable-text, div.slide");
		var myVerticalSlide = new Fx.Slide(_slider, {duration: _duration});
		_opener.addEvent('click', function(){
			if(_item.hasClass(_activeClass)) {
				_item.removeClass(_activeClass);
				myVerticalSlide.slideOut();
			} else {
				_item.addClass(_activeClass);
				myVerticalSlide.slideIn();
			}
			return false;
		});
		if(_item.hasClass(_activeClass)) myVerticalSlide.show();
		else myVerticalSlide.hide();
		_slider.setStyles({'display':'block'});
	});
}

// carousel function
function initScrollGallery() {
	var _duration = 350;
	var _disabledClass = 'disabled';
	var _activeClass = 'active';
	var _galleries = $$("div.gallery");

	_galleries.each(function(_el, i){
		var _item = _el;
		var _btnPrev = _item.getElement("a.prev");
		var _btnNext = _item.getElement("a.next");
		var _holder = _item.getElement("div.gallery-holder");
		var _slider = _holder.getElement("ul");
		var _slides = _slider.getElements("li");
		var _slideCount = _slides.length;
		var _elWidth = _slides[0].getSize().x + 6;
		var _sumWidth = _elWidth * _slideCount;
		var _currentStep = 0;
		var _maxStep = Math.ceil(Math.abs(_holder.getSize().x - _sumWidth)/_elWidth);

		// gallery control
		_btnPrev.addEvent('click', function(){
			if(_currentStep > 0) {
				_currentStep--;
				switchSlide();
			}
			return false;
		});
		_btnNext.addEvent('click', function(){
			if(_currentStep < _maxStep) {
				_currentStep++;
				switchSlide();
			}
			return false;
		});

		// gallery animation
		var offset;
		var myFxSlide = new Fx.Morph(_slider, {duration: _duration});
		function switchSlide() {
			_btnPrev.removeClass(_disabledClass); _btnNext.removeClass(_disabledClass);
			if(_currentStep == 0) _btnPrev.addClass(_disabledClass);
			else if (_currentStep == _maxStep) _btnNext.addClass(_disabledClass);

			offset = -_currentStep*_elWidth;
			myFxSlide.start({'marginLeft':offset});
		}
		switchSlide();
	});
}

// search area
function initSearchArea() {
	var _duration = 150;
	var _activeClass = 'expanded-search';
	var _slideBlocks = $$("div.search-area");
	_slideBlocks.each(function(_el, i){
		var _item = _el;
		var _opener = _item.getElement("a.search");
		var _slider = _item.getElement("div.search-form");
		var _close = _slider.getElement("a.close");
		var myFxSlide = new Fx.Morph(_slider, {duration: _duration});
		_slider.setStyles({'display':'block'});
		var _sliderHeight = _slider.getSize().y;
		_opener.addEvent('click', function(){
			if(_item.hasClass(_activeClass)) {
				_item.removeClass(_activeClass);
				myFxSlide.start({'height':0});
			} else {
				_item.addClass(_activeClass);
				myFxSlide.start({'height':_sliderHeight});
			}
			return false;
		});
		_close.addEvent('click', function(){
			_item.removeClass(_activeClass);
			myFxSlide.start({'height':0});
			return false;
		});
		if(_item.hasClass(_activeClass)) _slider.setStyles({'height':_sliderHeight});
		else _slider.setStyles({'height':0});
	});
}

// popups function
function initPopups() {
	var _zIndex = 1000;
	var _fadeSpeed = 350;
	var _faderOpacity = 0;
	var _faderBackground = '#000';
	var _faderId = 'lightbox-overlay';
	var _closeLink = 'a.close, a.cancel';
	var _fader;
	var _lightbox = null;
	var _popupHolders= $$('.popup');
	var _openers = $$('a.open-popup');
	var _page = $$('div')[0];
	var _minWidth = _page.getSize().x;

	// init popup fader
	var _body = $$('body')[0];
	_fader = document.createElement("DIV");
	_fader.id = _faderId;
	_body.grab(_fader);
	_fader = $(_faderId);
	_fader.setStyles({
		'backgroundColor':_faderBackground,
		'position':'absolute',
		'overflow':'hidden',
		'display':'none',
		'top':0,
		'left':0,
		'zIndex':_zIndex
	});
	_fader.setOpacity(_faderOpacity);

	// IE6 iframe fix
	if(document.uniqueID && document.compatMode && !window.XMLHttpRequest) {
		var _frame = document.createElement('IFRAME');
		_frame.src = 'javascript:false';
		_frame.frameborder = 0;
		_frame.scrolling = 'no';
		_frame.width = '100%';
		_frame.height = '100%';
		_frame.style.filter = "alpha(opacity=0)";
		_frame.style.border = 0;
		_frame.style.position = 'absolute';
		_frame.style.zIndex = -1;
		_fader.grab(_frame);
	}

	// window height/width
	function getClientWidth(){return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;}
	function getClientHeight(){return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;}

	// lightbox positioning function
	function positionLightbox() {
		if(_lightbox) {
			var _windowHeight = getClientHeight();
			var _windowWidth = getClientWidth();
			var _lightboxWidth = _lightbox.getSize().x;
			var _lightboxHeight = _lightbox.getSize().y;
			var _pageHeight = _page.getSize().y;

			if (_windowWidth < _minWidth) _fader.setStyle('width',_minWidth);
				else _fader.setStyle('width','100%');
			if (_windowHeight < _pageHeight) _fader.setStyle('height',_pageHeight);
				else _fader.setStyle('height',_windowHeight);

			_lightbox.setStyles({
				'position':'absolute',
				'zIndex':(_zIndex+1),
				'top': 0,
				'left':0
			});

			// vertical position
			if (_windowHeight > _lightboxHeight) {
				if(document.uniqueID && document.compatMode && !window.XMLHttpRequest) {
					_lightbox.setStyles({
						'position':'absolute',
						'top': document.documentElement.scrollTop + (_windowHeight - _lightboxHeight) / 2
					});
				} else {
					_lightbox.setStyles({
						'position':'fixed',
						'top': (_windowHeight - _lightboxHeight) / 2
					});
				}
			} else {
				_lightbox.setStyles({
					'position':'absolute',
					'top': 0
				});
				if(_fader.getSize().y < _lightboxHeight) _fader.setStyle('height',_lightboxHeight);
			}

			// horizontal position
			if (_fader.getSize().x > _lightbox.getSize().x) _lightbox.setStyles({'left':(_fader.getSize().x - _lightbox.getSize().x) / 2});
			else _lightbox.setStyles({'left': 0});
		}
	}

	// show/hide lightbox
	function toggleState(_state, _obj){
		if (_obj) _lightbox = _obj;
		if(!_lightbox) return;
		if(_state) {
			var _faderFx = new Fx.Morph(_fader, {duration: _fadeSpeed, onComplete:function(){
				_lightbox.setStyles({'opacity':0,'display':'block'});
				var _popupFx = new Fx.Morph(_lightbox, {duration: _fadeSpeed});
				_lightbox.vis = true;
				positionLightbox();
				_popupFx.start({'opacity':1});
			}});
			_fader.setStyles({'display':'block','opacity':0});
			_faderFx.start({'opacity':_faderOpacity});
		} else {
			var _popupFx = new Fx.Morph(_lightbox, {duration: _fadeSpeed, onComplete:function(_bx){
				_bx.setStyle('display','none');
				_bx.vis = false;
				var _faderFx = new Fx.Morph(_fader, {duration: _fadeSpeed});
				_faderFx.start({'opacity':0});
			}});
			_popupFx.start({'opacity':0});
		}
	}

	// popup actions
	function initPopupActions(_obj) {
		if(!_obj.jsInit) {
			_obj.jsInit = true;
			// close link
			_obj.getElement(_closeLink).addEvent('click', function(){
				toggleState(false , _obj);
				return false;
			});
		}
	}

	// lightbox openers
	_openers.each(function(_el, i){
		var _opener = _el
		var _target = _opener.href.substring(_opener.href.indexOf('#')+1);
		var _popup = $(_target);
		if(_popup) {
			// init actions for popup
			initPopupActions(_popup);

			// open popup
			_opener.addEvent('click', function(){
				_popupHolders.each(function(_this){
					if (_this.style.display == 'block') toggleState(false, _this);
				})
				if (_popup.style.display == 'block'){
					toggleState(false, _popup);
				} else {
					_popup.setStyle('display','none');
					positionLightbox();
					setTimeout(function(){toggleState(true, _popup)},300)
				}
				return false;
			});
		}
	});

	// event handlers
	window.addEvent('resize', function() {
		positionLightbox();
	});
	window.addEvent('scroll', function() {
		positionLightbox();
	});
	document.onkeydown = function(e){
		var keycode;
		if (window.event) keycode = window.event.keyCode;
		else if (e) keycode = e.which;
		if (keycode == 27) {
			toggleState(false);
		}
	}
	_fader.addEvent('click', function(){
		toggleState(false);
		return false;
	});
}