// allgemeine Ajax-Funktionen
// wurde größtenteils durch mootools.js - Ajax Funktionen ersetzt
//
// Funktion zum Setzen der Sprache

function changeLang() {
	var language = document.getElementById('choose_language').options[document.getElementById('choose_language').selectedIndex].value;
	Cookie.set("language",language,{duration:999,path:"/"});
	window.location.reload();
};

// Helferfunktion f. Ajax-Klasse

function collect(a,f) {
	var n=[];
	for(var i=0;i<a.length;i++) {
		var v=f(a[i]);
		if(v!=null)n.push(v)
	}
	return n
};

// Ajax-Klasse

ajax={};
ajax.useXML = false;
ajax.x=function(){
	try{
		return new ActiveXObject('Msxml2.XMLHTTP')
	} catch(e) {
		try {
			return new ActiveXObject('Microsoft.XMLHTTP')
		} catch(e) {
			return new XMLHttpRequest()
		}
	}
};
ajax.serialize=function(f) {
	var g=function(n) {
		return f.getElementsByTagName(n)
	};
	var nv=function(e) {
		if(e.name) return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''
	};
	var i=collect(g('input'),function(i){
		if((i.type!='radio'&&i.type!='checkbox')||i.checked) return nv(i)}
	);
	var s=collect(g('select'),nv);
	var t=collect(g('textarea'),nv);
	return i.concat(s).concat(t).join('&');
};
ajax.send=function(u,f,m,a){
	var x=ajax.x();
	x.open(m,u,true);
	x.onreadystatechange=function() {
		//alert ("useXML is "+ajax.useXML);
		if(x.readyState==4) {
			if (ajax.useXML) {
				var xmlObj = x.responseXML;
				if(!xmlObj.hasChildNodes) {
					// seems that Mime-Type was not recognized
					// we create the right object by hand
					xmlObj = new ActiveXObject("Msxml2.DOMDocument");
					var xmlText = x.responseText;
					xmlText = xmlText.replace(/<\/html>/,"");
					xmlText = xmlText.slice(xmlText.indexOf("<body>"));
					xmlObj.loadXML(xmlText);
				}
				f(xmlObj);
			} else {
				f(x.responseText);
			}
		}
	};
	if(m=='POST') x.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	x.send(a)
};
ajax.sendXML=function(u,f,m,a){
	var x=ajax.x();
	x.open(m,u,true);
	x.onreadystatechange=function() {
		//alert ("useXML is "+ajax.useXML);
		if(x.readyState==4) f(x.responseXML);
	};
	if(m=='POST') x.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	x.send(a)
};
ajax.get=function(url,func) {
	ajax.send(url,func,'GET')
};
ajax.getXML=function(url,func) {
	ajax.sendXML(url,func,'GET')
};
ajax.gets=function(url) {
	var x=ajax.x();
	x.open('GET',url,false);
	x.send(null);
	return x.responseText
};
ajax.post=function(url,func,args) {
	ajax.send(url,func,'POST',args)
};
ajax.update=function(url,elm) {
	var e=$(elm);
	var f=function(r) {
		e.innerHTML=r
	};
	ajax.get(url,f)
};
ajax.submit=function(url,elm,frm) {
	var e=$(elm);
	var f=function(r) {
		e.innerHTML=r
	};
	ajax.post(url,f,ajax.serialize(frm))
};

// Für Inserate: Macht auf jeden Fall einen Form-Submit, wenn man sich
// Durch die Seiten bewegt

function oFormSubmit(fAction)
{
	var oForm = document.getElementById('oForm');

	if (fAction != undefined)
		oForm.action = fAction;
	oForm.submit();
}

// Fügt eine weitere Funktion dem "onLoad" Handler hinzu

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

// Fügt eine weitere Funktion dem "onUnload" Handler hinzu

function addUnloadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
		window.onunload = func;
	} else {
		window.onunload = function() {
			oldonunload();
			func();
		}
	}
}

// Obsolet:

function initFileUploads() {
	var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var image = document.createElement('img');
	image.src='/img/load_button.gif';
	fakeFileUpload.appendChild(image);
	var x = document.getElementsByTagName('input');
	for (var i=0;i<x.length;i++) {
		if (x[i].type != 'file') continue;
		if (x[i].parentNode.className != 'fileinputs') continue;
		x[i].className = 'file hidden';
		var clone = fakeFileUpload.cloneNode(true);
		x[i].parentNode.appendChild(clone);
		x[i].relatedElement = clone.getElementsByTagName('input')[0];
		x[i].onchange = x[i].onmouseout = function () {
			this.relatedElement.value = this.value;
		}
	}
}

