// MedienMittwoch JavaScript object literal with all required functions
m2 = {
	// add mouseover and mouseout behavior on all event archive items;
	addArchiveHover:function() {
		// object detection
		if (document.getElementById && document.getElementById('m2Copy') && document.getElementsByTagName) {
			var parent = document.getElementById('m2Copy');
			var i = 0;
			// iterate through all children of "m2Copy"; only on the event archive page "section" is a immediate child of "m2Copy"
			while (parent.childNodes[i]) {
				var obj = parent.childNodes[i];
				// check for className "section"
				if (m2.setClassName(obj) && obj.className.indexOf('section') != -1) {
					// set mouseover and mouseout behavior
					obj.onmouseover = m2.addSectionMouseover;
					obj.onmouseout = m2.addSectionMouseout;
					var k = 0;
					// fallback for keyboard navigation: iterate through all anchor descendants
					while (obj.getElementsByTagName('a')[k]) {
						var child = obj.getElementsByTagName('a')[k];
						// make sure we are in the right context, i.e. the tab navigation beneath the event
						var grandpa = child.parentNode.parentNode;
						if (m2.setClassName(grandpa) && (grandpa.className.indexOf('m2NavReiter') != -1 ||  (grandpa.className.indexOf('guestlist') != -1 && grandpa.parentNode.className.indexOf('vcards') != -1))) {
							// set focus and blur behavior
							child.onfocus = m2.addSectionFocus;
							child.onblur = m2.addSectionBlur;
						}
					k++;
					}
				}
				i++;
			}
		}
		obj = child = null;
	},
	
	// originally they were used as obj.onmouseover = function() { m2.addSectionBehavior(this, 'very-strong'); },
	// but that caused an IE closure memory leak
	addSectionMouseover:function() {
		m2.addSectionBehavior(this, 'very-strong');
	},
	addSectionMouseout:function() {
		m2.addSectionBehavior(this, 'strong');
	},
	addSectionFocus:function() {
		m2.addSectionBehavior(this.parentNode.parentNode.parentNode, 'very-strong');
	},
	addSectionBlur:function() {
		m2.addSectionBehavior(this.parentNode.parentNode.parentNode, 'strong');
	},
	
	// actually set the class name for the highlighted behavior on event archive items
	addSectionBehavior:function(obj,className) {
		var j = 0;
		// iterate through all child elements
		while (obj.getElementsByTagName('div')[j]) {
			var child = obj.getElementsByTagName('div')[j];
			if (m2.setClassName(child)) {
				// set className for m2Separator as a child of "section"
				if (child.className.indexOf('m2Separator') != -1) {
					child.className = 'm2Separator ' + className;
					child.setAttribute('class', 'm2Separator ' + className);
					break;
				}
				// set className for m2Separator of the first section
				else if (obj.className.indexOf('first') != -1) {
					document.getElementById('firstSeparator').className = 'm2Separator ' + className;
					document.getElementById('firstSeparator').setAttribute('class', 'm2Separator ' + className);
					break;
				}
			}
			j++;
		}
		child = null;
	},
	
	// add mouseover behavior on buttons for IE
	addButtonBehavior:function() {
		if (document.getElementsByClassName && document.getElementsByClassName('button') !== false) {
			elems = document.getElementsByClassName('button');
			var i = 0;
			while (elems[i]) {
				var tagName = elems[i].nodeName.toLowerCase();
				if (tagName == 'button' || tagName == 'input') {
					elems[i].onmouseover = elems[i].onfocus = m2.addButtonMouseover;
					elems[i].onmouseout = elems[i].onblur = m2.addButtonMouseout;
				}
				i++;
			}
		}
	},
	addButtonMouseover:function() {
		elem = (this.nodeName.toLowerCase() == 'button') ? this : this.parentNode;
		if (elem.className != '') {
			elem.className = (elem.className.indexOf('highlight') == -1) ? elem.className + ' msover' :  elem.className + ' msoverHL';
			// elem.setAttribute('class', elem.ClassName);
		}
	},
	addButtonMouseout:function() {
		elem = (this.nodeName.toLowerCase() == 'button') ? this : this.parentNode;
		if (elem.className != '') {
			re = (elem.className.indexOf('highlight') == -1) ? /\smsover/ : /\smsoverHL/;
			elem.className = elem.className.replace(re, '');
			// elem.setAttribute('class', elem.className);
		}
	},
	
	addItemPerPageBehavior:function() {
		if (document.getElementById && document.getElementById('itemsPerPage')) {
			var obj = document.getElementById('itemsPerPage');
			obj.title = 'Nach einer Auswahl wird die Seite automatisch neu geladen';
			obj.onchange = m2.addItemPerPageFormSubmit;
		}
	},
	addItemPerPageFormSubmit:function() {
		document.getElementById('itemsPerPageForm').submit();
	},
	
	addPhotoThumbsBehavior:function() {
		if (document.getElementById && document.getElementById('foto-thumbnails')) {
			var obj = document.getElementById('foto-thumbnails');
			var i = 0;
			while (obj.getElementsByTagName('a')[i]) {
				var child = obj.getElementsByTagName('a')[i];
				child.onmouseover = child.onfocus = m2.addPhotoMouseevent;
				child.onmouseout = child.onblur = m2.addPhotoMouseevent;
				child.onclick = child.onkeypress = m2.addPhotoClick;
				i++;
			}
		}
	},
	addPhotoMouseevent:function() {
		var j = 0;
		while (this.getElementsByTagName('img')[j]) {
			var img = this.getElementsByTagName('img')[j];
			if (m2.setClassName(img) && img.className.indexOf('zoom') != -1) {
				if ((img.src.indexOf('-no') != -1)) {
					re = /no$/;
					var string = 'ms';
					var bgcolor = '#eee';
				}
				else {
					re = /ms$/;
					var string = 'no';
					var bgcolor = '#ddd';
				}
				img.src = img.src.replace(re, string);
				this.parentNode.style.backgroundColor = bgcolor;
				return false;
			}
			j++;
		}
	},
	addPhotoClick:function(e) {
		e=e||window.event;
		// if "enter" had been pressed proceed to click tracking
		// alert(e.type);
		if (e.type == 'click' || (e.keyCode && e.keyCode == 13)) {
			m2.openPhoto(this.href);
			this.blur();
		}
		// return false;
	},
	openPhoto:function(href) {
		
	},
		
	// check if an object has a class attribute and set a className object for consistent reference in script
	setClassName:function(obj) {
		if (obj.className) {
			obj = null;
			return true;
		}
		else if (obj.getAttribute) {
			obj.className = obj.className || obj.getAttribute('class');
			obj = null;
			return true;
		}
		else return false;
	},
	
	// toggle visibility of the mediatype select list
	toggleMediatype:function() {
		obj = document.getElementById('sMediatype');
		obj2 = document.getElementById('mediatypeLabel');
		checkbox = document.getElementById('sKategorie');
		obj.style.display =  (checkbox.checked) ? 'block' : 'none';
		obj2.style.display =  (checkbox.checked) ? 'inline' : 'none';
		if (checkbox.className && checkbox.checked) checkbox.className = 'checkbox displayed';
	}
}

