function addEvent( obj, type, fn )
{
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   } else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
   }
}

function removeEvent( obj, type, fn )
{
   if (obj.removeEventListener) {
      obj.removeEventListener( type, fn, false );
   } else if (obj.detachEvent) {
      obj.detachEvent( "on"+type, obj[type+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
   }
}
/* ********************************************************************** */
HandleTiny = Class.create();
HandleTiny.prototype =
{
	initialize: function(e)
	{
	},
	
	changeTinyBgColor: function()
	{
		if($('userBoxColor')) // nur wenn das Select vorhanden = Userportal Settings Seite
		{
			var id = document.UserportalDaten.userBoxColor.options[document.UserportalDaten.userBoxColor.selectedIndex].value;
			
			var pars = 'action=changeTinyBgColor&colorId='+id;
			new Ajax.Request(
					'/ajax/userportal.php',
					{ 
						method: 'post',
						parameters: pars,
						asynchronous:true, 
						onSuccess: this.doChangeTinyBgColor.bind(this)
					});
		}
	},
	
	doChangeTinyBgColor: function(response)
	{
		tinyMCE.getInstanceById('editor').getWin().document.body.style.backgroundColor=response.responseText;
	},

	handleFailure: function(response)
	{
		
	}
}
var objHandleTiny = new HandleTiny();
/* ********************************************************************** */

/* Hide Infos
*  Used for Starthilfe and public Infos
*/
HandleInfos = Class.create();
HandleInfos.prototype =
{
	initialize: function(e)
	{
	},
	
	hideInfo: function(infoId)
	{
		var pars = 'infoId='+infoId;
		new Ajax.Request(
				'/ajax/hideInfo.php',
				{ 
					method: 'post',
					parameters: pars,
					asynchronous:true, 
					onSuccess: this.doHideInfo.bind(this),
					onFailure: this.handleFailure.bind(this)
				});
	},
	
	hideStartBox: function()
	{
		var pars = 'startBox=1';
		new Ajax.Request(
				'/ajax/hideInfo.php',
				{ 
					method: 'post',
					parameters: pars,
					asynchronous:true, 
					onSuccess: this.doHideInfo.bind(this),
					onFailure: this.handleFailure.bind(this)
				});
	},
	
	doHideInfo: function(response)
	{
		if(response.responseText == '-1')
		{
			new Effect.Fade('startBox',{duration:0.4});
		}
		else if(response.responseText != '0')
		{
			new Effect.Fade('info_'+response.responseText,{duration:0.4});
		}
	},

	handleFailure: function(response)
	{
		
	}
}
var objHandleInfos = new HandleInfos();
/* ********************************************************************** */

/* Load new FriendFriend
*  Used on the news site
*/
HandleFriendFriends = Class.create();
HandleFriendFriends.prototype =
{
	initialize: function(e)
	{
	},
	
	next: function(boxId)
	{
		$('friend_'+boxId).hide();
		
		new Effect.Fade('friendbox_'+boxId,{duration:0.4});
		
		var pars = 'action=nextFriendFriend';
		new Ajax.Request(
				'/ajax/manageFriends.php',
				{ 
					method: 'post',
					parameters: pars,
					asynchronous:true, 
					onSuccess: this.doNext.bind(this),
					onFailure: this.handleFailure.bind(this)
				});
		
	},
	
	doNext: function(response)
	{
		if(response.responseText != 0)
		{
			var newResponse = response.responseText.split(',');
			$('friendsFriends').insert({ 'bottom':newResponse[1] });
			new Effect.Appear('friendbox_'+newResponse[0],{delay:0.8, duration:0.4});
		}
	},

	handleFailure: function(response)
	{
		
	}
}
var objHandleFriendFriends = new HandleFriendFriends();


/* Navigation Manager */


	NavigationManager = Class.create();
	NavigationManager.prototype =	
	{
		hoverTimer: null,
		headerBlurTimer: null,
		hoveredItem: null,
		selectedItem: null,
		items: null,
		
		initialize: function()
		{
			selector = new Selector(".menu > ul > li");
			this.items = selector.findElements($("header"));
			this.items.each(this.addHandler.bind(this));
			Event.observe($('header'), 'mouseout', this.headerBlurStart.bindAsEventListener(this, $('header')));
			Event.observe($('header'), 'mouseover', this.headerBlurEnd.bindAsEventListener(this, $('header')));
		},
		
		addHandler: function(item)
		{
			if(item.hasClassName("selected"))
			{
			   this.selectedItem = item;
			   this.hoveredItem = item;
			}
			
			Event.observe(item, 'mouseover', this.hoverStart.bindAsEventListener(this, item));
			Event.observe(item, 'mouseout', this.hoverEnd.bindAsEventListener(this, item));
		},
		
		hoverStart: function(evt)
		{
			var item = arguments[1];
			if (!this.isExpectedChange(item, evt.relatedTarget))
				return;
			
			item = evt.findElement();
			
			item = this.items.find(function(e) { return (e == item) || (e == item.up()); });
			
			if(item == null)
			{	return; }
			
			if(this.headerBlurTimer)
			{
				clearInterval(this.headerBlurTimer);
			}
						
			if(this.hoverTimer)
				clearInterval(this.hoverTimer);
			
			this.hoverTimer = setInterval(this.hoverDo.bindAsEventListener(this, item), 200); 
		},
		
		hoverEnd: function(evt)
		{
			var item = arguments[1];
			if (!this.isExpectedChange(item, evt.relatedTarget))
				return;

			if(this.hoverTimer)
				clearInterval(this.hoverTimer);
		},
		
		hoverDo: function(evt)
		{
			clearInterval(this.hoverTimer);
			var item = arguments[1];

			if(this.hoveredItem == this.selectedItem)
			{
				this.hoveredItem.addClassName("hidden");
			}
			else
			{
				this.hoveredItem.removeClassName("hovered");
			}
			
			this.hoveredItem = item;

			if(this.hoveredItem == this.selectedItem)
			{
				this.hoveredItem.removeClassName("hidden");
			}
			else
			{
				this.hoveredItem.addClassName("hovered");
			}
		},
		
		headerBlurStart: function(evt)
		{
			var item = arguments[1];
			if (!this.isExpectedChange(item, evt.relatedTarget))
				return;
			
			if(this.hoveredItem == this.selectedItem)
				return;
			
			if(this.headerBlurTimer)
				clearInterval(this.headerBlurTimer);
			
			this.headerBlurTimer = setInterval(this.headerBlurDo.bindAsEventListener(this), 7500);
		},
		
		headerBlurEnd: function(evt)
		{
			var item = arguments[1];
			if (!this.isExpectedChange(item, evt.relatedTarget))
				return;

			if(this.headerBlurTimer)
				clearInterval(this.headerBlurTimer);
		},
		
		headerBlurDo: function(evt)
		{
			clearInterval(this.headerBlurTimer);
			this.selectedItem.removeClassName("hidden");
			this.hoveredItem.removeClassName("hovered");
			this.hoveredItem = this.selectedItem;
		},
				
		isExpectedChange: function(tg, reltg)
		{
			try {
				while ((reltg != tg) && (reltg.nodeName != 'BODY'))
					reltg = reltg.parentNode;
				if (reltg == tg) { return false; }
			} catch (e) { return false; };
			return true;
		}
	}
	
/* ********************************************************************** */

/*
*	Hide & Show CSS Items 
*	f.e. via Mouseover & Mouseout
*	Usage: showItem(itemId1,itemId2,itemId3)
*/
function showItem(cssId)
{
	cssId = cssId.split(",");
	if($(cssId[0]) == null)
	{
		return false;
	}
	
	if(cssId.length > 1) 
	{
       for (var i = 0; i < cssId.length; i++) 
	   {
          $(cssId[i]).removeClassName('hide');
		  $(cssId[i]).addClassName('show');
       }
    }
	else
	{
		$(cssId[0]).removeClassName('hide');
		$(cssId[0]).addClassName('show');
	}
	
}

function hideItem(cssId)
{
	cssId = cssId.split(",");
	if($(cssId[0]) == null)
	{
		return false;
	}
	
	if(cssId.length > 1) 
	{
       for (var i = 0; i < cssId.length; i++) 
	   {
          $(cssId[i]).removeClassName('show');
		  $(cssId[i]).addClassName = 'hide';
       }
    }
	else
	{
		$(cssId[0]).removeClassName('show');
		$(cssId[0]).addClassName('hide');
	}
}

document.observe('dom:loaded', function() {
	if($('commentEditor'))
	{
	  	Event.observe($('commentEditor'), 'click', function() { 
			$('commentEditor').removeClassName('commentEditorStyle');
			$('commentEditor').setStyle( { 'width' : '100%' } );
			$('submitButton').show();
			tinyMCE.execCommand('mceAddControl', true, 'commentEditor');
			tinyMCE.execCommand('mceFocus', false, 'commentEditor'); 
		});  
	}
});