// Ermittelt Text-Inhalt eines XML-Tags

function getTagContent(xmlObj,tagName) {
	try {
		return xmlObj.getElementsByTagName(tagName)[0].firstChild.nodeValue;
	} catch(e) {
		return "";
	}
	return "";
}

// Setzt Opacity eines Elementes (durch mootools.js ersetzt)

function setOpacity(elm,alpha) {
	$(elm).style.opacity = alpha/100;
	$(elm).style.filter = "alpha(opacity="+alpha+");";
}

// Lookup-Table für Questim-ID:

var QIDcharTable = '123456789abcdefghijklmnopqrstuvwxyz';

// Erzeugt Questim-ID aus Datenbank-ID:

function createID(id) {
	var radix = QIDcharTable.length;
	var withOffset = Number(id)+30000;
	var str="";
	do {
		var digit = withOffset%radix;
		str = QIDcharTable.charAt(digit)+str;
		withOffset = Math.floor(withOffset/radix);
	} while (withOffset > 0);
	return str;
}

// Erzeugt Questim-ID mit "Q-" als Prefix

function createQID(id) {
	return 'Q-'+createID(id);
}

// Erzeugt Search-ID mit "S-" als Prefix

function createSID(id) {
	return 'S-'+createID(id);
}


// Erzeugt Datenbank-ID aus Questim-ID (ohne Q-)

function QIDtoID(QID) {
	QID = QID.toLowerCase();
	var radix = QIDcharTable.length;
	var i;
	var num=0;
	var str = "";
	for (i=0;i<QID.length;i++) {
		num=(num*radix)+Number(QIDcharTable.indexOf(QID.charAt(i)));
	}
	num -= 30000;
	return num;
}

// Wandelt Zahlen in Dezimal-Formatierte Zahlen um (alt)

function decimalToStr_old(value,stellen) {
	/*
	var realValue = parseFloat(value);
	var fValue = Math.floor(realValue);
	if (realValue==fValue) return fValue;
	else {
		var fraction = (realValue-fValue)+"";
		if (fraction.length==1) fraction+="0";
			else fraction = fraction.substr(0,2);
		return fValue+","+fraction;
	}
	*/
	var parts = value.split(/[\.,]/);
	var doJoin = false;
	if (parts[1]!="00") doJoin = true;
	if (stellen!=undefined) parts[1] = parts[1].substr(0,stellen);
	if (doJoin) return parts.join(",");
	else return parts[0];
}

// Wandelt Zahlen in Dezimal-Formatierte Zahlen um (alt)

function decimalToStr(value,stellen) {
	var parts = value.split(/[\.,]/);
	var number = parts[0];
	var komma = parts[1];
	var str = "";
	var i,k=0;
	for (i=number.length-1; i>=0; i--) {
		if (k>2) {k=0; str = "."+str;}
		str = number.substr(i,1)+str;
		k++
	}
	if (komma==0) return str;
	if (komma<10) komma = "0"+parseInt(komma);
	return str+","+komma;
}

// Einfache Dezimal-Konversion

function decimalNr(value) {
	return value.replace(".",",");
}

// Ermittelt Text-Inhalt aus XML-Tag

function getTextNode(node) {
	if (node.firstChild!=null) return node.firstChild.nodeValue;
	return "";
}

// Entfernt HTML-Tags aus Texten, indem sie in Sichtbaren Text umgewandelt werden:

function deHTML(str) {
	str = str.replace("<","&lt;");
	str = str.replace(">","&gt;");
	return str;
}

// Selektiert Wert(value) eines Pulldowns(elm)

function setSelected(elm,value) {
	$each(elm.options,function(option,idx){
		if (option.value==value) elm.selectedIndex = idx;
	});
}

// Öffnet Popup mit URL name und vorgespeicherten Preferenzen

function popup(name,prefs) {
	var popupX=0, popupY=0, popupWin;
	var popupPrefs = {
		info:{
			width:500,
			height:500
		}
	};
	var p = popupPrefs[prefs];
	var s = window.getSize().size;
	popupX = (s.x-p.width)/2;
	popupY = (s.y-p.height)/2;
	popupWin = open("/popup/"+name,"_blank","width="+p.width+",height="+p.height+",scrollbars=yes,resizable=yes");
	popupWin.moveTo(popupX,popupY);
}
function positionPopup() {
	//popupWin
}

// Überprüft Email auf Richtigkeit:

function checkEmailAddress(email) {
	var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
	var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
	var regex = "^" +usr + "\@" + domain + "$";
	var rgx = new RegExp(regex);
	if (rgx.exec(email))
		return true;
	return false;
}
