var currentViewName = '';


jQuery(document).ready(function()
{

	if ( !Function.prototype.bind )
		Function.prototype.bind = function( context, args )
		{
			var _a = jQuery.makeArray( args );
			var _c = context;
			var _h = this;

			return function()
			{
				return _h.apply( _c, _a.concat( jQuery.makeArray( arguments ) ) );
			};
		}



	/*
	 * implement support for landing pages/simple view selection
	 */

	jQuery.extend( {

		// list of node IDs considered category nodes
		mtCategories :
		[
			'services-cat', 'abo-cat', 'produkte-cat'
		],

		// record storing information on currently visible view
		mtView :
		{
			name : null,
			ref  : null,
			toggleStatus : null
		},

		// ensure to have a non-empty viewname preceeded by a hash
		mtQualifyViewName : function( name )
		{
			if ( name && name.length > 0 )
				while ( name[0] == '#' )
					name = name.substring( 1 );

			if ( !name || !name.length )
				name = 'start';

			return name;
		},

		// get view node selected by provided name
		mtGetView : function( viewname )
		{
			return jQuery( '#' + jQuery.mtQualifyViewName( viewname ) );
		},

		// detects if curent context node or given node is a category node or not
		mtIsCategoryNode : function( node )
		{
			var name = jQuery(node?node:this).attr( 'id' );

			for ( var i = 0; i < jQuery.mtCategories.length; i++ )
				if ( name == jQuery.mtCategories[i] )
					return true;

			return false;
		},

		// gets category node containing provided view node
		mtGetCategory : function( view )
		{
			return jQuery( jQuery( view ) ).parents( '[id]' ).filter( jQuery.mtIsCategoryNode );
		},

		mtShowCategory : function( categoryName )
		{
			var selected, active;


			// find active category, if available
			if ( jQuery.mtView.ref )
				active = jQuery.mtGetCategory( jQuery.mtView.ref );

			// validate category selection
			if ( categoryName == 'start' )
				selected = jQuery( '#services-cat' );
			else
				selected = jQuery( '#' + categoryName );

			if ( !jQuery.mtIsCategoryNode( selected ) )
				return;

			if ( active )
				if ( active.attr( 'id' ) == selected.attr( 'id' ) )
					// category is selected already -> no change
					return;

			// change to that category now
			jQuery.mtChangeCategory( selected, active );

			if ( categoryName != 'start' )
				// always hide toggle of initial view
				jQuery('#homeview').animate({width:'hide'},0);

		},

		mtChangeCategory : function( selected, active, instant )
		{
			var i, cat;


			selected = jQuery( selected );

			if ( active )
				active = jQuery( active ).get( 0 );

			for ( i = 0; i < jQuery.mtCategories.length; i++ )
			{

				cat = jQuery( '#' + jQuery.mtCategories[i] );

				if ( selected.attr( 'id' ) == cat.attr( 'id' ) )
				{
					// show this category

					cat.css( 'visibility', 'visible' );

					if ( instant )
						cat.css( 'display', 'block' );
					else
						cat.animate( { opacity : 'show' }, 'slow' );

				}
				else if ( !active || ( active.id == jQuery.mtCategories[i] ) )
				{
					// hide this category

					if ( instant )
						cat.css( 'display', 'none' );
					else if ( active )
						// fade out current/active view
						cat.animate( { opacity : 'hide' }, 'slow' );
					else
						// instantly hide all unused views
						cat.animate( { opacity : 'hide' }, 'slow' );

				}
			}
		},

		// changes to selected view
		mtShowView : function( viewname, noTrackInHistory )
		{

			viewname = jQuery.mtQualifyViewName( viewname );

			if ( jQuery.mtView.name == viewname )
			{
				// selected before
				jQuery.mtFocusOnStage();

				return true;
			}

			stopVideo();



			// look for selected view
			var selectedView = jQuery(), selectedCategory = jQuery();


			if ( viewname != 'start' )
			{
				// find selected view and its containing category
				selectedView     = jQuery.mtGetView( viewname );
				selectedCategory = jQuery.mtGetCategory( selectedView );

				if ( !selectedView.length )
					// unknown view -> show homeview instead
					viewname = 'start';

			}



			// disable homeview until it's content has been updated
			if ( viewname == 'start' )
				viewname = 'services';



			if ( viewname != 'start' )
			{
				// select different view

				// (re-)find selected view and its containing category
				selectedView     = jQuery.mtGetView( viewname );
				selectedCategory = jQuery.mtGetCategory( selectedView );

				if ( !selectedView.length )
					return;


				if ( !jQuery.mtView.toggleStatus )
				{
					// close skipped welcome view
					jQuery('#homeview').animate({
											width: 'hide'
										},0);

					// prevent automatically closing welcome view
					jQuery.mtView.toggleStatus = true;
				}


				// change to that category
				jQuery.mtShowCategory( selectedCategory.attr( 'id' ) );

				if ( !jQuery.mtView.ref || ( jQuery.mtView.ref[0] != selectedView[0] ) )
				{
					// need to change to selected view

					// get managing slider
					var slider = jQuery(selectedView).parents('.anythingSlider');
					var items  = jQuery('ul.slider_views > li',slider);
					if ( slider.length && items.length )
					{
						// find index in list

						var index = -1;

						for ( var i = 0; i < items.length; i++ )
							if ( selectedView.attr( 'id' ) == items[i].id )
							{
								index = i;
								break;
							}

						if ( index >= 0 )
						{

							slider.anythingSlider( index );

							if ( document.__changedView )
								pageTracker._trackPageview( '/' + selectedView.attr( 'id' ) );

							pageTracker._trackEvent( 'Views', 'Change', selectedView.attr( 'id' ) );


							jQuery.mtFocusOnStage();

						}
						else
							pageTracker._trackEvent( 'Views', 'Miss', selectedView.attr( 'id' ) );


						jQuery.mtView.name = viewname;
						jQuery.mtView.ref = selectedView;

						jQuery.mtManageIndexRelation();
						jQuery.mtUpdateFootnotes();

					}

					currentViewName = viewname;

				}
			}


			if ( !noTrackInHistory && false )
				jQuery.mtHistoryTrack( viewname );


			if ( viewname == 'start' )
			{
				// special case ... start is allowed once at beginning, only

				if ( /*jQuery.mtView.ref || */jQuery.mtView.toggleStatus )
				{
					// can't return to start view
					jQuery.mtView.toggleStatus = null;
					jQuery.mtView.name = jQuery.mtView.ref = null;

					jQuery.mtShowCategory( 'start' );

					jQuery('#homeview').animate({
												width: 'show'
											}, 'slow');

					jQuery.mtUpdateFootnotes();

					return;
				}

				// hide all initially unused layers
				jQuery.mtChangeCategory( '#services-cat', null, true );

				// attach click handler to close welcome view
				jQuery('#homeview-tail,#btn-hide-homeview').click( function( event )
				{
					// prevent from closing welcome view a second time
					jQuery.mtView.toggleStatus = true;

					// slide out welcome view
					jQuery('#homeview').animate({
												width: 'hide'
											}, 'slow', jQuery.mtShowView.bind( document, [ 'services' ] ) );

/*
					// after that make services-toc current view
					jQuery.mtView.name = 'services';
					jQuery.mtView.ref  = jQuery('#services');
*/

					jQuery.mtUpdateFootnotes();

					event.preventDefault();
				} );

				// install timer to automatically close welcome view after delay
/*
				jQuery.mtView.timer = setTimeout( function() {
												if ( !jQuery.mtView.toggleStatus )
													jQuery('ul.buehneList li.li_toggle').click();
											}, 5000 );
*/
			}

			document.__changedView = true;

		},

		// ensure to scroll up page to focus on stage area, e.g. if user has clicked
		// a link in footnotes and thus don't see stage changing
		mtFocusOnStage : function()
		{
			var pos = jQuery('#buehne').position();
			if ( jQuery(document).scrollTop() > pos.top )
				jQuery(document).scrollTop( pos.top );
		},

		// marks change from current view without explicitly naming new view
		mtUnshowView : function( newView )
		{
			stopVideo();

			jQuery.mtView.name = newView ? newView.attr( 'id' ) : null;
			jQuery.mtView.ref  = newView ? newView              : null;

			currentViewName    = newView ? newView.attr( 'id' ) : null;

			jQuery.mtManageIndexRelation();
		},

		mtFindNeighbourView : function( above )
		{

			if ( !jQuery.mtView.ref )
				return null;

			var neighbour = above ? jQuery.mtView.ref.prev( 'li[id]' )
						 		  : jQuery.mtView.ref.next( 'li[id]' );

			if ( !neighbour.length )
				neighbour = above ? jQuery.mtView.ref.siblings('li[id]').last().prev().prev()
								  : jQuery.mtView.ref.siblings('li[id]').first().next().next();

			return neighbour;
		},

		// processes click on a node initiating transfer to new view
		mtClick : function( event )
		{
			var viewname = jQuery(this).attr('rel');

			if ( viewname )
			{
				// use internal viewname provided in attribute rel
				if ( ( viewname == 'start' ) || jQuery( '#' + viewname ).length )
				{
					// apply some application-dependent constraints here
					if ( jQuery.mtView.name == 'abo-check' )
						jQuery.mtView.indexToUse = jQuery.mtView.name;

					jQuery.mtShowView( viewname );
				}
				else
				// use rewriting, only
				//	location.href = 'index.php?id=' + viewname;
					location.href = viewname;

			}
			else if ( !this.href )
			{
				// no href in node, look for embedded node with href
				var subref = jQuery('[href]',this).filter(function(){return this.href&&this.href!='#';}).attr('href');
				if ( subref )
					location.href = subref;
				return;
			}
			else if ( this.href != '#' )
				// clicked node has explicit reference
				return;

			// prevent further action on processing rel attribute or on
			// href referring to senseless #
			event.preventDefault();
		},

		mtManageIndexRelation : function()
		{
			var catNode = jQuery.mtGetCategory( jQuery.mtView.ref );
			var idxName = catNode.attr( 'rel' );

			if ( idxName == jQuery.mtView.name )
				// drop any custom index relation on returning to current category's index
				jQuery.mtView.indexToUse = null;
		},

		mtClickForIndex : function( event )
		{
			if ( jQuery.mtView.indexToUse )
			{
				jQuery.mtShowView( jQuery.mtView.indexToUse );
				jQuery.mtView.indexToUse = null;
			}
			else
			{
				var catNode = jQuery.mtGetCategory( jQuery.mtView.ref );
				var catName = catNode.attr( 'id' );

				if ( catNode.attr( 'rel' ) )
					catName = catNode.attr( 'rel' );
				else if ( catName.match( /-cat$/ ) )
					catName = catName.substr( 0, catName.length - 4 );

				jQuery.mtShowView( catName );
			}

			event.preventDefault();
		},

		mtUpdateFootnotes : function()
		{

			var sups = jQuery('#content sup');

			sups = sups.add( jQuery( '#buehne.buehne_hilfe_kontakt sup' ) );

			if ( jQuery.mtView.ref )
				sups = sups.add(jQuery( 'sup', jQuery.mtView.ref ) );
			else
				sups = sups.add( jQuery( '#homeview sup, #buehne.osterei sup' ) );

			var fnotes = jQuery('#footer ol.footnotes');
			var visible = {};

			sups.each( function( i )
			{
				var rel = jQuery(this).attr( 'rel' );
				if ( rel && rel.length )
				{
					// found footnote reference with relation name

					var fn = jQuery('#'+rel,fnotes);
					if ( fn && fn.length )
						// found related footnote
						visible[rel] = true;

				}
			} );

			jQuery('li[id]',fnotes).each( function()
			{
				var fn = jQuery(this);
				if ( visible[fn.attr('id')] )
					fn.delay(250).slideDown(500);
				else
					fn.slideUp(250);

				window.setTimeout( 'jQuery.mtUpdateFootnoteReference();', 600 );
			} );

		},

		mtUpdateFootnoteReference : function()
		{
			jQuery('#footer ol.footnotes li[id]:visible').each( function( i )
			{
				jQuery('sup[rel='+jQuery(this).attr('id')+']').text(String(i+1));
			} );
		},

		mtStartPlasmaTVPromo : function()
		{
			jQuery('#produkte-cat ul.slider_views > li .upper .bestellen a').each( function()
			{
				if ( this.href.indexOf( '&promotionCode=' ) < 0 )
					this.href += '&promotionCode=PLASMA';
			} );
			jQuery.mtShowView( 'angebote' );
		},

		mtHistory :
		{
			_store    : null,
			_observer : null,
			_cursor   : null,
			_heap     : {},
			_stack    : [],
			_lock     : 0
		},

		mtHistoryInit : function()
		{
			with ( jQuery.mtHistory )
			{

				if ( !_store )
				{
					// initialize on first call
					_store = jQuery('<iframe></iframe>')
												  .attr('src','js/lib/history-blank.html')
												  .css({
														'position'   : 'absolute',
														'visibility' : 'hidden',
														'z-index'    : -1
												  })
												  .appendTo('body');

					// disable smart page caching in modern browsers
					jQuery(window).unload( function() { return; } );
				}

				if ( !_observer )
					_observer = window.setInterval( jQuery.mtHistoryObserver, 150 );

			}
		},

		mtHistoryTrack : function( viewname )
		{
			jQuery.mtHistoryInit();

			with ( jQuery.mtHistory )
			{

				_lock++;

				var index = jQuery.inArray( _cursor, _stack );
				if ( index >= 0 )
					_stack = _stack.slice( 0, index + 1 );

				_cursor = new Date().getTime();
				_stack.push( _cursor );
				_heap[_cursor] = viewname;

				_store.contents()[0].location.hash = '#' + String( _cursor ) + '_' + _stack.length + '_' + viewname;

				_lock--;

			}
		},

		mtHistoryObserver : function()
		{
			with ( jQuery.mtHistory )
			{

				if ( _lock > 0 )
					return;

				if ( !_store || !_store.length )
					return;

				if ( !_stack.length )
					return;


				var hash, match, current, embedded;

				// read current cursor
				hash  = _store.contents()[0].location.hash;
				match = /^#(\d+)_(\d+)_(.+)$/.exec( hash );
				if ( match )
				{
					current  = parseInt( match[1] ) || -1;
					position = parseInt( match[2] ) || -1;
					embedded = match[3] || '';
				}
				else
				{
					current  = position = -1;
					embedded = '';
				}




				var recentIndex, currentIndex;

				if ( _cursor > 0 )
					recentIndex = jQuery.inArray( _cursor, _stack );
				else
					recentIndex = -1;

				if ( current > 0 )
					currentIndex = jQuery.inArray( current, _stack );
				else
					currentIndex = -1;

				if ( currentIndex < 0 )
					if ( position > 0 )
					{
						// got back into page, thus try to re-establish recent session agap

						while ( position > _stack.length + 1 )
							_stack.push( '?' );

						if ( position > _stack.length )
						{
							// append page to stack
							_stack.push( current );
							_heap[current] = embedded;

							currentIndex = _stack.length - 1;
						}
						else if ( _stack[position-1] == '?' )
						{
							// update previously unknown frame in stack
							_stack[position-1] = current;
							_heap[current] = embedded;

							currentIndex = position - 1;
						}
					}


				if ( recentIndex == currentIndex )
					return;


				var backward = ( recentIndex && ( recentIndex > currentIndex ) );

				jQuery.mtHistoryMoved( _heap[current], backward ? -1 : 1 );

				_cursor = current;

			}
		},

		mtHistoryMoved : function( viewname, dir )
		{
			jQuery.mtShowView( viewname, true );
		}
	} );



	if ( jQuery.browser.msie && ( jQuery.browser.version < 7 ) )
	{
		jQuery('#all').prepend('<div class="vintage-note">Ihr Browser ist zu veraltet, um diese Website korrekt darzustellen. Wir empfehlen Ihnen die Nutzung eines aktuellen Webbrowsers wie Microsoft Internet Explorer ab Version 7 oder Mozilla Firefox ab Version 3 ...</div>');
		jQuery('#all .vintage-note').slideUp(0).delay(2500).slideDown('slow');
	}



	jQuery.fn.extend(
	{
		overlayAttach : function()
		{
			return this.each( function()
			{
				var item = jQuery(this);
				item.mouseenter( item.overlayEnter.bind( item ) )
					.mouseleave( item.overlayLeave.bind( item ) )
					.click( item.overlayClick.bind( item ) );
			} );
		},
		overlayContext : function( context )
		{
			if ( arguments.length )
				return this.data('__overlayContext',context);

			var c = this.data('__overlayContext');

			return ( c && c.ref ) ? c : { 'touch' : false };
		},
		overlayEnter : function()
		{
			// reveal any available sub
			var sup = this;
			var ctx = this.overlayContext();
			if ( ctx && ctx.ref )
				while ( ++ctx.touch <= 0 );

			jQuery('> ul',this).each( function()
			{
				// access involved nodes
				var sub = jQuery(this);

				if ( ctx && ctx.ref )
				{
					// re-open closing overlay
					ctx.ref.slideDown( 200 );
				}
				else
				{

					// hiddenly render sub ...
					sub.css({
						'position'   : 'absolute',
						'visibility' : 'hidden',
						'display'    : 'block'
					});

					// ... to get its position and layout ...
					var subP = sub.offset();

					// ... then hide again
					sub.css( {
						'display'    : 'none',
						'visibility' : 'visible'
					} );


					// clone sub for top-most rendering
					var overlay = sub.clone(true);


					// start overlay context
					sup.overlayContext( {
											'ref'   : overlay,
											'touch' : 1
										} );


					// move overlay to same position as original
					overlay.css({
								'left' : String( subP.left - 1 ) + 'px',
								'top'  : subP.top  + 'px'
							});


					overlay.mouseenter( overlay.overlayEnterSub.bind( sup ) )
						   .mouseleave( overlay.overlayLeave.bind( sup ) )
						   .click( overlay.overlayClick.bind( sup ) );

					// apply width of sub
					overlay.css( 'width', String( sup.outerWidth() - 1 ) + 'px' );

					// attach to end of document so it's topmost in every browser
					overlay.appendTo('body').slideDown( 200 )
						   .mouseleave( overlay.overlayLeave.bind( sup ) )
						   .click( overlay.overlayClick.bind( sup ) );

				}
			} );

			return this;
		},
		overlayEnterSub : function()
		{
			var overlay = this.overlayContext();
			if ( overlay && overlay.ref )
				// keep sub open
				overlay.touch++;
			return this;
		},
		overlayLeave : function()
		{
			var overlay = this.overlayContext();
			if ( overlay && overlay.ref )
				if ( --overlay.touch <= 0 )
					overlay.timer = window.setTimeout( this.overlayHide.bind( this ), 300 );
			return this;
		},
		overlayHide : function()
		{
			var overlay = this.overlayContext();
			if ( overlay && overlay.ref && ( overlay.touch <= 0 ) )
			{
				overlay.ref.slideUp( 300, this.overlayDrop.bind( this ));
				overlay.timer = null;
			}
			return this;
		},
		overlayDrop : function()
		{
			var overlay = this.overlayContext();
			if ( overlay && overlay.ref && ( overlay.touch <= 0 ) )
			{
				overlay.ref.remove();
				this.overlayContext( null );
			}
			return this;
		},
		overlayClick : function()
		{
			var overlay = this.overlayContext();
			if ( overlay && overlay.ref )
			{
				overlay.ref.remove();
				this.overlayContext( null );
			}
			return this;
		}
	} );

	jQuery('#header ul.metanavi > li').overlayAttach();


	jQuery('#homeview li .teaser').click( function( event )
	{
		var clicked = jQuery(this);
		var list    = jQuery(clicked.parents('ul').get(0));
		var content = jQuery('.ap',clicked.parent());

		jQuery('li .teaser',list).removeClass('selected');
		jQuery('li .ap',list).addClass('invisible');

		clicked.addClass('selected');
		content.removeClass('invisible');

		jQuery.mtUpdateFootnotes();

	} );

	/*
	 * slider integration
	 */

	function formatText(index, panel)
	{
	  return index + "";
	}

	jQuery('.anythingSlider_typ1').anythingSlider({
		easing: "easeInOutExpo",        // Anything other than "linear" or "swing" requires the easing plugin
		autoPlay: false,                 // This turns off the entire FUNCTIONALY, not just if it starts running or not.
		delay: 5000,                    // How long between slide transitions in AutoPlay mode
		startStopped: false,            // If autoPlay is on, this can force it to start stopped
		animationTime: 500,             // How long the slide transition takes
		hashTags: false,                // Should links change the hashtag in the URL?
		buildNavigation: false,         // If true, builds and list of anchor links to link to each slide
		pauseOnHover: false,            // If true, and autoPlay is enabled, the show will pause on hover
		startText: "Go",             	// Start text
		stopText: "Stop",               // Stop text
		navigationFormatter: formatText // Details at the top of the file on this use (advanced use)
	});

	jQuery.mtShowView( currentViewName );

	// observe all clickable items to support view changes automatically
	jQuery('a, .clickable').click( jQuery.mtClick );

	// enable hover on whole index item in services slider
	jQuery('#buehne .slider_index .item:not(.no-hover)').mouseover(function(){jQuery(this).addClass('hovered');}).mouseout(function(){jQuery(this).removeClass('hovered');}).click(jQuery.mtClick);

	// enable pseudo-intelligent back-to-index anchors in category "services"
	jQuery('#services-cat .back-to-index').mouseover(function(){jQuery(this).addClass('hovered');}).mouseout(function(){jQuery(this).removeClass('hovered');}).click(jQuery.mtClickForIndex);

	// enable hover on table rows in subscription check/compare view
	jQuery('#abo-check table.morcheckTable tr.hover').mouseover(function(){jQuery(this).addClass('hovered');}).mouseout(function(){jQuery(this).removeClass('hovered');}).click(jQuery.mtClick);

	jQuery.mtUpdateFootnotes();

	jQuery('.anythingSlider ul.slider_views').each(function() {
		var li_count 	= jQuery(this).find('li').length;
		var li_height 	= parseInt( jQuery(this).find('li').height() );

		var ul_sum		= li_count*li_height;
		jQuery(this).css('height', ul_sum);
	});

	jQuery(".moreFacebook").click(function() {

		jQuery("ul.buehneList li.li_toggle").click();
		toggleStatus = 1;


		jQuery('ul#services').css('z-index','2');

		jQuery('.anythingSlider_services').anythingSlider(8);


		jQuery('ul#services').animate({
			opacity: 'show'
			}, 'slow');
			return false;
		}, function() {

		jQuery('ul#produkte, ul#abo').animate({
			opacity: 'hide'
			}, 'slow');
			return false;
		}, function() {


	});



/* buehne ebenen slide */
	jQuery('.buehne_right_typ1_navi a').click(function( event )
	{
		var viewname = jQuery(this).attr('rel');

		if ( viewname )
			jQuery.mtShowView( viewname );
		else if ( !this.href || ( this.href != '#' ) )
			return;

		event.preventDefault();
	});




/* ALLGEMEIN */

	jQuery('input.button').hover(function() {
		jQuery(this).addClass('active');
	}, function() {
		jQuery(this).removeClass('active');
	});




/* mouseover bilder */
	jQuery('a.hoverPic img').hover(function() {
		src = jQuery(this).attr('src');
		src = src.replace(/_lo/g,'_hi');
		jQuery(this).attr('src',src);
	}, function() {
		src = src.replace(/_hi/g,'_lo');
		jQuery(this).attr('src',src);
	});





/* UI Block */
    jQuery('.regInner a').click(function() {
		var thisClass = jQuery(this).attr('class');
		jQuery.blockUI({
            message: jQuery('#'+thisClass+'')
        });
    });

	jQuery('.uiText').click(function() {
		jQuery.unblockUI();
	});

	jQuery('.uiText').hover(function() {
		jQuery(this).addClass('uiText_active');
	}, function() {
		jQuery(this).removeClass('uiText_active');
	});



	jQuery(".arrow").click(function( event )
	{
		var slidInView;

		if ( jQuery(this).hasClass( 'back' ) )
			slidInView = jQuery.mtFindNeighbourView( true );
		else if ( jQuery(this).hasClass( 'forward' ) )
			slidInView = jQuery.mtFindNeighbourView( false );

		jQuery.mtUnshowView( slidInView );
		jQuery.mtUpdateFootnotes();

		pageTracker._trackEvent( 'Slider', 'SlideTo', slidInView ? slidInView.attr( 'id' ) : 'unknown-view' );
		pageTracker._trackPageview( '/' + ( slidInView ? slidInView.attr( 'id' ) : '' ) );

	});



	jQuery("#sonderForm input").click(function() {
		val = jQuery(this).val();

		if(val == "aktion1") {
			jQuery("#sonderaktionForm input#paket1").click();
		}
		if(val == "aktion2") {
			jQuery("#sonderaktionForm input#paket2").click();
		}
	});



	jQuery.extend( {
		onVideoPlayerStateChanged : function( obj )
		{
			var player = jQuery( '#' + obj.id ).get( 0 );

			if ( player && player._moreTVtag )
				switch ( obj.newstate )
				{

					case 'PLAYING' :
					case 'BUFFERING' :
						if ( ( obj.oldstate == 'PAUSED' ) || ( obj.oldstate == 'IDLE' ) )
							pageTracker._trackEvent( 'Videos', 'Start', player._moreTVtag );
						break;

		/*
					case 'IDLE' :
						if ( obj.oldstate == 'PLAYING' )
						{
							pageTracker._trackEvent( 'Videos', 'Completed', player._moreTVtag );
							alert( 'Completed ' + player._moreTVtag );
						}
						break;
		*/

				}
		}
	} );




	jQuery.extend( {
		playerModal :
		{
			isClosing    : false,
			background   : null,
			box          : null,
			hiddenEmbeds : [],
			controlbar   : 0,		// set 23 on locating controlbar at bottom instead of "over" movie
			framesize    : 23,		// padding of player inside frame
			frameborder  : 2,		// width of border around frame
			framemargin  : 30		// distance in pixels of frame from window borders
		},

		playerModalOpen : function( imageURL, movieURL, width, height )
		{
			jQuery.playerModalClose();


			var body = jQuery('body');

			// hide all visible embed tags
			jQuery.playerModal.hiddenEmbeds = jQuery('object').css('visibility','hidden');

			// create and prepare background instance
			jQuery.playerModal.background = jQuery('<div id="modal_view"></div>').css({
														'opacity' : 0.0,
														'width'   : body.width() + 'px',
														'height'  : body.height() + 'px'
													}).appendTo(body);

			// available size of window
			var windim = {
						w : jQuery(window).width(),
						h : jQuery(window).height()
						};

			// extra margin (vertically/horizontally - full or inside frame)
			var margin = {
						wf : 2 * ( jQuery.playerModal.framesize + jQuery.playerModal.frameborder + jQuery.playerModal.framemargin ),
						wi : 2 * ( jQuery.playerModal.framesize + jQuery.playerModal.frameborder ),
						hf : 2 * ( jQuery.playerModal.framesize + jQuery.playerModal.frameborder + jQuery.playerModal.framemargin ) + jQuery.playerModal.controlbar,
						hi : 2 * ( jQuery.playerModal.framesize + jQuery.playerModal.frameborder ) + jQuery.playerModal.controlbar
						};

			// requested size of player including frame
			var playerdim = {
						l : 0,
						t : 0,
						w : width  + margin.wf,
						h : height + margin.hf
						};

			// check whether player fits in window or not
			var scale = Math.min(
								windim.w / playerdim.w,
								windim.h / playerdim.h
								);

			if ( ( scale > 0.3 ) && ( scale < 1.0 ) )
			{
				// player at requested size doesn't fit in current window
				width  = Math.round( scale * width );
				height = Math.round( scale * height );

				playerdim.w = width  + margin.wf;
				playerdim.h = height + margin.hf;
			}


			// final position of player/frame
			playerdim.l = ( windim.w - playerdim.w ) / 2;
			playerdim.t = ( windim.h - playerdim.h ) / 2;

			// create and prepare modal player instance
			jQuery.playerModal.box = jQuery('<div id="modal_player_box"><div id="modal_player_frame"><div id="modal_player">'+
											'</div></div><img class="closer' + ( jQuery.browser.msie ? ' closer-msie' : '' ) +
											'" title="Video schließen" src="images/modal/closer.png" /></div>').css({
												'opacity' : 0.0,
												'left'    : playerdim.l + 'px',
												'top'     : playerdim.t + 'px',
												'width'   : String( width  + margin.wi ) + 'px',
												'height'  : String( height + margin.hi ) + 'px'
											} ).appendTo(body);


			// support closing modal view
			jQuery.playerModal.background.click( jQuery.playerModalClose );
			jQuery('.closer',jQuery.playerModal.box).click( jQuery.playerModalClose );
			jQuery(document).keydown( function( event )
			{
				if ( event.which == 27 )
					jQuery.playerModalClose();
			} );

			jQuery.playerModal.isClosing = false;


			// start fading in background
			jQuery.playerModal.background.animate({opacity:0.7},'slow',function()
			{
				// create instance of video player
				var s = new SWFObject('mediaplayer/player.swf','modal_player_instance',
										width, height + jQuery.playerModal.controlbar, '9','#FFF');
				s.addParam('allowfullscreen','true');
				s.addParam('allowscriptaccess','always');
				s.addParam('autostart','true');
				s.addParam('wmode','opaque');
				s.addVariable('file','../' + movieURL);
				s.addVariable('image',imageURL);
				s.addVariable('controlbar','over');
				s.addVariable('fullscreen','true');
				s.addVariable('autostart','true');
				s.addVariable('frontcolor','ffffff');
				s.addVariable('backcolor','000000');
				s.write('modal_player');


				// on fading in background has finished fade player in next
				jQuery.playerModal.box.animate({opacity:1.0},'slow', jQuery.playerModalPlay );
			});
		},

		playerModalPlay : function()
		{
			var player = jQuery('#modal_player_instance').get( 0 );
			if ( player && player.sendEvent )
				player.sendEvent( 'PLAY', 'true' );
			else
				window.setTimeout( 'jQuery.playerModalPlay();', 100 );
		},

		playerModalClose : function()
		{
			if ( jQuery.playerModal.isClosing )
				return;

			jQuery.playerModal.isClosing = true;


			var player = jQuery('#modal_player_instance').get( 0 );
			if ( player && player.sendEvent )
				player.sendEvent( 'STOP', 'true' );

			if ( jQuery.playerModal.box )
				jQuery.playerModal.box.animate({opacity:0.0},'fast',function()
				{
					if ( jQuery.playerModal.box )
					{
						jQuery.playerModal.box.remove();
						jQuery.playerModal.box = null;
					}
				} );

			if ( jQuery.playerModal.background )
				jQuery.playerModal.background.animate({opacity:0.0},'fast',function()
				{
					if ( jQuery.playerModal.background )
					{
						jQuery.playerModal.background.remove();
						jQuery.playerModal.background = null;
					}

					jQuery.playerModalRevealObjects();
				} );

		},

		playerModalRevealObjects : function()
		{
			// reveal all previously hidden embed tags
			if ( jQuery.playerModal.hiddenEmbeds.length )
			{
				jQuery.playerModal.hiddenEmbeds.css('visibility','visible');
				jQuery.playerModal.hiddenEmbeds = [];
			}
		}
	} );


	jQuery('#video_popup a').click( function( event )
	{
		// prevent browser from opening linked movie file
		event.preventDefault();

		stopVideo();

		var anchor = jQuery(this);

		// read out movie and related preview snapshot
		var imageURL = jQuery('img.preview',anchor).attr('src');
		var movieURL = anchor.attr('href');

		// put provided image in a new container to get its original dimensions
		var image = new Image();
		image.src = imageURL;
		image = jQuery(image);
		image.hide().appendTo('body');

		// invoke modal player
		jQuery.playerModalOpen( imageURL, movieURL, image.width(), image.height() );

		image.remove();
	} );



	jQuery('#login-hook a.reveal').click(function(event)
	{
		event.preventDefault();
		jQuery('#login-form').slideDown('fast');
		jQuery('#login-hook a.reveal').fadeOut('fast');
		jQuery('#login-hook a.hide').fadeIn('fast');
		jQuery('#login-form #p_moretvnr').select().focus();
	});

	jQuery('#login-hook a.hide').click(function(event)
	{
		event.preventDefault();
		jQuery('#login-form').slideUp('fast');
		jQuery('#login-hook a.reveal').fadeIn('fast');
		jQuery('#login-hook a.hide').fadeOut('fast');
	});

	jQuery('.balloon-tip').each(function()
	{
		var tip  = jQuery(this);
		var hook = jQuery('<span class="balloon-tip-box"><span class="hook">?</span></span>').append(tip.clone(true));
		hook.hover( function()
		{
			this.tip = jQuery('.balloon-tip',jQuery(this)).clone(true).css('display','block').appendTo('body');
		}, function()
		{
			jQuery(this.tip).remove();
		} );
		tip.replaceWith(hook);
	});

});



