/**
 * @author p.stenzel
 */

if(!com) var com={};
if(!com.videotaxi) com.videotaxi={};
if(!com.videotaxi.boxes) com.videotaxi.boxes={};

com.videotaxi.boxes = {
	bgDiv_mod: "<div id='modalbg' style='display:none;'></div>",
	fgDiv_mod: "<div id='modalfg' style='display:none;'>"
		+"<div id='modalfg_content'></div>"
	+"</div>",
	fgDiv_ol: "<div id='olfg' style='display:none;'>"
		+"<div id='olfg_content'>Test</div>"
	+"</div>",
	gesamtbreite: 0,
	clicked: null,
	viewporthoehe: 0,
	insertModal: function()	{
		try {
			if ($('olfg') && $('olfg').visible()) {
				this.closeOverlay(true, "vert");
			}
			
			if (!$('modalbg')) {
				$('body').insert(this.bgDiv_mod, {
					position: 'top'
				});
				$('body').insert(this.fgDiv_mod, {
					position: 'top'
				});
				$('modalfg').addClassName("rounded_bottom");
			}
			return true;
		} catch(e)	{
			alert("insertModal: "+e.message);
			return false;
		}
	},
	toggleModal: function(ani)	{
		/**
		 * Wenn der Flash-Player gefunden wurde, muss er ausgeblendet werden, weil sich Flash sonst über alles andere legt, auch über das Overlay
		 */
		if($('trailer') && $('Klappe_Trailer_Player') && $('Klappe_Trailer_Player').visible())	{
			$('Klappe_Trailer_Player').hide();
		}
		if(ani)	{
			try {
				if ($('modalfg').visible()) {
//					alert('toggle out');
					new Effect.SlideUp('modalfg',{
						afterFinish: function()	{
							$('modalbg').toggle();
							if($('Klappe_Trailer_Player') && !$('Klappe_Trailer_Player').visible())	{
								var screenshots_visible = false;
								var els = $$('[rotate=deferred]');
								if (els.length > 0) {
									els.each(function(el)	{
										if(el.visible())	screenshots_visible=true;
									})
								}
								if(!screenshots_visible)	$('Klappe_Trailer_Player').show();
							}
							/**
							 * falls die Box für eine Traileransicht verwendet wurde, 
							 * sollte das Trailerobjekt gelöscht werden.
							 */
//							var trailer = $('Klappe_Trailer_Player');
							var trailer = $('modalfg_content').select('[id="Klappe_Trailer_Player!"]');
							if ($('Klappe_Trailer_Player') && trailer) {
								$('Klappe_Trailer_Player').hide();
								$('Klappe_Trailer_Player').remove();
							}
						}
					});
				}
				else {
//					alert('toggle on');
					$('modalbg').toggle();
					new Effect.SlideDown('modalfg',{
						afterFinish: function()	{
							if($('modalbg').getStyle('position')=="absolute")	{
								var tmpString = ''+$('body').getHeight()+'px';
								$('modalbg').setStyle({
									height: tmpString
								})
							}
						}
					});
				}
			}	catch(e)	{
				var tmp = "";
				for(var test in e)	{
					tmp+=test+": "+e[test]+"\n";
				}
				alert("Fehler:\n"+tmp);
			}
		}	else	{
//			alert('no ani');
			$('modalbg').toggle();
			$('modalfg').toggle();
			if($('Klappe_Trailer_Player') && !$('Klappe_Trailer_Player').visible())	{
				var screenshots_visible = false;
				var els = $$('[rotate=deferred]');
				if (els.length > 0) {
					els.each(function(el)	{
						if(el.visible())	screenshots_visible=true;
					})
				}
				if(!screenshots_visible)	$('Klappe_Trailer_Player').show();
			}
		}
	},
	insertOverlay: function(el,orientation)	{
		this.gesamtbreite = $('body').offsetWidth;
		this.viewporthoehe = document.viewport.getHeight();
		
		if(el==this.clicked)	return false;
		
		this.clicked = el;
		
		if ($('olfg')) $('olfg').remove();
		$('body').insert(this.fgDiv_ol, {
			position: 'top'
		});

		return true;
	},
	positionOverlay: function(orientation,width)	{
		var el = this.clicked;
		var oLeft = el.positionedOffset()[0];
		var oTop = el.positionedOffset()[1];
		var maxWidth =0;
		var links=0;
		var oben=0;
		if (oLeft < (this.gesamtbreite / 2)) {
			maxWidth = (oLeft + el.offsetWidth);
		}	else	{
			if ($('leftPane')) {
				maxWidth = (this.gesamtbreite - oLeft) + $('leftPane').getWidth();
			}	else	{
				maxWidth = (this.gesamtbreite - oLeft);
			}
		}
		if (width) {
			var tmpString =  width + "px";
			$('olfg_content').setStyle({
				width: tmpString
			});
		}
		else {
			var tmpString =  maxWidth + "px";
			$('olfg').setStyle({
				maxWidth: tmpString
			});
		}

		if (orientation == "vert") {
			if (oLeft < (this.gesamtbreite / 2)) {
				links = oLeft+1;
			}	else	{
				links = ((oLeft+el.offsetWidth)-1)-$('olfg').getWidth();
			}
			if ($(el.id).viewportOffset()[1] < (this.viewporthoehe / 2)) {
				$('olfg').addClassName('rounded_bottom');
				oben = (oTop + el.offsetHeight) - 1;
			}	else	{
				$('olfg').addClassName('rounded_top');
				oben = (oTop) - 1;
			}
		} else {
			if (oLeft < (this.gesamtbreite / 2)) {
				links = oLeft + el.offsetWidth;
				$('olfg').addClassName('rounded_right');
			}	else	{
				links = oLeft;
				$('olfg').addClassName('rounded_left');
			}
			oben = oTop;
		}
		var topString = oben+'px';
		var leftString = (links -1)+'px';
		$('olfg').setStyle({
			top: topString,
			left: leftString
		});	
	},
	openOverlay: function(ani,orientation,width)	{
		this.positionOverlay(orientation,width);
		var duration = 0.25;
		var element = $('olfg').cleanWhitespace();
		if (orientation == "vert") {
			if (ani) {
				if ($(this.clicked.id).viewportOffset()[1] < (this.viewporthoehe / 2)) {
					new Effect.SlideDown('olfg');
				}	else	{
					var hoehe = element.getHeight();
					element.setStyle({
						height: "0px"
					});
					element.toggle();
					new Effect.Parallel([new Effect.Move(element, {
						sync: true,
						y: (hoehe * -1),
						mode: 'relative'
					}), new Effect.Morph(element, {
						sync: true,
						style: {
							height: hoehe + 'px'
						}
					})], {
						duration: duration
					})
				}
			}
		}	else	{
			if (ani) {
				if (this.clicked.offsetLeft < (this.gesamtbreite / 2)) {
					var elementDimensions = element.getDimensions();
					return new Effect.Scale(element, 100, Object.extend({
						scaleContent: false,
						scaleY: false,
						scaleFrom: window.opera ? 0 : 1,
						scaleMode: {
							originalHeight: elementDimensions.height,
							originalWidth: elementDimensions.width
						},
						restoreAfterFinish: true,
						afterSetup: function(effect){
							effect.element.makePositioned();
							effect.element.down().makePositioned();
							if (window.opera) 
								effect.element.setStyle({
									left: ''
								});
							var tmpString = elementDimensions.height+"px";
							effect.element.makeClipping().setStyle({
								width: '0px',
								height: tmpString
							}).show();
						},						
						afterUpdateInternal: function(effect){
							var tmpString = (effect.dims[1] - effect.element.clientWidth) + 'px';
							effect.element.down().setStyle({
								right: tmpString
							});
						},
						afterFinishInternal: function(effect){
							effect.element.undoClipping().undoPositioned();
							effect.element.down().undoPositioned();
						}
					}, arguments[1] ||
					{}));
				}	else	{
					var breite = element.getWidth();
					var hoehe = element.getHeight();
					var hoeheString = hoehe+"px";
					element.setStyle({
						width: "0px",
						height: hoehe
					});
					element.toggle();
					var breiteString =  breite + 'px';
					new Effect.Parallel([new Effect.Move(element, {
						sync: true,
						x: (breite * -1),
						mode: 'relative'
					}), new Effect.Morph(element, {
						sync: true,
						style: {
							width: breiteString
						}
					})])
				}
			}
		}
	},
	closeOverlay: function(ani,orientation)	{
		var duration = 0.25;
		if(ani)	{
			if (orientation == "vert") {
				if(!this.clicked){
					new Effect.SlideUp('olfg',{
						duration: duration
					});					
				}else{
					if ($(this.clicked.id).viewportOffset()[1] < (this.viewporthoehe / 2)) {
						new Effect.SlideUp('olfg',{
							duration: duration
						});
					}	else	{
						var element = $('olfg');
						var hoehe = element.getHeight();
						new Effect.Parallel([new Effect.Move(element, {
							sync: true,
							y: hoehe,
							mode: 'relative'
						}), new Effect.Morph(element, {
							sync: true,
							style: {
								height: '0px'
							},
							afterFinish: function(){
								element.toggle();
							}
						})], {
							duration: duration
						})
					}
				}
			}	else	{
				if (this.clicked.offsetLeft < (this.gesamtbreite / 2)) {
					element = $('olfg');
					var breite = element.getWidth();
					var hoehe = element.getHeight();
					var hoeheString = hoehe + "px";
					new Effect.Morph(element, {
						beforeStart: function()	{
							$('olfg_content').setStyle({
								overflow: 'hidden',
								height: hoeheString
							});
						},
						style: {
							width: '0px'
						},
						duration: duration,
						afterFinish: function()	{
							element.toggle();
						}
					})
				}	else	{
					var element = $('olfg');
					var breite = element.getWidth();
					new Effect.Parallel([new Effect.Move(element, {
						sync: true,
						x: breite,
						mode: 'relative'
					}), new Effect.Morph(element, {
						sync: true,
						style: {
							width: '0px'
						},
						afterFinish: function()	{
							element.toggle();
						}
					})],{
						duration: duration
					})
				}
			}
		}	else	{
			$('olfg').remove();
		}
		this.clicked = null;
		if($('olfg_einleitung'))	$('olfg_einleitung').stopObserving('click');
	}
};

