
Request.implement({
	onSuccess: function() {
	
		if(!$defined(this.options.reloadIVW) || this.options.reloadIVW == true){
			try {
				var oewaimg = $$('img.oewa');
				if(oewaimg.length > 0){
					oewaimg[0].set('src', OEWA + "?r=" + escape(document.referrer) + "&d=" + (new Date()).getTime());
				}
			}
			catch (e) { }
		}
	
		
		/*if(!$defined(this.options.reloadIVW) || this.options.reloadIVW == true){*/
		if(this.options.IVWClick) {
			try {
				var ivwimg = $$('img.ivw');
				if(ivwimg.length > 0){
					ivwimg[0].set('src', IVW + "?r=" + escape(document.referrer) + "&d=" + (Math.random()*100000));
				}
				var oewaimg = $$('img.oewa');
				if(oewaimg.length > 0){
					oewaimg[0].set('src', OEWA + "?r=" + escape(document.referrer) + "&d=" + (new Date()).getTime());
				}
				var gaimg = $$('img.ga');
				if(gaimg.length > 0){
					gaimg[0].set('src', gaimg[0].get('src').replace(/utmn=([0-9]+)/,'utmn=' + Math.round(Math.random() * 2147483647)));
				}
				
			}
			catch (e) { }
		}
		this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
	}
});

Element.implement({
	
	'rotateClass': function(items) {
		var classes = this.className.split(' ');
		for(var i=0; i<classes.length; i++) {
			var index = items.indexOf(classes[i]);
			if(index > -1) {
				index = (index + 1) % items.length;
				classes[i] = items[index];
			}
		}
		this.className = classes.join(' ');		 
	},

	'filterOptions': function(foo) {
		var nodes = this.getElementsByTagName('option');
		for(var i=0; i<nodes.length; i++) {
			if(nodes[i].get('text').toLowerCase().substring(0, foo.length) == foo.toLowerCase()) {
				nodes[i].set('disabled', '');
			} else {
				nodes[i].set('disabled', 'disabled');
			}
		}
	},
	
	'scrollToMe': function() {
		var position = this.getPosition();
		window.scrollTo(position.x, position.y);
	}

});

String.prototype.endsWith = function(str) {
	return (this.match(str+"$")==str);
};

String.prototype.startsWith = function(str) {
	return (this.match("^"+str)==str); 
};

function allowNumbers(event) {
	if (isNaN(String.fromCharCode((event.keyCode) ? event.keyCode : event.which))) {
		if (event.charCode < 33) {
			return true;
		}
		else {
			return false;
		}
	}
	return true;
}

function allowChars(event) {
	
	if(window.event) {  // IE
		keynum = event.keyCode;
	}
	else if(event.which) { // ANDERE
		keynum = event.which;
	}
	else {
		keynum = null;
	}
	
	if (keynum != null) {
		keychar = String.fromCharCode(keynum);
		numcheck = /\d/;
		return !numcheck.test(keychar);
	}
	else {
		return true;
	}
	
}


function form_validate() {
	var success = true;

	for(var i=0; i<arguments.length; i++) {
		var node = $(arguments[i]);
		
		if(!node) {
			continue;
		}
		
		if(node.get('value') == '') {
			success = false;
			node.highlight('#ff9999');
		}
	}
	return success;
}

var opentags = new Object();




