if (typeof (lc) != 'object')
	lc = new Object();

if (typeof (lc.general) != 'object')
	lc.general = new Object();

if (typeof (YAHOO.limacity) != 'object')
	YAHOO.limacity = new Object();

lc.general.findClass = function(el, className) {
	if (YAHOO.util.Dom.hasClass(el, className)) {
		return el;
	}

	if (el.parentNode && el.parentNode != el)
		return lc.general.findClass(el.parentNode, className);
}

lc.general.addInnerToTextfield = function(el, my, id) {
	if (id != undefined) {
		quotes = YAHOO.util.Dom.get('quoteIds');

		if (quotes != undefined) {
			quotes.value += ',' + id;
		}
	}

	inner = YAHOO.util.Selector.query('.inner', my, true);
	/*
	 * old code for addToTextfield() with 2 parameters, do not delete. (needed
	 * if switched to inputbox) lc.general.addToTextfield(el, inner.innerHTML);
	 */
	 
	if (inner.innerHTML.substring(0, 4) == "b64_") {
		lc.general.addToTextfield(el, decode64(inner.innerHTML.substring(4)), '');
	} else {
		lc.general.addToTextfield(el, inner.innerHTML, '');
	}
	
}

lc.general.addToTextfield = function(el, before, after) {
	var text = before + after;

	myField = document.getElementById(el);
	if (!myField)
		return;

	// IE support
	if (document.selection) {
		myField.focus();

		sel = document.selection.createRange();

		var insertText = sel.text;
		sel.text = before + insertText + after;

		if (insertText.length == 0) {
			sel.move('character', -after.length);
		}

		sel.select();
	}
	// MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var insertText = myField.value.substring(startPos, endPos);

		myField.value = myField.value.substring(0, startPos) + before
				+ insertText + after
				+ myField.value.substring(endPos, myField.value.length);

		if (insertText.length != 0) {
			myField.selectionStart = myField.selectionEnd = endPos
					+ before.length + after.length;
		} else {
			myField.selectionStart = myField.selectionEnd = endPos
					+ before.length;
		}
	} else {
		myField.value += text;
	}

	myField.focus();

}

lc.general.addBBCode = function(el, id) {
	BB = {
		u : {
			text :'Unterstrichener Text:',
			tag :'u'
		},
		url : {
			text :'Link:',
			tag :'url'
		},
		i : {
			text :'Kursiver Text:',
			tag :'i'
		},
		b : {
			text :'Fetter Text:',
			tag :'b'
		},
		del : {
			text :'Durchgestrichener Text:',
			tag :'del'
		},
		quote : {
			text :'Zitat:',
			tag :'quote'
		},
		code : {
			text :'Code:',
			tag :'code'
		},
		youtube : {
			text :'Youtube-Link:',
			tag :'youtube'
		},
		amazon : {
			text :'Amazon-Produktlink per ASIN:',
			tag :'amazon'
		},
		math : {
			text :'(LaTex-)Formel:',
			tag :'math'
		}

	};

	if (!BB && !BB[id] && !BB[id].text && !BB[id].tag)
		return;

	// var answer = prompt(BB[id].text);
	// if (! answer == "") {
	// lc.general.addToTextfield(el, '[' + BB[id].tag + ']' + answer + '[/' +
	// BB[id].tag + ']');
	lc.general.addToTextfield(el, '[' + BB[id].tag + ']',
			'[/' + BB[id].tag + ']');
	/*
	 * } else { myField = document.getElementById(el); if (myField)
	 * myField.focus(); }
	 */
}

lc.general.keepAlive = function(el, className) {
	YAHOO.util.Connect.asyncRequest('GET', '/ajax_keepalive', null, null);
}

lc.general.requestAndFunction = function(url, func, method, data) {
	YAHOO.util.Connect.asyncRequest(method ? method : 'GET', url, {
		success :func
	}, data);
	return false;
}

lc.general.showKarma = function(id) {
	displayKarma = function(o) {
		YAHOO.util.Dom.get('karmaTable').innerHTML = o.responseText;
	}

	YAHOO.util.Connect.asyncRequest('POST', '/ajax_get_karma', {
		success :displayKarma
	}, 'id=' + id);

	YAHOO.util.Dom.addClass('karmaBox', 'visible');

}

lc.general.postForm = function() {
	var evTarget = YAHOO.util.Selector.query('.formStatus', this, true);

	YAHOO.util.Connect.asyncRequest('POST', this.action, {
		success : function(o) {
			evTarget.innerHTML = o.responseText;
			window.setTimeout( function() {
				evTarget.innerHTML = '';
			}, 10000);
		}
	}, YAHOO.util.Connect.setForm(this));

	evTarget.innerHTML = '<img src="images/loader.gif" class="loader" alt="Laden..." />';
}

