var Message=new Class({Implements:[Options,Events],msgChain:null,end:false,isDisplayed:false,windowSize:null,pageSize:null,page:$(document),box:null,boxSize:null,scrollPos:null,windowSize:null,hasVerticalBar:false,hasHorizontalBar:false,boxPos:$empty,tipCheck:true,cancel:false,fx:null,fxOut:null,options:{callingElement:null,top:false,left:false,centered:false,offset:30,width:"auto",icon:null,iconPath:"/typo3conf/ext/lw_tooltip/res/images/",iconSize:40,fontSize:14,title:null,message:null,delay:0,autoDismiss:true,dismissOnEvent:false,isUrgent:false,callback:null,passEvent:null,stack:true,fxTransition:null,fxDuration:"normal",fxUrgentTransition:Fx.Transitions.Bounce.easeOut,fxOutTransition:null,fxOutDuration:"normal",yesLink:"Yes",noLink:"No"},initialize:function(a){this.setOptions(a);this.box=this;if(this.options.width=="auto"){this.options.width="400px"}if($chk(this.options.passEvent)&&$defined(this.options.callingElement)){this.options.dismissOnEvent=true;this.options.callingElement.addEvent("mouseout",function(){if(this.isDisplayed){this.dismiss()}else{this.cancel=true}}.bind(this))}},say:function(d,c,b,a,e){this.setVars(d,c,b,a,e);this.box=this.createBox();this.msgChain=new Chain();this.setMsgChain()},ask:function(d,c,e,b,a){this.options.autoDismiss=false;if($chk(e)){this.options.callback=e}a=$defined(a)?a:true;this.say(d,c,b,a,e)},tell:function(d,c,b,a){a=$defined(a)?a:true;this.options.dismissOnEvent=true;this.say(d,c,b,a)},waiter:function(d,c,b,a){if($chk(a)){this.options.centered=a}this.options.autoDismiss=false;this.options.dismissOnEvent=true;this.options.centered=true;this.say(d,c,b)},tip:function(c,b,a){this.options.autoDismiss=true;this.options.dismissOnEvent=true;this.say(c,b,a)},setVars:function(d,c,b,a,e){if($defined(d)){this.options.title=d}if($defined(c)){this.options.message=c}if($defined(b)){this.options.icon=b}if($defined(a)){this.options.isUrgent=a}if($defined(e)){this.options.callback=e}},setMsgChain:function(){if(!$chk(this.fx)){this.fx=new Fx.Tween(this.box,{link:"chain",onComplete:function(){if((this.options.autoDismiss&&!this.options.dismissOnEvent)||(!this.isDisplayed&&!$chk(this.options.callback))){this.msgChain.callChain()}}.bind(this),transition:this.options.fxTransition,duration:this.options.fxDuration})}var a;if($chk(this.options.callback)||this.options.autoDismiss==false||this.options.dismissOnEvent){a=0}else{a=2000}this.msgChain.wait(this.options.delay).chain(function(){if(!this.cancel){this.showMsg()}else{this.complete()}this.fireEvent("onShow")}.bind(this)).wait(a).chain(function(){this.hideMsg()}.bind(this)).callChain()},showMsg:function(){this.setSizes();this.setBoxPosition();if(this.hasVerticalBar){$(document.body).setStyle("overflow","hidden")}this.box.setStyles({opacity:0,top:this.boxPos.startTop,left:this.boxPos.startLeft,"z-index":"1000"}).fade("in");if(!this.options.isUrgent){this.fx.start("top",this.boxPos.endTop)}else{var a=new Fx.Tween(this.box,{duration:"long",transition:this.options.fxUrgentTransition});a.start("top",this.boxPos.endTop)}this.isDisplayed=true},dismiss:function(){this.msgChain.callChain()},setBoxPosition:function(){this.boxPos=new Hash();var e=(this.options.top&&this.options.left),k,f,b,l,h=0,j=0,m=3.5,d,a=1,i,g=null,n;if(this.options.isUrgent){g="[class*=mcUrgent]"}else{if(this.options.top){g="[class*=mcTop]"}else{if($defined(this.options.callingElement)){g="[class*=mcElement]"}else{g="[class*=mcDefault]"}}}if(this.options.stack){d=$$("[class*=messageClass]"+g+"");messagesInfo=d.getCoordinates();var i=new Array();var n=new Array();messagesInfo.each(function(o){i.push(o.height);if(o.top>0){n.push(o.top)}});h=this.scrollPos.y+this.windowSize.y-(i.sum()+m*d.length);if(h>=n.min()){h=n.min()-this.boxSize.y-m}j=i.sum()-this.boxSize.y+(m*d.length);if(n.length>0){if(j<=n[n.length-1]+i[i.length-2]+m){j=n[n.length-1]+i[i.length-2]+m}}}else{h=this.scrollPos.y+this.windowSize.y-this.boxSize.y-this.options.offset;j=this.options.offset}this.options.top?k=(this.boxSize.y*-1):k=this.scrollPos.y+this.windowSize.y;this.options.left?f=this.options.offset:f=this.windowSize.x-this.boxSize.x-this.options.offset;this.options.top?l=j:l=(h);if(($chk(this.options.passEvent)&&!this.options.isUrgent)&&!e){var c;(this.options.passEvent.page.x+this.boxSize.x>this.windowSize.x)?c=(this.boxSize.x*-1)-5:c=5;this.boxPos.extend({startTop:this.options.passEvent.page.y-this.options.offset,startLeft:this.options.passEvent.page.x+c,endTop:this.options.passEvent.page.y+j-(m*3)})}else{if((this.options.isUrgent&&!e)||this.options.centered){this.box.position();this.boxPosition=this.box.getCoordinates();if(this.options.stack&&d.length>1){j=n[n.length-1]+i[i.length-2]+m}else{j=this.boxPosition.top}

if ( j > 600 ) j = 400;

this.boxPos.extend({startTop:this.boxPosition.top-100,startLeft:this.boxPosition.left,endTop:j})}else{this.boxPos.extend({startTop:k,startLeft:f,endTop:l})}}},setSizes:function(){this.boxSize=this.box.getSize();this.boxPosition=this.box.getCoordinates();this.windowSize=this.page.getSize();this.scrollPos=this.page.getScroll();this.pageSize=this.page.getScrollSize();if(this.windowSize.y>=this.pageSize.y){this.hasVerticalBar=true||false}if(this.windowSize.x>=this.pageSize.x){this.hasHorizontalBar=true||false}},createBox:function(){var l="",c="",u="",t="",j="",v,g,o,q,s,h,m,a,k;if(this.options.top){l=" mcTop"}else{if(this.options.isUrgent){t=" mcUrgent"}else{if($defined(this.options.callingElement)){j=" mcElement"}else{u=" mcDefault"}}}newBox=new Element("div",{"class":"msgBox messageClass"+l+u+t+j,styles:{"max-width":this.options.width,width:this.options.width}});g=0;if($chk(this.options.icon)){var e=new Element("div",{"class":"msgBoxIcon"});var f=new Element("img",{"class":"msgBoxImage",src:this.options.iconPath+this.options.icon,styles:{width:this.options.iconSize,height:this.options.iconSize}})}if(!$chk(this.options.title)||!$chk(this.options.message)){this.getContent()}o=new Element("div",{"class":"msgBoxContent"}).setStyle("font-size",this.options.fontSize);q=new Element("div",{"class":"msgBoxTitle",html:this.options.title}).setStyle("font-size",this.options.fontSize+4);imageWidth=this.getCSSTotalWidth("msgBoxIcon");h=new Element("div",{"class":"clear"});m=new Element("div",{html:this.options.message+"<br />",styles:{margin:"0px",width:this.options.width.toInt()-imageWidth}});a=this.options.message.indexOf("textarea")>-1;if($chk(this.options.callback)&&!a){var r=this.createLink(this.options.yesLink,true);var b=this.createLink(this.options.noLink,false);r.inject(m);m.appendText(" | ");b.inject(m)}else{if(a){var n=this.createLink("Send",true);var d=this.createLink("Cancel",false);n.inject(m);m.appendText(" | ");d.inject(m)}else{if(this.options.isUrgent||(!this.options.autoDismiss&&!this.options.dismissOnEvent)){var i=this.createLink("Ok",false);i.inject(m)}}}k=new Element("div",{"class":"msgBoxMessage"});m.inject(k);if($chk(this.options.icon)){e.inject(newBox);f.inject(e)}o.inject(newBox);q.inject(o);h.inject(o);k.inject(o);newBox.inject(this.page.body);this.box=newBox;return newBox},createLink:function(b,a){var c=new Element("a",{href:"javascript:","class":"msgBoxLink",html:b,id:b.replace(" ","_")+"Link",events:{click:function(){this.msgChain.callChain();if(a){this.executeCallback()}}.bind(this)}});return c},getCSSTotalWidth:function(b){var c=new Element("div",{id:"dummy","class":b});c.inject($(document.body));var a=c.getComputedSize();c.destroy();return a.totalWidth},executeCallback:function(){if($type(this.options.callback)=="element"){this.options.callback.fireEvent("click")}else{if($type(this.options.callback)=="function"){this.options.callback.run()}else{eval(this.options.callback)}}},getContent:function(){var d;var c;if($defined(this.options.callingElement)){var b=this.options.callingElement.getProperty("rel");var a;if(!$chk(b)){a=this.setError("Expected data in the 'rel' property of this calling element was not defined.");d=a[0];c=a[1];this.options.autoDismiss=false}else{a=b.split("::");d=a[0];c=a[1]}}this.options.title=d;this.options.message=c},setError:function(b){var a=new Array();a.push("<span style='color:#FF0000'>Error!</span>");a.push(b);return a},complete:function(){this.box.destroy();this.end=true;this.isDisplayed=false;this.fireEvent("onComplete");$(document.body).setStyle("overflow","auto")},hideMsg:function(){if(this.hasVerticalBar){$(document.body).setStyle("overflow","hidden")}var a=this.box.getCoordinates();this.box.fade("out");this.fxOut=new Fx.Tween(this.box,{transition:this.options.fxOutTransition,duration:this.options.fxOutDuration});this.fxOut.addEvent("complete",function(){this.complete()}.bind(this));var b;this.options.top?b=this.boxSize.y*-1:b=a.top+this.boxSize.y;this.fxOut.start("top",b)}});