function passwordStrength(input_element, info_element) {
	input_element = $(input_element);
	info_element = $(info_element);
	
	var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
	var mediumRegexLetter = new RegExp("^[a-zA-zöäüßÖÄÜ\\W]{5,8}$");
	var mediumRegexNumber = new RegExp("^[0-9\\W]{5,8}$");
	var mediumRegex = new RegExp("^[a-zA-zöäüßÖÄÜ0-9\\W]{5,}$");
	var enoughRegex = new RegExp("^[a-zA-zöäüßÖÄÜ0-9]{5,}$");
	
	var onlyLetter = new RegExp("^[a-zA-zöäüßÖÄÜ]+$");
	
	var pwd = input_element.value;
	
	info_element.removeClass('pw-secure'); 		// rot gelb gelb Grün
	info_element.removeClass('pw-ok'); 			// rot gelb gelb
	info_element.removeClass('pw-short'); 		// rot gelb
	info_element.removeClass('pw-nogiven');		// rot
	
	if (strongRegex.test(pwd)) {
		// Sicheres Passwort
		info_element.addClass('pw-secure');	
	}
	else if (
			(mediumRegexLetter.test(pwd)) ||
			(mediumRegexNumber.test(pwd)) ||
			(mediumRegex.test(pwd))
		){
		// Länge, Gross - Kleinschreibung, Zahlen
		info_element.addClass('pw-ok');
	}
	else if (enoughRegex.test(pwd)) {
		// Länge is > 8
		info_element.addClass('pw-short');
	}
	else if (
			(pwd.length<5) ||
			(pwd == nickname) ||
			(pwd == email) ||
			(onlyLetter.test(pwd)) ||
			(!isNaN(pwd))
	){
		info_element.addClass('pw-nogiven');
	}
	else {
		// Unsicheres Passwort
		info_element.addClass('pw-nogiven');	
	}
	
	 /*alert("Länge : " + (pwd.length<5) + " (" + pwd + ")" + "\n" +
		"Nick  : " + (pwd == nickname) + " (" + pwd + ")"+ "\n" +
		"eMail : " + (pwd == email) + " (" + pwd + ")"+ "\n" +
		"Letter: " + (onlyLetter.test(pwd)) + " (" + pwd + ")"+ "\n" +
		"Number: " + (!isNaN(pwd)) + " (" + pwd + ")"+ "\n" +
		"Enough: " + (enoughRegex.test(pwd)) + " (" + pwd + ")"+ "\n" +
		"MedLet: " + (mediumRegexLetter.test(pwd)) + " (" + pwd + ")"+ "\n" +
		"MedNum: " + (mediumRegexNumber.test(pwd)) + " (" + pwd + ")"+ "\n" +
		"Medium: " + (mediumRegex.test(pwd)) + " (" + pwd + ")"+ "\n" +
		"Strong: " + (strongRegex.test(pwd)) + " (" + pwd + ")");*/
}



function slideInOut(id) 
{
	var node = $(id);	
	
	if(node.getStyle('display') == 'block')
	{
		node.setStyle('display', 'none');
	}
	else
	{
		node.setStyle('display', 'block');	
	}
	//node.tween('height', [node.getStyle('height'),0]);	
}

function countChars(id) {
	return $(id).value.length;
}


function calcChars(text, limit, content_id)
{	
	if(text.length > limit)
	{	
		$(content_id).value = text.substring(0,limit);
		return false;
	}
	else
	{	
		$(content_id+'-chars').innerHTML = limit - text.length;
	}
}


function suggestPlace(cName) {
	$('place_name').value = $('suggest_name').value;
}

var more_onlinefriends = new Class({
	aUsers: [],
	oContainer: $('friends-online'),
	oArrow: $('friends-online-paginate'),
	
	show: function() {
		req = new Request.JSON({
			url: '/mitglieder/online/',
			method: 'get',
			onComplete: this.updateUsers.bind(this)
			
		}).send('onlinelist=1');
	},
	
	updateUsers: function(oData) {
		if (!oData) return false;
		this.aUsers.extend(oData.items);
		this.oArrow.dispose();
		this.oContainer.set('text', '');
		this.draw();
	},
	
	draw: function() {
		this.aUsers.each( function(oUser,i) {
			var li = new Element('li', {
				'class': oUser.g		
			});			
			var a = new Element('a', {
				'class': 'message',
				'href': '#',
				'onclick': 'overlay.show("/nachrichten/kurznachricht/'+oUser.n+'");return false;',
				'title': 'Nachricht an '+oUser.n
			});			
			var img = new Element('img', {
				'src': oUser.msg,
				'alt': ''
			});			
			a.appendChild(img);			
			li.appendChild(a);			
			var a = new Element('a', {
				'class': 'chat',
				'href': '#',
				'onclick': 'if (window.chat) window.chat.open(\''+oUser.n+'\'); return false;',
				'title': 'Mit '+oUser.n+' chatten'
			});	
			var img = new Element('img', {
				'src': oUser.chat,
				'alt': ''
			});			
			a.appendChild(img);
			// noch kein Chat!
			// li.appendChild(a);			
			var a = new Element('a', {
				'text': oUser.n,
				'href': '/mitglieder/profil/'+oUser.n,
				'onmouseover': 'tt.set(this, "'+oUser.a+'")',
				'title': 'Profilseite von '+oUser.n
			});	
			li.appendChild(a);
			this.oContainer.appendChild(li);
			
		}.bind(this));
	}	
});

