/*
**	Simple modal lightBox Javascript class
**
**	(c) 2010 Mikoon Webservices
*/

/*
**	Usage:
**
**	mybox = new lBox('html content', {options});
**	mybox.open();
*/

var lBox = new Class({
	
	Implements: Options,
	
	options: {
		opacity: 0.9,
		bgcolor: '#ffffff',
		duration: 500,
		delay: 1000
    },
	
	markup: '<div id="lbox-overlay"></div><div id="lbox-wrapper"><div id="lbox-container"></div><div id="lbox-nav"><div id="lbox-close"></div></div></div>',
	
	initialize: function(in_content, options){
		this.setOptions(options);
		this.append(document.body, this.markup);
		$('lbox-overlay').setStyles({'opacity': 0, 'display': 'block', 'background-color': this.options.bgcolor});
		$('lbox-wrapper').setStyles({'opacity': 0, 'display': 'block'});
		if(in_content) this.set_content(in_content);
		this.setup();
	},
	
	append: function(el, html){
        if(el.insertAdjacentHTML){
            el.insertAdjacentHTML('BeforeEnd', html);
        } else if(el.lastChild){
            var range = el.ownerDocument.createRange();
            range.setStartAfter(el.lastChild);
            var frag = range.createContextualFragment(html);
            el.appendChild(frag);
        } else {
            el.innerHTML = html;
        }
    },
	
	setup: function(){
		var closefunction = this.close.bind(this);
		$('lbox-close').addEvent('click', closefunction);
		window.fireEvent('lbox-initialized');
	},
	
	set_content: function(in_content){
		$('lbox-container').set('html', in_content);
		window.fireEvent('lbox-contentset');
	},
	
	open: function(){
		var options = this.options;
		if($('lbox-overlay').fx) $('lbox-overlay').fx.cancel();
		$('lbox-overlay').fx = new Fx.Tween($('lbox-overlay'), {duration: options.duration}).start('opacity', $('lbox-overlay').getStyle('opacity'), this.options.opacity);
		(function(){ 
			if($('lbox-wrapper').fx) $('lbox-wrapper').fx.cancel();
			$('lbox-wrapper').fx = new Fx.Tween($('lbox-wrapper'), {duration: options.duration}).start('opacity', $('lbox-wrapper').getStyle('opacity'), 1); 
		}).delay(this.options.delay);
		
		$('body').setStyle('overflow', 'hidden');
		$$('html').setStyle('overflow', 'hidden');
		$('lbox-wrapper').scrollTo(0);
		
		window.fireEvent('lbox-opened');
	},
	
	close: function(){
		var options = this.options;
		if($('lbox-overlay').fx) $('lbox-overlay').fx.cancel();
		$('lbox-overlay').fx = new Fx.Tween($('lbox-overlay'), {duration: options.duration}).start('opacity', $('lbox-overlay').getStyle('opacity'), 0);
		if($('lbox-wrapper').fx) $('lbox-wrapper').fx.cancel();
		$('lbox-wrapper').fx = new Fx.Tween($('lbox-wrapper'), {duration: options.duration}).start('opacity', $('lbox-wrapper').getStyle('opacity'), 0); 
		
		$$('html').setStyle('overflow', 'auto');
		$('body').setStyle('overflow', 'auto');
		window.scrollTo(0,0);
	}
	
});
