var RENEW_LABELS ;
var OVERLAY;
var SETPOSITION;

var CONFIRMBOX;
var CONFIRMBOXTarget;

var INFOBOX;
var INFOBOXTarget;

var INFOS = {
	YUI: undefined
};
var USERACTIONS = {
	YUI: undefined
};

Y.use('node', 'event', 'io-base','event-custom-complex', function(Y) {




    Y.on('domready', function(){

		INFOS.YUI = Y;

		
		INFOS.parser = function(obj) {
//			eval(obj.responseText);
		};

		Y.on('dologout', function(node){
			document.location='/logout.html';
		}) ;

		Y.on('resize', function (e){
			SETPOSITION();
		});

		Y.on('resize', function (e){
			SETPOSITION();
		});


		ONLINECHECKER = {

			init: function ()
			{

				ONLINECHECKER.load();
			},

			load: function()
			{

				Y.io('/account/check-state.html', {
					method:'get',
					on:{
						complete:ONLINECHECKER.update
					}
				});
			},

			update: function(requestNum, responseObj){
				try {

					var data = Y.JSON.parse(responseObj.responseText);

					Y.one('#useronline .users').set('innerHTML', data.usersonline);
					window.setTimeout(ONLINECHECKER.load,5000);

				} catch(e) {
					INFOS.parser(responseObj);
				}
			}

		}

		LOADER = {
			resize: '',
			show: function()
			{

				var html = '<div id="loader-bg"></div>'+
						'<div id="loader">'+
							'<img src="/assets/images/loader.gif">'+
							'</div>'+
						'</div>';


				var parent = Y.one('body');
				parent.insert(html, 0);
				LOADER.position();

				LOADER.resize = Y.on('resize', function(e){
					LOADER.position();
				})

			},

			hide: function()
			{
				LOADER.resize.detach();
				var parent = Y.one('body');
				parent.removeChild(Y.one('#loader-bg'));
				parent.removeChild(Y.one('#loader'));
			},

			position: function()
			{
				var h = Y.one('#loader').get('offsetHeight');
				var w = Y.one('#loader').get('offsetWidth');
				var WinHeight = Y.one('body').get('winHeight');
				var WinWidth = Y.one('body').get('winWidth');

				Y.one('#loader').setStyle('left',parseInt((WinWidth-w)/2) );
				Y.one('#loader').setStyle('top',parseInt((WinHeight-h)/2) );


			}
		}


		CONFIRMBOX = {
			title:'',
			description: '',

			confirmActionOk: '',
			confirmActionCancel: '',
			resize: '',
			call: 'confirm',
			YUI:undefined,
			setFireName: function(name)
			{
				CONFIRMBOX.call  = 'confirm:'+ name;
			},
			
			show: function()
			{


				var html = '<div id="confirmbox-bg"></div>'+
							'<div id="confirmbox">'+
								'<div class="title">'+
								this.title +
								'</div>'+
								'<div class="data">'+
									this.description+
									'<div class="clear></div>'+
										'<div class="confirm-actions" id="confirm-ok">OK</div>'+
										'<div class="confirm-actions" id="confirm-cancel">Abbrechen</div>'+
									'<div class="clear></div>'+
								'</div>'+
							'</div>';


				var parent = Y.one('body');
				parent.insert(html, 0);
				CONFIRMBOX.position();

				
				CONFIRMBOX.resize = Y.on('resize', function(e){
					CONFIRMBOX.position();
				})

				this.confirmActionOk = Y.on('click', function(e) {
					CONFIRMBOX.hide();
					CONFIRMBOX.YUI.fire(CONFIRMBOX.call+':true');
				},'#confirmbox #confirm-ok');

				this.confirmActionCancel = Y.on('click', function(e) {
					CONFIRMBOX.hide();
					CONFIRMBOX.YUI.fire(CONFIRMBOX.call+':false');
				},'#confirmbox #confirm-cancel');

			},

			position: function()
			{
					var h = Y.one('#confirmbox').get('offsetHeight');
					var w = Y.one('#confirmbox').get('offsetWidth');
					var WinHeight = Y.one('body').get('winHeight');
					var WinWidth = Y.one('body').get('winWidth');

					Y.one('#confirmbox').setStyle('left',parseInt((WinWidth-w)/2) );
					Y.one('#confirmbox').setStyle('top',parseInt((WinHeight-h)/2) );


			},

			hide: function ()
			{
				this.confirmActionOk.detach();
				this.confirmActionCancel.detach();

				CONFIRMBOX.resize.detach();

				var parent = Y.one('body');
				parent.removeChild(Y.one('#confirmbox-bg'));
				parent.removeChild(Y.one('#confirmbox'));

			}

			
		};


		

		INFOBOX = {
			title:'',
			description: '',

			infoActionOk: '',
			resize: '',
			
			show: function()
			{

				var html = '<div id="infobox-bg"></div>'+
							'<div id="infobox">'+
								'<div class="title">'+
								this.title +
								'</div>'+
								'<div class="data">'+
									this.description+
									'<div class="clear></div>'+
									'<div class="confirm-actions" id="infobox-ok">OK</div>'+
									'<div class="clear></div>'+
								'</div>'+
							'</div>';


				var parent = Y.one('body');
				parent.insert(html, 0);
				INFOBOX.position();

				INFOBOX.resize = Y.on('resize', function(e){
				INFOBOX.position();
				})

				this.infoActionOk = Y.on('click', function(e) {
					//INFOBOX.fire('info:true');
					INFOBOX.hide();
				},'#infobox #infobox-ok');


				SETPOSITION();
				OVERLAY();

			},

			position: function()
			{
				var h = Y.one('#infobox').get('offsetHeight');
				var w = Y.one('#infobox').get('offsetWidth');
				var WinHeight = Y.one('body').get('winHeight');
				var WinWidth = Y.one('body').get('winWidth');

				Y.one('#infobox').setStyle('left', parseInt((WinWidth-w)/2) );
				Y.one('#infobox').setStyle('top',parseInt((WinHeight-h)/2) );

			},


			hide: function ()
			{
				this.infoActionOk.detach();
				INFOBOX.resize.detach();

				var parent = Y.one('body');
				parent.removeChild(Y.one('#infobox-bg'));
				parent.removeChild(Y.one('#infobox'));


			}

			

		};


		var BubbleTarget = function() {}
		var BubbleTarget2 = function() {}
		Y.augment(BubbleTarget, Y.EventTarget);
		Y.augment(BubbleTarget2, Y.EventTarget);

		CONFIRMBOXTarget = new BubbleTarget();
		INFOBOXTarget = new BubbleTarget2();




		OVERLAY = function() {
//			Y.all('label.overlay').each(function(node){
//			  var id = node.getAttribute('for');
//			  var label = node;
//			  label.setStyle('left', Y.one('#' + id).get('offsetLeft')+5);
//
//
//			  Y.on('focus', function(e){
//				 label.setStyle('display','none');
//			  }, '#' + id );
//
//			  Y.on('blur', function(e){
//				  if (this.get('value') == '') {
//					  label.setStyle('display','');
//				  } else {
//					  label.setStyle('display','none');
//				  }
//			  }, '#' + id );
//
//
//			  if (Y.one('#'+id).get('value') == '') {
//				  label.setStyle('display','');
//			  } else {
//				  label.setStyle('display','none');
//			  }
//
//			},this);
		}

		RENEW_LABELS = function(){
			Y.all('label.overlay').each(function(node){
				var id = node.getAttribute('for');
				var label = node;
				label.setStyle('left', Y.one('#' + id).get('offsetLeft')+5);
				if (Y.one('#' + id) .get('value') == '') {
					label.setStyle('display','');
				} else {
				label.setStyle('display','none');
				}
			},this);

		}

		SETPOSITION = function(){
			var WinHeight = Y.one('body').get('winHeight');
			var WinWidth = Y.one('body').get('winWidth');


			if ( Y.one('#overlayBG').getStyle('display') != 'none') {

				var innerHeight = 0;
				var innerWidth = 0;

				var tHeight = WinHeight - 150;
				var dHeight = tHeight - 20;


				if ( !Y.one('#overlayFG .notresizeable')) {
					Y.one('#overlayFG').setStyle('height', tHeight );
					if ( Y.one('#overlayFG div.formOverlay .title')) {
						dHeight -= Y.one('#overlayFG div.formOverlay .title').get('offsetHeight')
					}
					if ( Y.one('#overlayFG div.formOverlay .infomessage')) {
						dHeight -= Y.one('#overlayFG div.formOverlay .infomessage').get('offsetHeight')
					}
					if ( Y.one('#overlayFG div.formOverlay .errormessage')) {
						dHeight -= Y.one('#overlayFG div.formOverlay .errormessage').get('offsetHeight')
					}

					if ( Y.one('#overlayFG div.formOverlay .submit')) {
						dHeight -= Y.one('#overlayFG div.formOverlay .submit').get('offsetHeight')
					}
					if ( Y.one('#overlayFG div.formOverlay .overlaysmallform')) {
						dHeight -= Y.one('#overlayFG div.formOverlay .overlaysmallform').get('offsetHeight')
					}

					if ( Y.one('#overlayFG div.formOverlay .data')) {
						Y.one('#overlayFG div.formOverlay .data').setStyle('height',dHeight );
					}
					

				} else {
					if ( Y.one('#overlayFG div.formOverlay') ) {
						tHeight = Y.one('#overlayFG div.formOverlay').get('offsetHeight');
					} else if ( Y.one('#overlayFG div')  ) {
						tHeight = Y.one('#overlayFG div').get('offsetHeight');
					}
				}

				if ( Y.one('#overlayFG div.formOverlay') ) {
					Y.one('#overlayFG div.formOverlay').setStyle('height', tHeight );
					Y.one('#overlayFG div.formOverlay').setStyle('top', (WinHeight-tHeight)/2 );
					Y.one('#overlayFG div.formOverlay').setStyle('left', (WinWidth-Y.one('#overlayFG div.formOverlay').get('offsetWidth'))/2 );

					if ( Y.one('#overlayFG div.formOverlay .close')) {
						var l = Y.one('#overlayFG div.formOverlay').get('offsetWidth') - Y.one('#overlayFG div.formOverlay .close').get('offsetWidth');
						Y.one('#overlayFG div.formOverlay .close').setStyle('marginLeft',l);
					}
				}
				else if ( Y.one('#overlayFG div')  ) {
					Y.one('#overlayFG div').setStyle('height', tHeight );
					Y.one('#overlayFG div').setStyle('top', (WinHeight-tHeight)/2 );
					Y.one('#overlayFG div').setStyle('left', (WinWidth-Y.one('#overlayFG div').get('offsetWidth'))/2 );

				}
			}

		}



		SMILIE = {

			smiliepath: '/assets/images/smilies/',
			smilies: new Array(),
			
			initSmiles: function()
			{
				var smilies = new Array();

				smilies[0] = new Object();
				smilies[0].code = new Array();
				smilies[0].code[0] = /;\)/g;
				smilies[0].code[1] = /;-\)/g;
				smilies[0].file = 'icon_wink.gif';


				SMILIE.smilies = smilies;
			},
			
			init: function()
			{

				SMILIE.initSmiles();

				Y.all('div').each(function(node){
					node.set('innerHTML', SMILIE.replaceText(node.get('innerHTML')));
				});
				Y.all('p').each(function(node){
					node.set('innerHTML', SMILIE.replaceText(node.get('innerHTML')));
				});
				Y.all('td').each(function(node){
					node.set('innerHTML', SMILIE.replaceText(node.get('innerHTML')));
				});
			},

			replaceText: function( text )
			{
				var ntext = text;
				for ( var i = 0; i < SMILIE.smilies.length ; i++ ) {
					for ( var c = 0; c < SMILIE.smilies[i].code.length ; c++ ) {
						code = SMILIE.smilies[i].code[c];
						image = '<img src="'+ SMILIE.smiliepath + SMILIE.smilies[i].file + '" class="smilie"> ';

						ntext = ntext.replace(code,'' + image);
					}

				}

				return ntext;
			}



		}


		USERACTIONS =  {
			userlinks: new Object(),

			init: function (e) {
				USERACTIONS.create();
			},

			create: function() {
				Y.all('.userlink').each(function(node) {
					if ( !USERACTIONS.userlinks[node] ) {
					
						node.on('mouseenter', function(e){
							USERACTIONS.showInfo(this);
						});

						node.on('mouseleave', function(e){
							USERACTIONS.hideInfo(this);
						});

						USERACTIONS.userlinks[node] = 1;
					}
				})
			},

			showInfo: function ( node )
			{
				node.addClass('hover');
				var tmp = node.get('id').split(':');
				var userid = tmp[1];
				var name = tmp[2];
				var html = '<div id="userlinkdiv" style="">'+
								'<div class="uaction" id="user-show-profile">'+
									'<a href="/profil/'+userid+'.html">'+
									'zeige '+name+' \'s Profil'+
									'</a>' +
								'</div>' +
								
								//'<div class="uaction" id="user-show-profile">schreibe '+name+' eine Nachricht</div>' +
							'</div>';

				node.insert(html, 0);
			},

			hideInfo: function( node )
			{
				node.removeClass('hover');
				node.removeChild(Y.one('#userlinkdiv'));
			}

		}


		USERACTIONS.YUI = Y;

		Y.on('newusers', function(node){
			USERACTIONS.create();
		}) ;


		
		USERACTIONS.init();
		ONLINECHECKER.init();
		OVERLAY();
		CONFIRMBOX.YUI = Y;

		
	});

	


});
