jQuery.fn.center = function (absolute) {
	return this.each(function () {
		var t = jQuery(this);
		t.css({
			position:	absolute ? 'absolute' : 'fixed', 
			left:		'50%', 
			top:		'50%',
			zIndex: 	9999,
			'z-index':	9999
		}).css({
			marginLeft:	'-' + (t.outerWidth() / 2) + 'px', 
			marginTop:	'-' + (t.outerHeight() / 2) + 'px'
		});

		if (absolute) {
			t.css({
				marginTop:	parseInt(t.css('marginTop'), 10) + jQuery(window).scrollTop(), 
				marginLeft:	parseInt(t.css('marginLeft'), 10) + jQuery(window).scrollLeft()
			});
		}
	});
};
/**
* DOM Helper functions
*/
// Function to create elements
_ce = function(elementType, opts) {
	
	var e = document.createElement(elementType);
	
	if(opts && typeof opts == 'object') {
		for(var ee in opts) {
			e.setAttribute(ee, opts[ee]);
		}
	}

	return e;
}

// Element exists? Return element object
_ee = function(id) {

	if(!id) return;

	if(document.getElementById(id)) {
		return document.getElementById(id);
	}

	return null;
}

_ct = function(text) {
	var e = document.createTextNode(text);
	return e;
}

dom_helper = {
	_ee : function(object_id) {		
		if(document.getElementById(object_id)) {
			return document.getElementById(object_id);
		}
	},
	_ce : function(object_type, opts) {
		var e = document.createElement(object_type);
		if(typeof opts == 'object') {
			for(var i in opts) {
				e.setAttribute(i, opts[i]);
			}
		}
		return e;
	},
	_ct : function(text, opts) {
		var t = document.createTextNode(text);
		if(typeof opts == 'object') {
			for(var i in opts) {
				t.setAttribute(i, opts[i]);
			}
		}
		return t;
	}
}

var Utf8 = {
 
	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
}

emptyElement = function(elementID) {

	if(typeof elementID == 'object') {
		var obj = elementID;
	}
	else {
		if(_ee(elementID)) {
			var obj = _ee(elementID);
		}
		else return;
	}
	
	if(obj.hasChildNodes()) {
		while(obj.hasChildNodes()){
			obj.removeChild(obj.lastChild);
		}
	}
	
	obj.innerHTML = '';
}

function f_addListener(element,eventName,eventCallback,useCapture) {
	var addListener;
	
	if(window.addEventListener)
	{
		addListener=function(F,G,H,E)
		{
			E = E || false;
			F.addEventListener(G,H,E);
			return true;
		};
		
		return addListener(element,eventName,eventCallback,useCapture);
	}
	else
	{
		if(window.attachEvent)
		{
			addListener=function(F,G,H,E)
			{
				F.attachEvent("on"+G,H);
				return true;
			};
			
			return addListener(element,eventName,eventCallback,useCapture);
		}
		else
		{
			addListener=function(F,G,H,E)
			{
				return false;
			};
			
			return addListener(element,eventName,eventCallback,useCapture);
		}
	}
}

Overlay = {
	show : function(id) 
	{
		jQuery('#' + id + '-box').css({'width':'auto','width': '100%'}).fadeIn('fast');
	
		var windowHeight = (window.innerHeight ? window.innerHeight : (document.documentElement ? document.documentElement.offsetHeight : document.body.offsetHeight));
		var element = _ee(id);
		var elementHeight = element.offsetHeight;
		if(elementHeight < windowHeight) {
			element.style.marginTop = ((windowHeight - elementHeight) / 2) + 'px';
		}
	},
	hide : function(id) {
		jQuery('#' + id + '-box').hide('fast');
	}
}

function showProcessing() {	
	Overlay.show('processing');
}

function stopProcessing() {
	Overlay.hide('processing');
}

function isValidKeycode(keycode, extended) {
	var valid_codes = {};
		
	var start = 48;
	
	if(extended) {
		valid_codes[16] = true;
		valid_codes[17] = true;
		valid_codes[18] = true;
		valid_codes[32] = true;
		valid_codes[35] = true;
		valid_codes[37] = true;
		valid_codes[38] = true;
		valid_codes[39] = true;
		valid_codes[46] = true;
		valid_codes[188] = true;
		valid_codes[189] = true;
		valid_codes[190] = true;
	}
	else {		
		valid_codes[13] = true;	
	}
	
	valid_codes[8] = true;
	
	for(var i = start; i <= 90; i++) { valid_codes[i] = true; }
	
	if(!valid_codes[keycode]) { return (false); }
	
	return(true);
}