lc.general.flagTroll = function(id) {
	YAHOO.util.Dom.get('troll' + id).innerHTML = '<img src="/images/loader.gif" height=16/>';

	lc.general
			.requestAndFunction(
					'/ajax_flag_troll',
					function(o) {
						YAHOO.util.Dom.get('troll' + id).innerHTML = '<img src="/images/layout/icons/tick.png" />';
						window
								.setTimeout(
										function() {
											YAHOO.util.Dom.get('troll' + id).innerHTML = '&nbsp;';
										}, 3000);
					}, 'POST', 'reply=' + id);
}

lc.general.hideDomaincheck = function() {
	lc.general.requestAndFunction('/ajax_toggle_option?hide_domaincheck',
			function(o) {
				var dcheck = YAHOO.util.Dom.get('dcheck');
				dcheck.parentNode.removeChild(dcheck);
			}, 'POST');
}

lc.general.loadCity = function() {
	displayCity = function(o) {
		YAHOO.util.Dom.get('city').innerHTML = o.responseText;
	}
	YAHOO.util.Dom.get('city').innerHTML = '<img alt="Laden..." class="loader" src="images/loader.gif" height="16" /> St&auml;dteliste wird geladen...';
	YAHOO.util.Connect.asyncRequest('POST', '/ajax_get_city', {
		success :displayCity
	}, 'postal=' + document.getElementById('postal').value);

}

lc.general.DBCommentSave = function(id) {
	updateComment = function(o) {
		YAHOO.util.Dom.get('commentspan_'+id).innerHTML = o.responseText;
		document.getElementById('commentsave_'+id).style.display = "inline";
		document.getElementById('commentload_'+id).style.display = "none";
	}
	document.getElementById('commentsave_'+id).style.display = "none";
	document.getElementById('commentload_'+id).style.display = "inline";
	YAHOO.util.Connect.asyncRequest('POST', '/ajax_set_dbcomment', {
		success :updateComment
	}, 'name=' + id + '&comment=' + encodeURIComponent(document.getElementById('commenttext_'+id).value));	
}

lc.general.closeKarma = function() {
	YAHOO.util.Dom.removeClass('karmaBox', 'visible');
}

YAHOO.util.Event.onDOMReady( function() {
	var forms = YAHOO.util.Selector.query('.ajaxForm');

	YAHOO.util.Event.addListener(forms, 'submit', lc.general.postForm);

	var form;
	for ( var i = 0; form = forms[i]; i++) {
		form.onsubmit = function() {
			return false;
		}
	}
});

window.setInterval(lc.general.keepAlive, 600000);

( function() {
	autocompleter = YAHOO.util.Selector.query('.usernameAutocomplete');

	var oDS = new YAHOO.util.XHRDataSource("/ajax_usersearch", {
		connMethodPost :true
	});

	var i;
	for (i = 0; i < autocompleter.length; i++) {
		var id = YAHOO.util.Dom.generateId(autocompleter[i], 'autocomp-');

		// Set the responseType
		oDS.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
		// Define the schema of the delimited results
		oDS.responseSchema = {
			recordDelim :"\n",
			fieldDelim :"\t"
		};
		// Enable caching
		oDS.maxCacheEntries = 5;

		// Instantiate the AutoComplete
		var oAC = new YAHOO.widget.AutoComplete(id, "resultlist", oDS);

		oAC.generateRequest = function(sQuery) {
			return "username=" + sQuery;
		};

	}

})();

if (YAHOO.env.ua.ie == 6) {
	YAHOO.util.Event.onDOMReady( function() {

		iebuttonhandler = function(ev, el) {
			YAHOO.util.Event.stopEvent(ev);
			var html = this.outerHTML;
			var matches = html.match(/value="([^"]*)"/);
			this.value = matches[1];

			function findForm(lel) {
				if (lel.tagName != 'FORM' && lel.parentNode) {
					return findForm(lel.parentNode);
				}

				return lel;
			}

			var form = findForm(this);

			var oButtons = YAHOO.util.Selector.query('button', form);

			var i;
			var button;
			for (i = 0; button = oButtons[i]; i++) {
				if (button.value != this.value) {
					button.parentNode.removeChild(button);
				}
			}

			form.submit();
		}

		var buttons = YAHOO.util.Selector.query('button');

		YAHOO.util.Event.on(buttons, 'click', iebuttonhandler);

	});
}


