/************************************************************************/
/************************************************************************/
/************************** JS-LightBox by R.L. **************************/
/************************************************************************/
/************************************************************************/

// Festellen ob es sich beim verwendeten Browser um den IE6 handelt.
var isIE6 = Prototype.Browser.IE && (navigator.appVersion.search(/MSIE\s*6/i)  != -1);

//Die aktuell ausgewählte box
var aktbox = null;

//Positioniert die aktuelle Box und den Hintergrund
function setCenterPos(){
	if(aktbox){
		var	eleW = aktbox.getWidth(), eleH = aktbox.getHeight(), viewDim = document.viewport.getDimensions(), 
			yOffset = window.pageYOffset || document.documentElement.scrollTop, 
			xOffset = window.pageXOffset || document.documentElement.scrollLeft;
			
		greyBack.setSize(viewDim.width+xOffset,viewDim.height+yOffset);
		aktbox.setStyle({left:((viewDim.width-eleW)/2)+xOffset+'px', top:((viewDim.height-eleH)/2)+yOffset+'px'});
	}
}

// Die graue Hintergrund wird erzeugt.
var greyBack = new Element('div').setStyle({position:'absolute', left:'0px', top:'0px', backgroundColor:'#000000', zIndex:'50', width:'100%', height:'100%'});
if (isIE6){
	var iframeGreyBack = new Element('iframe').writeAttribute('src','javascript:""').setStyle({position:'absolute', left:'0px', top:'0px', width:'100%', height:'100%', filter:'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'});
	greyBack.appendChild(iframeGreyBack);
}
Object.extend(greyBack,{
//Alphawert muss zwischen 0 und 1 liegen
greyBackAlphaValue : 0.7,

init: function(){
	greyBack.setOpacity(0);
	greyBack.hide();
	document.body.appendChild(greyBack);
},

setSize: function(gBW,gBH){
	greyBack.setStyle({width:gBW+'px',height:gBH+'px'});
},

fadeIn: function(){
	greyBack.setOpacity(0);
	greyBack.show();
	greyBack.fade({duration:0.5, from:0.0, to:this.greyBackAlphaValue});
},

fadeOut: function(){
	greyBack.fade({duration:0.5, from:this.greyBackAlphaValue, to:0.0});
}
});

// Die übergeben LightBox: 'box' wird sichbar gemacht.
// Bei erstmaligem Aufruf wird die Box zunächst zusammengebaut.
function showLightBox(box){
	box = $(box);
	if(box){
		if(!box.isLightBox){
			box.hide();
			Object.extend(box,new LightBox(box, arguments[1]||{}));
			setTimeout(function(){box.showBox();},250);
		}else{
			Object.extend(box.options, arguments[1]||{});
			box.showBox();
		}
	}
}

