
$(document).ready(function() {
	$('.DivDialog').each(function() {
		new DivDialog(this);
	});
});

function DivDialog(containerSelector, options) {

	var container = $(containerSelector);

	var default_options = {
		show: false,
		position: 'inline',
		positionOptions: {},
		draggable: false,
		showTriggerSelector: false,
		positionSelector: false,
		beforeShow: false
//		trackFieldSelector: false,
//		updateDialogs: false
	};
	
	container.hide();
	
	if (typeof options == 'undefined')
		options = default_options;
	else {
		for (var op in default_options)
			if(typeof options[op] == 'undefined')
				options[op] = default_options[op];
	}
	
	if ((options.position != 'inline' || options.draggable))
		container.css({position: 'absolute', zIndex: '100'});
	
	if (options.show)
	{
		if (options.positionSelector)
			show($(options.positionSelector)[0]);
		else
			show();
	}
	
	if (options.draggable)
		container.draggable({
			cursor: 'move',
			cancel: '.DragPrevent, a, p, input, textarea, button, select, option, img'
		});
	
	if (options.showTriggerSelector)
		$(options.showTriggerSelector).click(function(event) {
			event.preventDefault();
			show(this); 
		});
	
	container.find('.CloseTrigger').each(function() {
		$(this).click( function() { hide(); });
	});
	
	this.show = show;
	function show(trigger)
	{
		if (options.beforeShow)
			options.beforeShow(trigger);

		if ($.browser.msie)
			container.show();
		else
			container.fadeIn();
		
		if (options.position == 'center')
		{
			var w = $(window);
			
			container.css('top', (w.scrollTop() + (w.height() - container.height()) / 2) + 'px');
			container.css('left', (w.scrollLeft() + (w.width() - container.width()) / 2) + 'px');
		}
		else if ((options.position == 'trigger' || options.position == 'element') && trigger)
		{
			var w = $(window);
			var t = $(trigger);
			var tp = getElementPosition(trigger);
			
			var left = tp.left + (t.width() - container.width()) / 2 + (options.positionOptions.left ? options.positionOptions.left : 0);

			if (left < 0)
				left = tp.left;
			
			if (left + container.width() > w.width())
				left = w.width() - container.width();
			
			container.css('top', (tp.top + (options.positionOptions.top ? options.positionOptions.top : 0) + t.height()) + 'px');
			container.css('left', left + 'px');
		}
	}
	
	this.hide = hide;
	function hide() {
		if ($.browser.msie)
			container.slideUp();
		else
			container.fadeOut();
	}
}