var image_tooltip = new Class({
	image: null,
	elem: null,
	
	initialize: function() {},
	
	set: function(elem, url) {
		if (this.image == null) {
			this.image = new Element('img', {
				'src': url,
				'styles': {
					'display': 'none',
					'position': 'absolute',
					'left': '0px',
					'top': '0px',
					'zIndex': '200',
					'backgroundColor': '#FFF',
					'padding': '2px',
					'border': '1px solid gray'
				}	
			});			
			if (Browser.Engine.webkit420) {
				this.image.setStyle('-webkit-box-shadow', '3px 3px 2px #666');
			}
			this.image.inject(document.getElement("body"), 'bottom');
			document.addEvent("mousemove", this.update.bindWithEvent(this));
		}
		else this.image.src = url;
				
		if (this.elem != null) {
			this.elem.removeEvent("mouseenter", this.show.bind(this));
			this.elem.removeEvent("mouseleave", this.hide.bind(this));		
		}
				
		this.elem = $(elem);
		this.elem.title = '';		
		this.elem.addEvent("mouseenter", this.show.bind(this));
		this.elem.addEvent("mouseleave", this.hide.bind(this));
				
		
		this.show();
	},
	
	update: function(evt) {
		if (this.image == null) return;
		this.image.setStyles({
			"left": (evt.page.x + 10) + "px",
			"top": (evt.page.y + 10) + "px"
		});
	},
		
	show: function() {
		this.image.setStyle("display", "block");
	},
	
	hide: function() {
		this.image.setStyle("display", "none");
	}
	
});

var profile_notifications = new Class({
	Implements: Options,
	options: {
		height: 10,
		wait: 3
	},
	items: [],
	index: 0,
	req: null,
	timer: 0,
	pageTitle: document.title,
	toggleTitle: false,
	titleStatus: false,
	
	initialize: function(options) {
		this.setOptions(options);
		this.req = new Request.JSON({
			url: '/feeds/notifications/',
			onSuccess: this.update.bind(this),
			onFailure: this.cancel.bind(this)
		});
		
		if (typeof notifications != 'undefined') {
			this.update(notifications);
			this.timer = this.update_json.periodical(90*1000, this);
		}
		
		// das muss hier drin bleiben damit die icons nicht erst beim 2. klick verschwinden!
		this.req.send();		
	},
	
	update_json: function() {
		this.req.send();
	},
	
	cancel: function() {
		$clear(this.timer);
	},
	
	update: function(notifications) {
		if (typeof notifications != 'object' || notifications == null) {
			return false;
		}
		
		if(typeof notifications.games != 'undefined'){
			if($('running-games') != null){
				if(notifications.games == 0){
					$('running-games').setStyle('display', 'none');
				}
				else{
					$('running-games').setStyle('display', 'inline');
					$('running-games').set({
							'title': (notifications.games == 1) ? '1 Spiel wartet auf deinen Zug' : notifications.games + ' Spiele warten auf deinen Zug',
							'text': '(' + notifications.games + ')'
					});
				}
			}
			delete notifications.games;
			var x = [];
			for(var i in notifications){
				x.push(notifications[i]);
			}
			notifications = x;
			x = null;
		}
		
		$A(notifications).each(function(id) {
			this.add('notification_' + id, id + '_active');
			if (id == 'messagereceived') {
				this.toggleTitle = true;
			}
		}, this);				 
	},
	
	add: function(elem, fileName) {
		elem = $(elem);
		if (elem && !this.items.contains(elem)) {
			elem.getElement('img').src = '/app/1/img/new_layout/notifications/ico_' + fileName + '.png';
			this.items.push(elem);
			if (this.items.length == 1) this.draw_step1();			
			return true;
		}
		return false;
	},
		
	draw_step1: function() {
		if (this.items.length == 0) return false;
		
		if (this.toggleTitle) {
			try {
				document.title = (this.titleStatus?'Neue Nachricht - ':'') + this.pageTitle;
				this.titleStatus = !this.titleStatus;
			}
			catch (e) {}
		}
		
		if (this.items.length == 1) {
			this.draw_step2.delay(this.options.wait*1000, this, this.items[0]);
		}
		else if (this.items.length == 2) {
			this.index = (this.index == 0?1:0);
			this.draw_step2.delay(this.options.wait*1000, this, this.items[this.index]);
		}
		else {
			this.draw_step2.delay(this.options.wait*1000, this, this.items.getRandom());			
		}
	},
	
	draw_step2: function(elem) {
		new Fx.Tween(elem, {
			'duration': 'short'
		}).addEvent(
			'complete',
			this.draw_step3.bind(this, elem)
		).start(
			'top',
			elem.getStyle('top').toInt() - this.options.height
		);				
	},
	
	draw_step3: function(elem) {
		new Fx.Tween(elem, {
			'transition': Fx.Transitions.Bounce.easeOut
		}).addEvent(
			'complete',
			this.draw_step1.bind(this)
		).start(
			'top',
			elem.getStyle('top').toInt() + this.options.height
		);			
	}	
});