/**
 * SimpleTabs - Unobtrusive Tabs with Ajax
 * changed by rz to display print
 *
 * @example
 *
 *	var tabs = new SimpleTabs($('tab-element'), {
 * 		selector: 'h2.tab-tab'
 *	});
 *
 * @version		1.0
 *
 * @license		MIT License
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	2007 Author
 */
var SimpleTabs = new Class({

	Implements: [Events, Options],

	/**
	 * Options
	 */
	options: {
		show: 0,
		selector: '.tab-tab',
		classWrapper: 'tab-wrapper',
		classMenu: 'tab-menu',
		classContainer: 'tab-container',
		onSelect: function(toggle, container, index) {
			toggle.addClass('tab-selected');
			container.removeClass('tab-hidden');
			//container.setStyle('display', '');
		},
		onDeselect: function(toggle, container, index) {
			toggle.removeClass('tab-selected');
			container.addClass('tab-hidden');
			//container.setStyle('display', 'none');
		},
		onRequest: function(toggle, container, index) {
			container.addClass('tab-ajax-loading');
		},
		onComplete: function(toggle, container, index) {
			container.removeClass('tab-ajax-loading');
		},
		onFailure: function(toggle, container, index) {
			container.removeClass('tab-ajax-loading');
		},
		onAdded: Class.empty,
		getContent: null,
		ajaxOptions: {},
		cache: true
	},

	/**
	 * Constructor
	 *
	 * @param {Element} The parent Element that holds the tab elements
	 * @param {Object} Options
	 */
	initialize: function(element, options) {
		this.element = $(element);
		this.setOptions(options);
		this.selected = null;
		this.build();
	},

	build: function() {
		this.tabs = [];
		this.menu = new Element('ul', {'class': this.options.classMenu});
		this.wrapper = new Element('div', {'class': this.options.classWrapper});

		this.element.getElements(this.options.selector).each(function(el) {
			var content = el.get('href') || (this.options.getContent ? this.options.getContent.call(this, el) : el.getNext());
			this.addTab(el.innerHTML, el.title || el.innerHTML, content);
		}, this);
		this.element.empty().adopt(this.menu, this.wrapper);

		if (this.tabs.length) this.select(this.options.show);
	},

	/**
	 * Add a new tab at the end of the tab menu
	 *
	 * @param {String} inner Text
	 * @param {String} Title
	 * @param {Element|String} Content Element or URL for Ajax
	 */
	addTab: function(text, title, content) {
		var grab = $(content);
		var container = (grab || new Element('div'))
			//.setStyle('display', 'none')
			.addClass('tab-hidden')
			.addClass(this.options.classContainer)
			.inject(this.wrapper);
		var pos = this.tabs.length;
		var evt = (this.options.hover) ? 'mouseenter' : 'click';
		var tab = {
			container: container,
			toggle: new Element('li').grab(new Element('a', {
				href: '#',
				title: title
			}).grab(
				new Element('span', {html: text})
			)).addEvent(evt, this.onClick.bindWithEvent(this, [pos])).inject(this.menu)
		};
		if (!grab && $type(content) == 'string') tab.url = content;
		this.tabs.push(tab);
		return this.fireEvent('onAdded', [tab.toggle, tab.container, pos]);
	},

	onClick: function(evt, index) {
		this.select(index);
		return false;
	},

	/**
	 * Select the tab via tab-index
	 *
	 * @param {Number} Tab-index
	 */
	select: function(index) {
		if (this.selected === index || !this.tabs[index]) return this;
		if (this.ajax) this.ajax.cancel().removeEvents();
		var tab = this.tabs[index];
		var params = [tab.toggle, tab.container, index];
		if (this.selected !== null) {
			var current = this.tabs[this.selected];
			if (this.ajax && this.ajax.running) this.ajax.cancel();
			params.extend([current.toggle, current.container, this.selected]);
			this.fireEvent('onDeselect', [current.toggle, current.container, this.selected]);
		}
		this.fireEvent('onSelect', params);
		if (tab.url && (!tab.loaded || !this.options.cache)) {
			this.ajax = this.ajax || new Request.HTML();
			this.ajax.setOptions({
				url: tab.url,
				method: 'get',
				update: tab.container,
				onFailure: this.fireEvent.pass(['onFailure', params], this),
				onComplete: function(resp) {
					tab.loaded = true;
					this.fireEvent('onComplete', params);
				}.bind(this)
			}).setOptions(this.options.ajaxOptions);
			this.ajax.send();
			this.fireEvent('onRequest', params);
		}
		this.selected = index;
		return this;
	}

});

window.addEvent('domready', function() {
	 
	/**
	 * Element with class 'lwTab' is the container and all h1-elements
	 * inside are fetched as tab headers. The following elements are their
	 * content.
	 */
	
	var lwTabs = document.getElements('.lwTabs');
	lwTabs.each(function(item, index){
		var tabs = new SimpleTabs(item, {
			selector: '.lwTabHead'
		});
	});
	/*var lwTabContent = document.getElements('.lwTabs .tab-tohide');
	lwTabContent.each(function(item, index){
		item.addClass('tab-hidden');
	});*/

});