function fieldLength(src, target, length) {
	
	if(!length) length = 200;
	jQuery('#'+target).html(jQuery('#'+src).val().length + ' / ' + length);
}

function getRandom( min, max ) {
	if( min > max ) {
		return( -1 );
	}
	if( min == max ) {
		return( min );
	}
    return( min + parseInt( Math.random() * ( max-min+1 ) ) );
}


/**
* LOGIN-BOX
**/
LoginBox = function() {
	
	this.loginFieldID = '';
	this.raw_field = '';

	this.setField = function(field) {
		this.loginFieldID = field;
	}

	this.show = function() {

		var _object = jQuery('#'+this.loginFieldID);
		var _form 	= jQuery('form', _object);
		
		_object.fadeIn('fast', function() 
		{
			jQuery("input[name='Login']").focus();
			
			jQuery('#login_submit_bt').unbind('click').bind('click', function() {
				jQuery("input[name='referer']", _form).val(location.href);
				_form.submit();
			});
		});		
	}
	
	this.hide = function() {
		jQuery('#'+this.loginFieldID).hide('fast');
	}
	
	this.logout = function(object, returnURL) {

		var obj = jQuery(object);
		if(!returnURL) { returnURL = document.location.href; }
		
		var frm = jQuery('<form>')
		.attr('action', 'http://www.buffed.de/rlogin.cfm')
		.attr('method', 'post')
		.append(
			jQuery('<input>')
			.attr('type', 'hidden')
			.attr('name', 'doLogout')
			.val('true')
		)
		.append(
			jQuery('<input>')
			.attr('type', 'hidden')
			.attr('name', 'ForwardURL')
			.val(returnURL)
		);
		
		obj.append(frm);
		frm.submit();
	}

	this.checkSubmit = function(frm) 
	{
		var username = jQuery.trim(frm.Login.value);
		var password = jQuery.trim(frm.Password.value);
		var error_str = '';
		
		if(username.length < 3) {
			error_str += "Gib bitte deinen Benutzernamen an\n";
		}
		if(password.length < 3) {
			error_str += "Gib bitte dein Passwort an\n";
		}
		
		if(error_str != '') {
			alert("FEHLER:\n" + error_str);
			return(false);
		}
		
		return(true);
	}	
}

/**
************************************************************/
buffedTitleFlasher = function()
{
	var _defaultTitle = jQuery(document).attr('title');
	var _changeTitle = null;
	var _definedTitle = null;
	
	flashTitle = function(_newTitle)
	{
		if(jQuery(document).attr('title') == _defaultTitle)
		{
			jQuery(document).attr('title', _newTitle);
		}
		else 
		{
			jQuery(document).attr('title', _defaultTitle);
		}
	}
	
	this.setTitle = function(_text) {
		_definedTitle = _text;
	}
	
	this.stop = function()
	{
		if(_changeTitle) 
		{
			window.clearInterval(_changeTitle);
			jQuery(document).attr('title', _defaultTitle);
		}
	}
	
	this.start = function(_value, _titleText)
	{
		var _newTitle = (_value && !_definedTitle)
		? '[ ' + _value + ((_titleText) ? ' ' + _titleText : '') + ' ] ' + _defaultTitle 
		: '[ ' + _definedTitle + ' ] ' + _defaultTitle;

		if(_changeTitle)  { this.stop(); }
		_changeTitle = window.setInterval("flashTitle('" + _newTitle + "')", 1000);
	}
}



