document.observe("dom:loaded", function() {
  initTeaserAnimation();
	initTeasers();
});

function initTeaserAnimation() {
  var teasers = $('teasers');
	if (teasers) {
	  var selected = 1;
	  var elements = teasers.select('h2');
	  
    executer = new PeriodicalExecuter(function(pe) {
      toggleTeaser(elements[selected]);
      if (selected == 2) {
        selected = 0;
      } else {
        selected++;
      }
    }, 4);
  }
}

function initTeasers() {
	var teasers = $('teasers');
	if (teasers) {
		teasers.select('h2').each(function(s){
			s.setStyle({cursor: 'pointer'});
			s.observe('click', function(e){
				toggleTeaser(s);
				executer.stop();
			});
		});
	}
}

function toggleTeaser(s) {
  selected_id = s.up(0).getAttribute('id');
	s.up(1).select('div.teaser').each(function(t){
		t.removeClassName('active');
		if (t.getAttribute('id') == selected_id) {
			t.addClassName('active');
		}
	});
}

/* Set default form values. Call from within a view to set values from a language file. */
function observeInput(id, default_text) {
	var el = $(id);
	if (el) {
		el.value = default_text;
		el.observe('focus', function(e){
			if (el.getValue() == default_text) {
				el.value = '';
			}
		});
		el.observe('blur', function(e){
			if (el.getValue() == '') {
				el.value = default_text;
			}
		});
	}
}

/* popbox */
function showPopbox(size) {
	var viewport = vp();
	var offset = os();
	if (typeof document.body.style.maxHeight === "undefined") {
		$$('html')[0].setStyle({overflow: 'hidden'});
	}
	$$('body')[0].insert('<div id="overlay_popbox"></div>', {position: 'bottom'});
	var overlay = $('overlay_popbox');
	var height = body_height();
	overlay.setStyle({height: height+'px'});
	detectMac() ? overlay.addClassName('overlay_mac') : overlay.addClassName('overlay_popbox');
	Event.observe(overlay, 'click', function(e){
		hidePopbox();
	});
	$$('body')[0].insert('<div id="popbox"><img src="/images/loading.gif" class="popbox_loading" /></div>', {position: 'bottom'});
	var popbox = $('popbox');
	document.onkeydown = function (e) {
		keycode = (e == null) ? event.keyCode : keycode = e.which;
		if (keycode == 27) {
			hidePopbox();
		}
	};
	if (size) {
		popbox.setStyle({width: size[0]+'px', height: size[1]+'px'});
	}
	var popbox_width = popbox.getWidth();
	var popbox_height = popbox.getHeight();
	var left = Math.round((viewport[0] - popbox_width) / 2);
	left = (left < 0) ? 0 : left;
	var top = Math.round(((viewport[1] - popbox_height) / 2) + offset[1]);
	top = (top < 0) ? 0 : top;
	popbox.setStyle({left: left + 'px', top: top + 'px', display :'block'});
	popbox.show();
}

function loadPopbox(id, size) {
	var el = $(id);
	if (el) {
		showPopbox(size);
		$('popbox').update(el.innerHTML);
	}
}

function hidePopbox() {
	document.onkeydown = '';
	$('popbox').remove();
	$('overlay_popbox').remove();
	$$('html')[0].setStyle({overflow: ''});
}

function overlaySize() {
	var overlay = $('overlay_popbox');
	if (overlay.length) {
		var height = body_height();
		overlay.setStyle({height: height+'px'});
	}
}

function detectMac() {
	var userAgent = navigator.userAgent.toLowerCase();
	if (userAgent.indexOf('firefox') != -1) {
		return true;
	}
}

function vp() {
	var x, y;
	
	if (self.innerHeight) {
		x = self.innerWidth;
		y = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	} else if (document.body) {
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	
	return [x, y];
}

function os() {
	var x, y;
	
	if (self.pageYOffset) {
		x = self.pageXOffset;
		y = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	} else if (document.body) {
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	
	return [x, y];
}

function body_height() {
	if (document.documentElement.clientHeight > document.documentElement.scrollHeight) {
		return document.documentElement.clientHeight;
	} else {
		return document.documentElement.scrollHeight;
	}
}