function playerReady( obj )
{

	var name = null;

	var player = jQuery('#'+obj.id).get( 0 );
	if ( !player )
		return;

	if ( player._moreTVtag )
		// captured before
		return;


	var ascs = jQuery( player ).parents();

	for ( var i = 1; i < ascs.length; i++ )
		if ( jQuery( ascs[i] ).hasClass( 'slider_views' ) )
		{
			name = jQuery( ascs[i-1] ).attr( 'id' );
			break;
		}

	if ( !name )
		name = 'unknown-' + obj.id;

	player._moreTVtag = name;


	player.addModelListener( 'STATE', 'jQuery.onVideoPlayerStateChanged' );

}



function stopVideo()
{

	jQuery("embed").each(function()
	{
		if(jQuery(this).is(':visible')&&this.sendEvent)
			this.sendEvent('STOP','true');
	});

	jQuery("object").each(function()
	{
		if(jQuery(this).is(':visible')&&this.sendEvent)
			this.sendEvent('STOP','true');
	});

}




function checkData(params,id){
	//alert(params);

	jQuery.ajax({
		type: "POST",
   		url: 'includes/ajax.php',
   		data: params,
   		success: function(msg){


   			if(msg == 'SUCCESS'){
   				jQuery("#" + id + "Check").val("1");
   				jQuery("#" + id + "CheckDisplay").removeClass("check_false").addClass("check_true");
   			} else {
   				jQuery("#" + id + "Check").val("");
//   				jQuery("#" + id).val('');
   				jQuery("#" + id + "CheckDisplay").removeClass("check_true").addClass("check_false");
   			}

   		}
 	});
}


// tracks click on provided anchor node in GA
function trackExit( node )
{
	if ( node.href && node.href.length > 0 && node.href != '#' )
		pageTracker._trackPageview( node.href );
}
