var mooTips = new Class({
	Extends : general,
	Implements : [Options , Events],
	options: {
		onShow: function(tip){
			tip.setStyle('visibility', 'visible');
		},
		onHide: function(tip){
			tip.setStyle('visibility', 'hidden');
		},
		showOnClick	: 	false,
		cssClass 	: 	'mootips',
		divCssClass : 	'new_window',
		position	: 	1,
		showOnMouseEnter: true,
		divID:'new_window',
		showDelay: 100,
		hideDelay: 100,
		crossStatus : 'close',
		isOver : false,
		offsets: {'x': 16, 'y': 16},
		className: 'tool',
		fixed: false
	},

	initialize: function(elements, options){
		this.setOptions(options);
		this.options.elementName = elements
		$$(elements).each(function(item){
			if(!item.get('class').contains('isDom')){
				this.build(item);
			}
		}.bind(this));
	},
	
	checkElement:function(el){
		el.addClass('isDom');
		if(el.get('href') == null){
			el.ajaxParams = el.get('lang');
			el.arr = el.get('dir');
			el.eventStatus 	= el.arr.split(':')[0];
		}else{
			el.ajaxParams = 	el.get('href');	
			el.ajaxParams =   	el.ajaxParams.split('?')[1];
			el.arr =  el.get('name');
			if(el.get('name').contains('tpl')){
				el.ajaxParams 	= el.arr.split(':')[3];
			}
			el.eventStatus 	= el.name.split(':')[0];
		}
		var css = el.get('class');
		return el;
	},
	
	build: function(el){
		el = this.checkElement(el);
		
		switch(el.eventStatus){
			case "cross":
				el.divID 		= el.arr.split(':')[1];
				el.crossID 		= el.divID+'_cross';
				el.insertAfter 	= el.arr.split(':')[2];
				
				
			break;
			case "click":
				el.divPosition 	= el.arr.split(':')[1];
				el.divID 		= el.arr.split(':')[2];
				el.offset_x 	= el.arr.split(':')[3];
				el.offset_y 	= el.arr.split(':')[4];
				if(Browser.Engine.trident){
					el.offset_y  = el.offset_y -56;			
				}
		
			break;
			case "over":
				el.divPosition 	= el.arr.split(':')[1];
				el.divID 		= el.arr.split(':')[2];
				if(el.get('name').contains('tpl')){
					el.ajaxParams 	= el.arr.split(':')[3];
					el.offset_x 	= el.arr.split(':')[4];
					el.offset_y 	= el.arr.split(':')[5];
					el.showDelay 	= el.arr.split(':')[6];
					el.hideDelay 	= el.arr.split(':')[7];
				el.divCssClass 	= el.arr.split(':')[8];
				}else{
					el.ajaxParams 	= el.get('href');	
					el.ajaxParams =   	el.ajaxParams.split('?')[1];
					el.offset_x 	= el.arr.split(':')[3];
					el.offset_y 	= el.arr.split(':')[4];		
					el.showDelay 	= el.arr.split(':')[5];
					el.hideDelay 	= el.arr.split(':')[6];
					el.divCssClass 	= el.arr.split(':')[7];	
				}
				
			
				
				if(Browser.Engine.trident){
					el.offset_y  = el.offset_y -56;			
				}
				
			break;
			case "centerBox":
				el.cssNormal 		= el.arr.split(':')[1];
				el.cssHover 		= el.cssNormal+'_hover';
				el.cssActive		= el.cssNormal+'_active';
				if($chk(el.cssNormal))el.addClass(el.cssNormal);
			break;
			case "underElement":
				if($chk(el.arr.split(':')[1])){
					el.divPosition 	= el.arr.split(':')[1];	
				}
			break;
           
		}
		if($chk(el.ajaxParams)){
			el.ajaxParams = el.ajaxParams.replace(/,/g, "&");
		} 
		el.isDOM		= true;


		switch(el.eventStatus){
			case "underElement":
				el.addEvent('click', function(e){
					e = new Event(e).stop();
					el.myDiv = this.makeDiv(el);
					result = this.ajaxNew(el.ajaxParams,el.myDiv);
					result.addEvent('onComplete',function(){
						this.ajaxEffect(el.myDiv);
						return true;
					}.bind(this));
				}.bind(this));
					
			break;
			case "cross":
				var newImg = new Element('img', {
					'styles'	: {'vertical-align' : 'middle','margin-right':'5px','border':'none'},
					'src'		: '../images/icons/cross_close.png',
					'id' 		: el.crossID
					
				});
					
				textHtml = el.get('html');
				el.set('html','');
				newImg.inject(el);
				el.appendText(textHtml);
					
				el.addEvent('click', function(e){
					e = new Event(e).stop();
					
					if(!$defined($(el.divID))){
						el.myDiv = this.makeDiv(el);
						ajax_params =  el.ajaxParams;
						result = this.ajax(ajax_params,el.divID);
						result.addEvent('onComplete',function(){
						
							$(el.divID).setStyle('visibility','visible');	
							$(el.crossID).set('src','../images/icons/cross_open.png');
						});
						this.position(el);	
					
					}else{
						$(el.crossID).set('src','../images/icons/cross_close.png');
						$(el.divID).dispose();	
					}
				}.bind(this));
			break;
			case "click":
				el.addEvent('click', function(e){
					e = new Event(e).stop();
					if(!$defined($(el.divID))){
						el.myDiv = this.makeDiv(el);
						ajax_params =  el.ajaxParams;
						result = this.ajax(ajax_params,el.divID);
						result.addEvent('onComplete',function(elemet){
							$(el.divID).setStyle('visibility','visible');	
						});
						this.position(el);	
					}else{
						$(el.divID).dispose();	
					}
				}.bind(this));
				
				
			break;
				case "over" :
					el.addEvent('mouseenter', function(e){
						e = new Event(e).stop();
						el.addClass('isActive');
						if(!$defined($(el.divID))){
							el.myDiv = this.makeDiv(el);
						}else{
							$(el.divID).dispose();
							el.myDiv = this.makeDiv(el);
						}
						
						el.myDiv.addEvent('mouseleave',function(){
							this.end(el);
						}.bind(this));
						
						el.myDiv.addEvent('mouseenter',function(){
							el.state = 'mouseenter';
							el.myDiv.state = 'mouseenter';
						}.bind(this))
					
						ajax_params =  el.ajaxParams;
						result = this.ajax(ajax_params,el.divID);
						this.position(el);	
						this.start(el);	
					}.bind(this));
					
					el.addEvent('mouseleave', function(e){
						e = new Event(e).stop();
						el.addEvent('mouseleave',function(event){
						}.bind(this));
																		
						el.myDiv.addEvent('mouseleave',function(event){
						
							this.end(el);
						}.bind(this));
						
						el.myDiv.addEvent('mouseenter',function(){
							el.addClass('isActive');
						});
					
						var annoy = (function(){ 
							if(!el.get('class').contains('isActive')){
								$clear(annoy);
								this.end(el);
							}
									
						}.bind(this)).periodical(100);
						el.removeClass('isActive');
					}.bind(this));
					
					el.addEvent('click', function(e){
						if($defined($('modulMenuList'))){
							$('modulMenuList').dispose();
						}
						e = new Event(e).stop();
							ajaxParams = el.get('href');	
							params =   	ajaxParams.split('?')[1];
							result = this.ajax(params,'content_center');
					}.bind(this));
					
				break;
				case 'centerBox':
					this.switchCSS(el);
					el.addEvent('click', function(e){
					e = new Event(e).stop();
					
					var centerBox = new mooSimpleBox({ 
						params:el.ajaxParams,
						boxClass:'myBox', 
                        borderClass : 'rahmen_alles',
						id:'actionbox', 
						fadeSpeed:100, 
						opacity:'1', 
						isDrag:'false'
					});
					
					centerBox.fadeIn();
				}.bind(this));
				break;
			}
	},
	
	createDiv : function(el){
	
		if($chk(el.divCssClass)){
			var cssClass = el.divCssClass;
		}else{
			var cssClass = this.options.divCssClass;
		}
		
		
		myDiv = new Element('div',{
			'class' : cssClass,
			'id'	: el.divID,
			'styles': {
				'z-index'	: '99',
				'visibility':	'hidden',
				'height'	:'auto'
			}		
		});
		return myDiv;
	},
	
	makeDiv : function(el){
		theDiv = this.createDiv(el);
		
		if(el.divPosition == 'absolute'){
			theDiv.setStyle('position','absolute');
			theDiv.inject(document.body,'top');
		}else{
		
			switch(el.eventStatus){
				case "cross":
					divs = el.getParents('div');
					divs.each(function(item, index){
						if(item.get('class').test(el.insertAfter)){
							theDiv.inject(item,'after'); 
						}
					});
				break;
				case "click":
					theDiv.inject(el,'after'); 
				break;
				case "underElement":
					theDiv.setStyle('position','relative');
					if($defined(el.divPosition)){
						var position = el.getParent('div');
					}else{
						var position = el;	
						
					}
					theDiv.inject(position,'after'); 
				break;
				default:
					theDiv.setStyle('position','relative');
					
			}
		}
		
		return theDiv;
	},

	start: function(el){
		$clear(el.timer);
		el.state = 'mouseleave';
		el.timer = this.show.delay(el.showDelay,this,el);
		
	},
	                  
	end: function(el){
		$clear(el.timer);
		el.timer = this.hide.delay(el.hideDelay, this, el);
	 },

	position: function(el){
		if (el.divPosition == 'absolute'){
				var pos = el.getPosition();
			if(Browser.Engine.trident){
				pos.y = pos.y + 57;
			}
		}else{
				var pos = false;
		}
	
		var offset_x = Number(el.offset_x);
		var offset_y = Number(el.offset_y);
	
		theDiv.setStyles({
			'left': pos.x 	+  	offset_x,
			'top': 	pos.y 	+ 	offset_y
		});
	},

	locate: function(event,el){
		var win = {'x': window.getWidth(), 'y': window.getHeight()};
		var scroll = {'x': window.getScrollLeft(), 'y': window.getScrollTop()};
		var tip = {'x': el.domObject.offsetWidth, 'y': el.domObject.offsetHeight};
		var prop = {'x': 'left', 'y': 'top'};
		for (var z in prop){
			var pos = event.page[z] + this.options.offsets[z];
			if ((pos + tip[z] - scroll[z]) > win[z]) pos = event.page[z] - this.options.offsets[z] - tip[z];
			el.domObject.setStyle(prop[z], pos);
		};
	},

	show: function(el){
		el.myDiv.setStyle('visibility', 'visible');
	},

	hide: function(el){
		el.myDiv.dispose();
	}
});
