/*
	Written by Jonathan Snook, http://www.snook.ca/jonathan
	Add-ons by Robert Nyman, http://www.robertnyman.com
*/
function getElementsByClassName(oElm, strTagName, strClassName){
//	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrElements = oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}


function b64arrays() {
	var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
	b64 = [];
	f64 =[];
	for (var i=0; i<b64s.length ;i++) {
		b64[i] = b64s.charAt(i);
		f64[b64s.charAt(i)] = i;
	}
}

function encode_base64(d) {

	var r=[];
	var i=0;
	var dl=d.length;

	if ((dl%3) == 1) {
		d[d.length] = 0; d[d.length] = 0;
	}
	if ((dl%3) == 2) {
		d[d.length] = 0;
	}
	while (i<d.length) {
		r[r.length] = b64[d[i]>>2];
		r[r.length] = b64[((d[i]&3)<<4) | (d[i+1]>>4)];
		r[r.length] = b64[((d[i+1]&15)<<2) | (d[i+2]>>6)];
		r[r.length] = b64[d[i+2]&63];
		if ((i%57)==54) {
			r[r.length] = "\n";
		}
		i+=3;
	}

	if ((dl%3) == 1) {
		r[r.length-1] = r[r.length-2] = "=";
	}
	if ((dl%3) == 2) {
		r[r.length-1] = "=";
	}
	var t=r.join("");
	return t;

}


function b64t2d(t) {
	var d=[];
	var i=0;

	t=t.replace(/\n|\r/g,""); t=t.replace(/=/g,"");
	while (i<t.length) {
		d[d.length] = (f64[t.charAt(i)]<<2) | (f64[t.charAt(i+1)]>>4);
		d[d.length] = (((f64[t.charAt(i+1)]&15)<<4) | (f64[t.charAt(i+2)]>>2));
		d[d.length] = (((f64[t.charAt(i+2)]&3)<<6) | (f64[t.charAt(i+3)]));
		i+=4;
	}
	if (t.length%4 == 2) {
		d = d.slice(0, d.length-2);
	}
	if (t.length%4 == 3) {
		d = d.slice(0, d.length-1);
	}
	return d;
}

function utf8d2t(d) {
	var r=new Array;
	var i=0;
	while(i<d.length) {
		if (d[i]<128) {
			r[r.length]= String.fromCharCode(d[i]);
			i++;
		} else if ((d[i]>191) && (d[i]<224)) {
			r[r.length]= String.fromCharCode(((d[i]&31)<<6) | (d[i+1]&63));
			i+=2;
		} else {
			r[r.length]= String.fromCharCode(((d[i]&15)<<12) | ((d[i+1]&63)<<6) | (d[i+2]&63));
			i+=3;
		}
	}
	return r.join("");
}

function decode() {
	b64arrays();
	var elements = getElementsByClassName(document, "span", "mto");
	for (var i = 0; i < elements.length; i++) {
		var address = utf8d2t(b64t2d(elements[i].firstChild.data));
		elements[i].innerHTML = '<a href="mailto:'+address+'">'+address+'</a>';
	}
}

function prepare_request() {
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!http_request) {
		alert("Ende :( Kann keine XMLHTTP-Instanz erzeugen");
		return false;
    } else {
		return http_request;
	}
}

function removeMessageBox()
{
	var old_message = document.getElementById('messageBox');
	if (old_message != null) {
		document.getElementById('body').removeChild(old_message);
	}
}

function displayMessageBox(message)
{
	var first_node = document.getElementById('content');
	var messageBox = document.createElement('div');
	messageBox.id = 'messageBox';
	messageBox.appendChild(document.createTextNode(message));
	document.getElementById('body').insertBefore(messageBox,first_node);

}

function setResponseMessage() {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			removeMessageBox();
			displayMessageBox(http_request.responseText);
		} else {
			alert("Bei dem Request ist ein Problem aufgetreten.");
		}
	}
}

function registerNewsletter()
{
	
	var input = document.getElementById('inpSubscribe')

	if ( (input.value.indexOf("@") != -1) && (input.value.indexOf(".") != -1) && (input.value != "") ) {

		var url = '/index.php?script=ajax';

		if (http_request = prepare_request()) {
			http_request.onreadystatechange = setResponseMessage;
			http_request.open("POST", url, false);
			http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			http_request.send("action=mail_address&address="+input.value);
		}

		input.value = '';

	}

}

function alterObjOpener(action,mod,obj) {
	
	var parent_node = document.getElementById(mod.toLowerCase()+'_item_'+obj);
	var opener = getElementsByClassName(parent_node,'div','object_opener');

	if (action == 'load' || action == 'show') {
		opener[0].firstChild.href = "javascript:hideObjDetails('"+mod+"',"+obj+");";
		opener[0].firstChild.firstChild.nodeValue = "hide details!";
	} else if (action == 'hide') {
		opener[0].firstChild.href = "javascript:showObjDetails('"+mod+"',"+obj+");";
		opener[0].firstChild.firstChild.nodeValue = "click for more information!";
	}

}

function showSpinningWheelOfDeath(mod,obj) {
	var img = document.createElement('img');
	img.src = 'share/img/icons/spinningwheel.gif';
	img.alt = 'spinning wheel of death';
	document.getElementById(mod.toLowerCase()+'_item_'+obj).appendChild(img);
}

function dropSpinningWheelOfDeath(mod,obj) {
	var parent_node = document.getElementById(mod.toLowerCase()+'_item_'+obj);
	parent_node.removeChild(parent_node.lastChild);
}

function loadDetails(mod,obj) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {

			dropSpinningWheelOfDeath(mod,obj);

            var object_item = document.getElementById(mod.toLowerCase()+'_item_'+obj); 

			var div = document.createElement('div');
//			div.className = mod.toLowerCase()+'_item_content';
            div.className = 'object_item_content';
			div.innerHTML = http_request.responseText;

            object_item.appendChild(div);

			alterObjOpener('load',mod,obj);

		} else {
			alert("Bei dem Request ist ein Problem aufgetreten.");
		}
	}
}

function hideObjDetails(mod,obj) {
//    var content_class = mod.toLowerCase()+'_item_content';
    var content_class = 'object_item_content';
    var content_container = document.getElementById(mod.toLowerCase()+'_item_'+obj);
	var detail_container = getElementsByClassName(content_container,'div',content_class)[0];

	if (detail_container != null) {
		detail_container.style.display = 'none';
		alterObjOpener('hide',mod,obj);
	}
}

function showObjDetails(mod,obj) {
    var content_class = 'object_item_content';
    var content_container = document.getElementById(mod.toLowerCase()+'_item_'+obj);
	var detail_container = getElementsByClassName(content_container,'div',content_class)[0];

	if (detail_container != null) {
		detail_container.style.display = 'block';
		alterObjOpener('show',mod,obj);
	}
}

function showDetails(mod,obj) {
	var url = '/index.php?script=ajax';

	if (!showObjDetails(mod,obj)) {

		showSpinningWheelOfDeath(mod,obj);

		if (http_request = prepare_request()) {
			http_request.onreadystatechange = function() {loadDetails(mod,obj)};
			http_request.open("POST", url, true);
			http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			http_request.send("action=load_content&mod="+mod+"&obj="+obj);
		}

	}
}