Element.Properties.inputValue = {
 
    get: function(){
			 switch(this.get('tag')) {
			 	case 'select':
					vals = this.getSelected().map(function(op){ 
						var v = $pick(op.get('value'),op.get('text')); 
						return (v=="")?op.get('text'):v;
					});
					return this.get('multiple')?vals:vals[0];
				case 'input':
					switch(this.get('type')) {
						case 'checkbox':
							return this.get('checked')?this.get('value'):false;
						case 'radio':
							var checked;
							if (this.get('checked')) return this.get('value');
							$(this.getParent('form')||document.body).getElements('input').each(function(input){
								if (input.get('name') == this.get('name') && input.get('checked')) checked = input.get('value');
							}, this);
							return checked||null;
					}
			 	case 'input': case 'textarea':
					return this.get('value');
				default:
					return this.get('inputValue');
			 }
    },
 
    set: function(value){
			switch(this.get('tag')){
				case 'select':
					this.getElements('option').each(function(op){
						var v = $pick(op.get('value'), op.get('text'));
						if (v=="") v = op.get('text');
						op.set('selected', $splat(value).contains(v));
					});
					break;
				case 'input':
					if (['radio','checkbox'].contains(this.get('type'))) {
						this.set('checked', $type(value)=="boolean"?value:$splat(value).contains(this.get('value')));
						break;
					}
				case 'textarea': case 'input':
					this.set('value', value);
					break;
				default:
					this.set('inputValue', value);
			}
			return this;
    },
		
	erase: function() {
		switch(this.get('tag')) {
			case 'select':
				this.getElements('option').each(function(op) {
					op.erase('selected');
				});
				break;
			case 'input':
				if (['radio','checkbox'].contains(this.get('type'))) {
					this.set('checked', false);
					break;
				}
			case 'input': case 'textarea':
				this.set('value', '');
				break;
			default:
				this.set('inputValue', '');
		}
		return this;
	}

};

function chessboard(columns, i) {
	columns = columns * 1;
	i = i * 1;
	
	if(columns < 1) {
		columns = 1;
	}	
	
// 	so funktioniert das ganze:
	
// 	alle spalten gerade oder ungerade
//	if(columns % 2 == 0) {
//		var even = true;
//	}
//	else {		
//		var even = false;
//	}
	
	// in welcher spalte bin ich?
//	var aktColumn = i / columns;
	
//	if(parseInt(even && aktColumn) % 2 == 1) {
//		var c = 0;
//	}
//	else {
//		var c = 1;
//	}
	
//	if((i + c) % 2 == 0) {
//		return 'odd';
//	}
//	else {
//		return 'even';
//	}
	
   return ((i + (parseInt((columns % 2 == 0) && (i / columns)) % 2 != 1)) % 2 == 0) ? 'odd' : 'even';
}