// add a function getElementsByClassName and return all matching objects in an array, much like getElementsByTagName
if (!document.getElementsByClassName) { // getElementsByClassName is integrated in Firefox 3
	document.getElementsByClassName = function(name) {
		var results = new Array();
		var elems = document.getElementsByTagName("*");
		var i = 0;
		while (elems[i]) {
			if (m2.setClassName(elems[i]) && elems[i].className.indexOf(name) != -1) results[results.length] = elems[i];
			i++;
		}
		if (results.length == 0) results = false;
		return results;
	}
}
// prevent flicker un IE
try { document.execCommand( "BackgroundImageCache", false, true); } catch(e) {};

// initialize
m2.addArchiveHover();
m2.addItemPerPageBehavior();
m2.addPhotoThumbsBehavior();

// don't display the mediatype select list in the default view of the registration form
if (document.getElementById('sMediatype')) {
	document.getElementById('sMediatype').style.display = 'none';
	document.getElementById('mediatypeLabel').style.display = 'none';
	if (document.getElementById('sKategorie')) {
		obj = document.getElementById('sKategorie');
		obj.onchange = obj.onclick = obj.onkeydown = obj.onkeypress = obj.onblur = m2.toggleMediatype;
		m2.toggleMediatype(); // initialize
	}
}

// Show Thickbox images only if javascript is enabled
var elements = document.getElementsByClassName("thickbox");
if (elements.length) {
	var i = 0;
	while (elements[i]) {
		elements[i].style.display = "inline";
		i++;
	}
}

function generateLastEventPhotoBox() {
	$("#m2Main").css("min-height","44em");
	$("body").append('<div id="lastEventPhotoBox"><h2>R&uuml;ckblick</h2><ul class="m2NavReiter"><li class="active last"><a class="" href="veranstaltungen/"><span class="" title="Zu den Fotos"><span class="">Fotos</span></span></a></li></ul></div>');
	var posX = $("#m2Stage").get(0).offsetLeft;
	//var posY = $("#m2Copy").get(0).offsetTop;
	$("#lastEventPhotoBox").css("left",posX+'px');
	//$("#lastEventPhotoBox").css("top",posY+'px');
	updateLastEventPhotoBox();
}

function updateLastEventPhotoBox() {
	var imageEl = new Image;
	var sCall = "/fileadmin/scripts/ajax/getNewEventPhotos.php";
	if ($("#lastEventPhotoBox img").attr("rel")) {
		sCall += "?lastimage=" + $("#lastEventPhotoBox img").attr("rel");
	}
	$.get(sCall,function(data) {
		if (!$(data).find("image").text().length) {
			$("#lastEventPhotoBox").remove();
		} else {
			$("#m2FooterTopLink p").css("padding-top","150px");
			$("#m2Copyright p").css("padding-top","150px");
			imageEl.onload = function() { imageEl.onload = null; updateImage(imageEl,$(data)); }
			imageEl.src = $(data).find("filename").text();
		}
	});
}

