var qtButtons = new Array();
var qtOpenTags = new Array();
	var height_max = 30;	
	var height_min = 5;		
	var height_step = 5;	
	function qtButton(id, display, tagStart, tagEnd, title, access, open) {
		this.id = id;				
		this.display = display;		
		this.tagStart = tagStart; 	
		this.tagEnd = tagEnd;		
		this.title = title;			
		this.access = access;		
		this.open = open;			
	}
	qtButtons.push(
		new qtButton('qt_bold', 'Fett', '<strong>' ,'</strong>' ,'Fettschrift', 'b')
	);
	qtButtons.push(
		new qtButton('qt_italic', 'Kursiv', '<em>', '</em>' ,'Kursivschrift', 'k')
	);
	qtButtons.push(
		new qtButton('qt_block', 'Zitat', '<blockquote>', '</blockquote>' ,'Zitieren', 'z')
	);
	qtButtons.push(
		new qtButton('qt_code', 'Code', '<code>', '</code>' ,'Code', 'c')
	);
	qtButtons.push( // Special button: LINK
		new qtButton('qt_link', 'Link', '', '</a>' ,'Link einf&uuml;gen', 'l')
	);
	qtButtons.push( // Special button: INCREASE TEXTAREA HEIGHT
		new qtButton('qt_increase', '+', '', '' ,'Textfeld vergr&ouml;&szlig;ern', 'l', -1)
	);
	qtButtons.push( // Special button: DECREASE TEXTAREA HEIGHT
		new qtButton('qt_decrease', '-', '', '' ,'Textfeld verkleinern', 'l', -1)
	);