/**
* AJAX Result
************************************************************/
_ajaxResult = function(data) 
{
	if(typeof data != 'object') {
		return;
	}		

	var f_color = '#ffffff';

	switch(data.type) {		
		case 'livefeed':
			jQuery('#ajax-results-legend').html('mybuffed: Activityfeed');
			f_color = 'lime'; 
		break;
		default:
		case 'hint': 
			jQuery('#ajax-results-legend').html('Hinweis');
			f_color = 'lime'; 
		break;
		case 'correct':  
			jQuery('#ajax-results-legend').html('Ausgeführt');
			f_color = 'lime';
		break;
		case 'error':
			jQuery('#ajax-results-legend').html('Fehler');
			f_color = '#ff0000';
		break;
	}
	
	var timeout = (data.timeout) ? data.timeout : 2000;
	
	jQuery('#ajax-results').attr('className', 'ajax-results ' + data.type);
	jQuery('#ajax-results-content').html(data.text);
	jQuery('#ajax-results').jnotifica({
	  position  : 'bottom',
	  align     : 'right',
	  background: '#000000',
	  timeout	: timeout,
	  width		: 500,
	  margin	: 5,
	  clickClose: false,
	  cursor	: 'default',
	  close		: {
	  	text : 'Schließen'
	  },
	  msgCss    : {
	  	fontSize : '1.0em',
	  	color :  f_color
	  },
	  classes   : 'rounded_corners'
	});
}

var _isDBMessage = null;
function showDBMessage(_message, _timeout) 
{
	_setTimeout = function() 
	{
		_isDBMessage = window.setTimeout
		(
			"jQuery('div#errorBox').fadeOut('fast', function() {jQuery(this).remove();});", (_timeout) ? _timeout : 5000
		);
	}

	if(_isDBMessage) {
		window.clearTimeout(_isDBMessage);
	}
	
	if(!_message || _message == '') return;
	
	if(!jQuery('div#errorBox').attr('id'))
	{
		var _debug = jQuery('<div>').css({
			 'position':'fixed'
			,'bottom':'1px'
			,'left': ((jQuery(window).width() / 2) - 250) + 'px'
			,'border':'1px outset #ff0000'
			,'background':'#333333'
			,'color':'#ff0000'
			,'font-size':'10pt'
			,'height':'90px'
			,'width':'500px'
			,'text-align':'center'
			,'overflow':'hidden'
			,'overflow-y':'auto'
			,'padding':'5px'
			,'display':'block'
			,'word-wrap':'break-word'
			,'z-index':9999
			,'zIndex':9999
			,'filter':'alpha(opacity=90)'
			,'-moz-opacity':'.9'
			,'opacity':'.9'
		})
		.attr({'id': 'errorBox'})
		.bind('dblclick', function() 
		{
			jQuery(this).remove();
		});
		jQuery('body:first').append(_debug);
	}
	else {
		var _debug = jQuery('div#errorBox');
	}

	_debug.html('<h1>Hinweis!</h1><br>' + unescape(_message));
	_setTimeout();
}

var report_object_id = null;
var report_object_type = null;
var report_game_id = 1;
var report_request = null;
jQuery('.report').live('click', function() 
{
	if(!report_object_id || typeof report_object_id == 'undefined') return;
	if(!report_object_type|| typeof report_object_type == 'undefined') return;

	var _thisReport = jQuery(this);
	
	if(_thisReport.attr('data-nomember'))
	{
		alert('Logge dich bitte ein, um die Meldefunktion zu nutzen.'); return;
	}
	
	if(report_request) return;

	var _conf = confirm("Melde bitte nur Inhalte, die von PRIVAT-SERVERN stammen!\n\nMissbrauch der Meldefunktion wird mit einem temporären Ausschluss aus der Community bestraft.\n\nMöchtest du diesen Gegenstand zur Prüfung melden?");
	
	if(!_conf) return;
	
	jQuery('> img', _thisReport).attr('src', '/fileadmin/ajax-loader-fb.gif');
	
	report_request = jQuery.post
	(
		'/scripts/index/db-reporting.php'
		,{
			 object_id: report_object_id
			,object_type: report_object_type
			,game_id: report_game_id
		}
		, function(r) 
		{
			report_request = null;			
			
			if(!r || typeof r != 'object' || r.error)
			{
				jQuery('> img', _thisReport).attr('src', '/img/style/wow/view_report.png');
				alert('Beim Speichern deiner Meldung ist ein Fehler aufgetreten. Versuche es später noch einmal.');
				return;
			}
			
			_thisReport.bind('click', function() { return(false); }).attr('title', 'Du hast diesen Inhalt bereits gemeldet.');
			jQuery('> img', _thisReport).attr('src', '/img/style/wow/button_ok_16.png').css({
				'opacity':'0.5',
				'filter':'alpha(opacity=50)',
				'-moz-opacity':'0.5'
			});
		}
		,'json'
	);
});