function updateImage(imageEl,data) {
	var sLink = "/veranstaltungen/"+data.find("year").text()+"/"+data.find("month").text()+"/"+data.find("day").text()+"/fotos/";
	$("#lastEventPhotoBox a").attr("href",sLink);
	if ($("#lastEventPhotoBox img").get().length) {
		$("#lastEventPhotoBox .m2NavReiter").fadeOut("slow");
		$("#lastEventPhotoBox img").fadeOut("slow",function() {
			$("#lastEventPhotoBox img").remove();
			$("#lastEventPhotoBox h2").after(imageEl);
			//$("#lastEventPhotoBox img").attr("src",data.find("filename").text());
			$("#lastEventPhotoBox img").attr("rel",data.find("id").text());
			$("#lastEventPhotoBox img").fadeIn("slow");
			$("#lastEventPhotoBox .m2NavReiter").fadeIn("slow");
		});
	} else {
		//$("#lastEventPhotoBox img").attr("src",data.find("filename").text());
		$("#lastEventPhotoBox h2").after(imageEl);
		$("#lastEventPhotoBox img").attr("rel",data.find("id").text());
		$("#lastEventPhotoBox img").BlindDown("slow");
	}
	t = setTimeout("updateLastEventPhotoBox()",5000);
}

function recalculateLastEventPhotoBox() {
	index = navigator.userAgent.search(/MSIE/);
	if (index != -1) var addheight = 30; else var addheight = 10;

	var posX = $("#m2Stage").get(0).offsetLeft;
	if ($("#m2Partner").size()) {
		var posY = $("#m2Partner").get(0).offsetTop + $('#m2Partner h2').height() + $('#m2Partner img').height() + addheight;
	} else {
		//var posY = $("#m2NavCol").get(0).offsetTop + $("#m2NavCol").height();
		var posY = $("#m2NavCol").get(0).offsetTop + $("#m2NavCol").height() + 20;
	}
	$("#lastEventPhotoBox").css("left",posX+'px');
	$("#lastEventPhotoBox").css("top",posY+'px');
	$("#lastEventPhotoBox").css("display","block");
}

function recalculateMediaPartnerBox(e) {
	if ($("#m2Copy").length) {
		if ($("#m2Copy").attr("class").search(/m2Copytext/) != -1) {	
			var topalign = $(".m2Separator:first");
		} else {
			var topalign = $("#m2Copy");
		}
	} else {
		var topalign = $(".m2Separator:first");
	}
	if (topalign.get(0).offsetTop > ($("#m2Nav").get(0).offsetTop + $("#m2Nav").get(0).offsetHeight) || $("span.bcAct").text() == "Startseite") {
		if (e == 'noevent') {
			var posX = $("#m2NavCol").get(0).offsetLeft;
			var posY = topalign.get(0).offsetTop;
			$("#m2Partner").css("left", posX + 'px');
			$("#m2Partner").css("top", posY + 'px');
			if ($("span.bcAct").text() == "Startseite") {
				recalculateLastEventPhotoBox();
			}
		} else {
			if (!e) {
				e = window.event;
			}
			if ((e.ctrlKey) || (e.keyCode == 17) || (e.keyCode == 107) || (e.keyCode == 109)) {
				var posX = $("#m2NavCol").get(0).offsetLeft;
				var posY = topalign.get(0).offsetTop;
				$("#m2Partner").css("left", posX + 'px');
				$("#m2Partner").css("top", posY + 'px');
				if ($("span.bcAct").text() == "Startseite") {
					recalculateLastEventPhotoBox();
				}
			}
		}
	} else {
		$('#m2Partner').css('top',($("#m2Nav").get(0).offsetTop + $("#m2Nav").get(0).offsetHeight + 20)+"px");
	}
}

function pushDownMediaPartnerBox() {
	$('#m2Partner').css('top',($("#m2Nav").get(0).offsetTop + $("#m2Nav").get(0).offsetHeight + 20)+"px");
}

$(document).ready(function() {
	if ($("span.bcAct").text() == "Startseite") {
		generateLastEventPhotoBox();
	}
	recalculateMediaPartnerBox("noevent");
	// remove IE 7+ from recalculateLastEventPhotoBox event call
	index = navigator.userAgent.indexOf("MSIE");
	if (index != -1) index = parseFloat(navigator.userAgent.substring(index+"MSIE".length+1));
	if (index < 7) window.onkeyup = document.onkeyup = recalculateMediaPartnerBox;
	

	// Initialize imagebox
	$.ImageBox.init({
			loaderSRC: 'img/loadingAnimation.gif',
			closeHTML: '<img src="img/imagebox/close.jpg" alt="Schließen" width="70" height="20" />',
			textImage: 'Zeige Bild',
			textImageFrom: 'von'
	});
});