function displayQuicktags(textareaID) {
	textarea_id = textareaID;
	for (i = 0; i < qtButtons.length; i++) {
		qtShowButton(qtButtons[i], i);
	}
}
function qtTextareaSize(type) {
	var height_current = document.getElementById(textarea_id).rows;
	switch (type) {
		case 'increase':
			if ( (height_current + height_step) > height_max ) {
				var my_heightchange = height_max;
			} else {
				var my_heightchange = height_current + height_step;
			}
			break;
		case 'decrease':
			if ( (height_current - height_step) < height_min ) {
				var my_heightchange = height_min;
			} else {
				var my_heightchange = height_current - height_step;
			}
			break;
		default:
			break;
	}
	document.getElementById(textarea_id).rows = my_heightchange;
}
function qtInsertLink(myField, i, defaultValue) {
	if (!defaultValue) {
		defaultValue = 'http://';
	}
	if (!qtCheckOpenTags(i)) {
		var URL = prompt('URL:' ,defaultValue);
		if (URL) {
			qtButtons[i].tagStart = '<a href="' + URL + '">';
			qtInsertTag(myField, i);
		}
	}
	else {
		qtInsertTag(myField, i);
	}
}
function qtShowButton(button, i) {
	if (button.access) {
		var accesskey = ' accesskey = "' + button.access + '"'
	}
	else {
		var accesskey = '';
	}

	if (button.title) {
		var titlevalue = ' title = "' + button.title + '"'
	}
	else {
		var titlevalue = '';
	}
	switch (button.id) {
		case 'qt_close': 
			document.write('<input type="button" id="' + button.id + '" ' + accesskey + titlevalue + ' class="qt_button" onclick="qtCloseAllTags();" value="' + button.display + '" />');
			break;
		case 'qt_link': 
			document.write('<input type="button" id="' + button.id + '" ' + accesskey + titlevalue + ' class="qt_button" onclick="qtInsertLink(document.getElementById(textarea_id), ' + i + ');" value="' + button.display + '" />');
			break;
		case 'qt_increase': 
			document.write('<input type="button" id="' + button.id + '" ' + accesskey + titlevalue + ' class="qt_button" onclick="qtTextareaSize(\'increase\');" value="' + button.display + '" />');
			break;
		case 'qt_decrease': 
			document.write('<input type="button" id="' + button.id + '" ' + accesskey + titlevalue + ' class="qt_button" onclick="qtTextareaSize(\'decrease\');" value="' + button.display + '" />');
			break;
		default:
			document.write('<input type="button" id="' + button.id + '" ' + accesskey + titlevalue + ' class="qt_button" onclick="qtInsertTag(document.getElementById(textarea_id), ' + i + ');" value="' + button.display + '" />');
			break;
	}
}
function qtAddTag(button) {
	if (qtButtons[button].tagEnd != '') {
		qtOpenTags[qtOpenTags.length] = button;
		document.getElementById(qtButtons[button].id).value = '/' + document.getElementById(qtButtons[button].id).value;
	}
}
function qtRemoveTag(button) {
	for (i = 0; i < qtOpenTags.length; i++) {
		if (qtOpenTags[i] == button) {
			qtOpenTags.splice(i, 1);
			document.getElementById(qtButtons[button].id).value = document.getElementById(qtButtons[button].id).value.replace('/', '');
		}
	}
}
function qtCheckOpenTags(button) {
	var tag = 0;
	for (i = 0; i < qtOpenTags.length; i++) {
		if (qtOpenTags[i] == button) {
			tag++;
		}
	}
	if (tag > 0) {
		return true; 
	}
	else {
		return false; 
	}
}	
function qtCloseAllTags() {
	var count = qtOpenTags.length;
	for (o = 0; o < count; o++) {
		qtInsertTag(document.getElementById(textarea_id), qtOpenTags[qtOpenTags.length - 1]);
	}
}
function qtInsertTag(myField, i) {
	if (document.selection) {
		myField.focus();
	    sel = document.selection.createRange();
		if (sel.text.length > 0) {
			sel.text = qtButtons[i].tagStart + sel.text + qtButtons[i].tagEnd;
		}
		else {
			if (!qtCheckOpenTags(i) || qtButtons[i].tagEnd == '') {
				sel.text = qtButtons[i].tagStart;
				qtAddTag(i);
			}
			else {
				sel.text = qtButtons[i].tagEnd;
				qtRemoveTag(i);
			}
		}
		myField.focus();
	}
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var cursorPos = endPos;
		var scrollTop = myField.scrollTop;
		if (startPos != endPos) {
			myField.value = myField.value.substring(0, startPos)
			              + qtButtons[i].tagStart
			              + myField.value.substring(startPos, endPos) 
			              + qtButtons[i].tagEnd
			              + myField.value.substring(endPos, myField.value.length);
			cursorPos += qtButtons[i].tagStart.length + qtButtons[i].tagEnd.length;
		}
		else {
			if (!qtCheckOpenTags(i) || qtButtons[i].tagEnd == '') {
				myField.value = myField.value.substring(0, startPos) 
				              + qtButtons[i].tagStart
				              + myField.value.substring(endPos, myField.value.length);
				qtAddTag(i);
				cursorPos = startPos + qtButtons[i].tagStart.length;
			}
			else {
				myField.value = myField.value.substring(0, startPos) 
				              + qtButtons[i].tagEnd
				              + myField.value.substring(endPos, myField.value.length);
				qtRemoveTag(i);
				cursorPos = startPos + qtButtons[i].tagEnd.length;
			}
		}
		myField.focus();
		myField.selectionStart = cursorPos;
		myField.selectionEnd = cursorPos;
		myField.scrollTop = scrollTop;
	}
	else {
		if (!qtCheckOpenTags(i) || qtButtons[i].tagEnd == '') {
			myField.value += qtButtons[i].tagStart;
			qtAddTag(i);
		}
		else {
			myField.value += qtButtons[i].tagEnd;
			qtRemoveTag(i);
		}
		myField.focus();
	}
}
function qtInsertContent(myField, myValue) {
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
		myField.focus();
	}
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var scrollTop = myField.scrollTop;
		myField.value = myField.value.substring(0, startPos)
		              + myValue 
                      + myField.value.substring(endPos, myField.value.length);
		myField.focus();
		myField.selectionStart = startPos + myValue.length;
		myField.selectionEnd = startPos + myValue.length;
		myField.scrollTop = scrollTop;
	} else {
		myField.value += myValue;
		myField.focus();
	}
}