// Die LightBox-Klasse
var LightBox = Class.create({

	isLightBox : 1,
	idle : true,

// Initialization
// Die Dragbox wird gebaut
	initialize: function(box){
		this.box = box;
		
		/* Default Options */
		var options = {		
			// Der Aufrufer, falls angegeben
			caller: '',
			
			//Content-Background Image
			con_back : 'images/dragbox/back.jpg',
			
			//Border Images
			b_t_i : 'images/dragbox/o.gif',
			b_b_i : 'images/dragbox/u.gif',
			b_l_i : 'images/dragbox/l.gif',
			b_r_i : 'images/dragbox/r.gif',
			b_tl_i : 'images/dragbox/lo.gif',
			b_tr_i : 'images/dragbox/ro.gif',
			b_bl_i : 'images/dragbox/lu.gif',
			b_br_i : 'images/dragbox/ru.gif',
			
			//Border size
			b_t_h : 19,
			b_b_h : 19,
			b_r_w : 8,
			b_l_w : 8,
			b_c_l : 19,
			
			//Close-Button
			close_i : 'images/dragbox/close.gif',
			close_h : 11,
			close_w : 7,
			close_t : 19,
			close_r : 19,
			
			// Ein/Ausblend-Begleit-Funktionen
			onShow : null,
			onHide : null		
		};
		
		Object.extend(options, arguments[1]||{});
		this.options = options;
		
		var content = new Element('div'),
		conW = box.getWidth(),
		conH = box.getHeight(),
		borders = [
			new Element('div').setStyle({position:'absolute', top:'0px', left:options.b_c_l+'px', width:conW-(options.b_c_l-options.b_l_w)-(options.b_c_l-options.b_r_w)+'px', height:options.b_t_h+'px', backgroundImage:'url('+options.b_t_i+')'}),
			new Element('div').setStyle({position:'absolute', bottom:'0px', left:options.b_c_l+'px', width:conW-(options.b_c_l-options.b_l_w)-(options.b_c_l-options.b_r_w)+'px', height:options.b_b_h+'px', backgroundImage:'url('+options.b_b_i+')'}),
			new Element('div').setStyle({position:'absolute', top:options.b_c_l+'px', left:'0px', width:options.b_l_w+'px', height:conH-(options.b_c_l-options.b_t_h)-(options.b_c_l-options.b_b_h)+'px', backgroundImage:'url('+options.b_l_i+')'}),
			new Element('div').setStyle({position:'absolute', top:options.b_c_l+'px', right:'0px', width:options.b_r_w+'px', height:conH-(options.b_c_l-options.b_t_h)-(options.b_c_l-options.b_b_h)+'px', backgroundImage:'url('+options.b_r_i+')'}),
			new Element('div').setStyle({position:'absolute', top:'0px', left:'0px', width:options.b_c_l+'px', height:options.b_c_l+'px', backgroundImage:'url('+options.b_tl_i+')'}),
			new Element('div').setStyle({position:'absolute', top:'0px', right:'0px', width:options.b_c_l+'px', height:options.b_c_l+'px', backgroundImage:'url('+options.b_tr_i+')'}),
			new Element('div').setStyle({position:'absolute', bottom:'0px', left:'0px', width:options.b_c_l+'px', height:options.b_c_l+'px', backgroundImage:'url('+options.b_bl_i+')'}),
			new Element('div').setStyle({position:'absolute', bottom:'0px', right:'0px', width:options.b_c_l+'px', height:options.b_c_l+'px', backgroundImage:'url('+options.b_br_i+')'})
		],
		close = new Element('img').writeAttribute('src',options.close_i).setStyle({position:'absolute', width:options.close_w+'px', height:options.close_h+'px', right:options.close_r+'px', top:options.close_t+'px', cursor:'pointer', outline:'none'});
		
		close.observe('click',function(event){
			box.hideBox();
		});
		
		$A(box.childNodes).each(function(child){
			content.appendChild(box.removeChild(child));
		});
		
		$A(box.attributes).each(function(att){
			if ( (att.nodeName.toLowerCase() != 'id')&&(att.nodeName.toLowerCase() != 'style') ){
				content.setAttributeNode(box.removeAttributeNode(att));
			}
			
			if(att.nodeName.toLowerCase() == 'style'){
				content.writeAttribute('style',box.readAttribute('style'));
				box.writeAttribute('style','');
			}
		});
		box = $(box);
		
		if (isIE6){
			var iframe = new Element('iframe').writeAttribute('src','javascript:""').setStyle({position:'absolute', left:'0px', top:'0px', width:'100%', height:'100%', filter:'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'});
			box.appendChild(iframe);
			box.iframe = iframe;
		}
		
		content.setAttribute('dragbox_content',box.id);
		content.setStyle({position:'absolute', left:options.b_l_w+'px', top:options.b_t_h+'px',backgroundColor:'#FEFEFE',backgroundImage:'url('+options.con_back+')', backgroundPosition:'bottom', backgroundRepeat:'repeat-x'});
		
		box.setStyle({position:'absolute', left:'0px', top:'200px', width:options.b_l_w+conW+options.b_r_w+'px', height:options.b_t_h+conH+options.b_b_h+'px', zIndex:'100'});
		borders.each(function(border){
			box.appendChild(border);
		});
		
		box.appendChild(content);
		box.appendChild(close);
		
		content.show();
		this.content = content;
		this.borders = borders;
		
		this.box.hide();
	},

update: function(cgi,params){
	var box = this.box;
	box.idle = false;
	var visi = box.visible();
	
	if (!visi){
		box.setOpacity(0);	
		box.show();
	}

	var flag = false;
	
	new Ajax.Updater(this.box.content, cgi, {
		evalScripts : true,
		parameters : params,
		onComplete: function(){box.resize(box);  if (!visi){box.hide(); box.setOpacity(1);} box.idle = true;},
		onFailure : function(resp) {
			alert("Oops, there's been an error:"+resp);
		}
	});
	
	return false;
},

resize: function(box){
		var conW = box.content.getWidth(), conH = box.content.getHeight(), borders = box.borders, options = box.options;
		borders[0].setStyle({width:conW-(options.b_c_l-options.b_l_w)-(options.b_c_l-options.b_r_w)+'px'});
		borders[1].setStyle({width:conW-(options.b_c_l-options.b_l_w)-(options.b_c_l-options.b_r_w)+'px'});
		borders[2].setStyle({height:conH-(options.b_c_l-options.b_t_h)-(options.b_c_l-options.b_b_h)+'px'});
		borders[3].setStyle({height:conH-(options.b_c_l-options.b_t_h)-(options.b_c_l-options.b_b_h)+'px'});
		box.setStyle({width:options.b_l_w+conW+options.b_r_w+'px', height:options.b_t_h+conH+options.b_b_h+'px'});
		
		setCenterPos();
},

showBox: function(greyBackAlreadyThere){
	if(aktbox){
		if(!this.box.options.caller){this.box.options.caller = aktbox;}
		aktbox.hideBox(this.box);
	}else{
		aktbox = this.box;
		
		setCenterPos();
		
		if (this.options.onShow) {
			this.options.onShow();
			
		}
				
		var box = this.box;
		var aktInterval = setInterval(function(){
			if(box.idle){
				if(!greyBackAlreadyThere) greyBack.fadeIn();
				if(isIE6){
					//box.slideDown();
					box.show();					
					box.iframe.show();
				}else{
					box.setOpacity(0);
					box.show();
					box.fade({duration:0.5, from:0.0, to:1.0});
				}
				clearInterval(aktInterval);
			}
		},100);
	}

},

hideBox: function(boxToShowNext){
	if(isIE6){
		//this.box.slideUp();
		this.box.hide();
		this.box.iframe.hide();
	}else{
		this.box.fade({duration:0.5, from:1.0, to:0.0});
	}
	
	if(!boxToShowNext) greyBack.fadeOut();
	
	if (this.options.onHide) this.options.onHide();
	
	aktbox = null;
	
	if(boxToShowNext) setTimeout(function(){boxToShowNext.showBox(1);},750);
}

});

window.onload= function(){greyBack.init()};
window.onresize = window.onscroll =  function(){setCenterPos()};