function changeRegion(event){
	var headline = $('region-change');
	var overlay = headline.getElementById('region-change-overlay');
	event.stop();
	if(overlay == null){
		overlay = new Element('div', {
			id: 'region-change-overlay',
			styles: { 'display': 'block' }
		}).inject(headline);
		var loading_div = new Element('div', { 'class': 'loading' }).inject(overlay);
		(new Element('img', {
			src: '/app/1/img/ajax-loader-circle-green.gif',
			styles: { 'vertical-align':'middle' }
		})).inject(loading_div);
		loading_div.appendText(' Lade...');
		var r = new Request.HTML({
				method: 'GET',
				url: '/startseite/regionwechseln',
				data: {
					'url': document.location.pathname + document.location.search
				},
				update: overlay,
				onSuccess: addCountryChangeEvents
		}).send();
	}
	else{
		if(overlay.getStyle('display') == 'none'){
			overlay.setStyle('display', 'block');
		}
		else{
			overlay.setStyle('display', 'none');
		}
	}
}

function addCountryChangeEvents(){
	var container = $('region-change-overlay');
	var lists = container.getElements('div.right a');
	lists.addEvent('click', performCountryChange);
}

function performCountryChange(event){
	event.target.getParent('ul').getElements('li').removeClass('active');
	event.target.getParent('li').addClass('active');
	if(!event.target.hasClass('nochild')){
		var region = event.target.get('text').trim().replace(/\s?\(\d+\)$/,'');
		var container = $('region-change-overlay');
		var lists = container.getElements('div.left div.province');
		for(var i = 0;i<lists.length;i++){
			lists[i].setStyle('display', (lists[i].get('id') == 'rco-' + region) ? 'block' : 'none');
		}
		region = null;
		container = null;
		lists = null;
	}
}

window.addEvent('domready', function(){
	if($('information-remove') != null){
		$('information-remove').addEvent('click', function(){
			if(confirm("Soll die Information wirklich ausgeblendet werden?") == false) return;
			$('information-container').destroy();
			new Request({
				url: '/startseite/information/'
			}).send('ausblenden=1');
		});
	}
	if($('region-changer') != null){
		$('region-changer').addEvent('click', changeRegion);
	}
});


// sticky skyscraper
var skyscraper_top = false;
if (typeof OA_stickyskyscraper != 'undefined' && OA_stickyskyscraper) {
	window.addEvent('scroll', function() {
		if (Browser.Engine.trident && Browser.Engine.version > 4) return;
		if($('skyscraper') != null){
			if (!skyscraper_top) skyscraper_top = parseInt($('skyscraper').getStyle('top'));
			if ((window.getScroll()).y > skyscraper_top)
				$('skyscraper').setStyles({ position: 'fixed', top: '0'});
			else
				$('skyscraper').setStyles({ position: 'absolute', top: skyscraper_top + 'px'});	
		}
	});
}

function toggleTrigger() {
	$('friend_trigger').setStyle('display', 'block');
	$('friend_trigger').slide('hide').slide('in');
	$('friend_trigger').slide.delay(15000, $('friend_trigger'), 'out');
}

function toggleEl(el) {
	el.setStyle('display', 'block');
	el.slide('hide').slide('in');
}

// init
var tt = new image_tooltip();
if (typeof(sessionuser) != 'undefined' && sessionuser && !sessionuser.guest) {
	new profile_notifications();
	var mof = new more_onlinefriends();
}

/* Do Some Magic Facebook Things*/
try{
	window.addEvent('domready', function(){
		if(typeof FB != 'undefined' && FB != null){
			FB.Event.subscribe('edge.create', function(response){
				new Request({
					url: '/interfaces/fblike/',
					method: 'post'
				}).send('fburl=' + response);
			});
		}
	});
}
catch(e){ }


var feed = new Class({
	Implements: Events,

	loopreq: null,
	token: null,

	initialize: function(token) {
		this.token = token;

		this.loopreq = new Request.JSON({
			url: '/feed/' + this.token,
			method: 'get',
			noCache: true,
			onSuccess: function(resp) {
				if (!resp || typeof resp.type == 'undefined') {
					this.fireEvent('error');
					return;
				}
				if (resp.type != 'continue') {
					this.fireEvent(resp.type, resp.payload);
				}
				this.loopreq.send.delay(100, this.loopreq);
			}.bind(this),			
			onFailure: function() {
				this.fireEvent('error');
			}.bind(this)
		});
		this.loopreq.send();
	}

});


if (typeof sessionuser != 'undefined' && typeof sessionuser.token != 'undefined') {
	window.feed = new feed(sessionuser.token);
}
