/*
 * jQuery Dialog v1.0
 * http://jquerydialog.narod2.ru/mydialog.htm
 *
 * Copyright (c) 2010 Konstantin Khudyakov
 * Dual licensed under the MIT and GPL licenses.
 *
 * Date: 2010-01-29
 *
 * Required jQuery Libraries:
 * jquery.js         (v1.3.2)
 */
(function($){
var ar = new Array();
var n;
$.fn.myDialog = function(opt)
{
if (this.length != 0)
{
	var rsfun, drfun, d, pr, initD;
	drfun = { // You can delete this item if you don't use draggable
		addevn : function()
		{
			var dlmove; var i;
			tl.mousedown(function (e)
			{
				pr = $(this).parent();
				d = pr.find('.thisdl');
				getzI(pr);
				sT = fix ? $(window).scrollTop() : 0;
				sL = fix ? $(window).scrollLeft() : 0;
				tp0 = pr.position().top - sT;
				lt0 = pr.position().left - sL;
				eY = e.pageY;
				eX = e.pageX;
				dH = !fix ? $(document).height() : $(window).height();
				dW = !fix ? $(document).width() : $(window).width();
				i = false;
				dlmove = function (e)
				{
					if (!i && drhide) 
					{
						d.hide();
						pr.attr('class', 'parentdl parendlMv');
						i = true;
					}
					tp1 = e.pageY - eY + tp0 >= 0 ? e.pageY - eY + tp0 <= dH - pr.outerHeight() ? e.pageY - eY + tp0 : dH - pr.outerHeight() : 0;
					lt1 = e.pageX - eX + lt0 >= 0 ? e.pageX - eX + lt0 <= dW - pr.outerWidth() ? e.pageX - eX + lt0 : dW - pr.outerWidth() : 0;
					pr.css('top', tp1 + 'px');
					pr.css('left', lt1 + 'px');
				}
				$().mousemove(dlmove);
				return false;
			});
			$().mouseup(function(){
				$().unbind('mousemove', dlmove);
				$('body').css('cursor', 'auto');
				if (d && drhide)
				{
					d.show();
					pr.attr('class', 'parentdl');
				}
			});
		}
	}
	rsfun = { // You can delete this item if you don't use resizable
		addevn : function()
		{
			pr.append('<div class="n-resizedl"></div>'); 
			pr.append('<div class="e-resizedl"></div>'); 
			pr.append('<div class="s-resizedl"></div>'); 
			pr.append('<div class="w-resizedl"></div>');
			pr.append('<div class="nwresizedl"></div>'); 
			pr.append('<div class="neresizedl"></div>'); 
			pr.append('<div class="seresizedl"></div>'); 
			pr.append('<div class="swresizedl"></div>');
			var dlresize;
			function resize(obj, n1, n2, mH, mW, cr)
			{
				var ht1;
				var wt1;
				var tp1;
				var lt1;
				var i;
				obj.mousedown(function (e) 
				{
					pr = $(this).parent();
					getzI(pr);
					tl = pr.find('div.titledl');
					d = pr.find('.thisdl');
					sT = fix ? $(window).scrollTop() : 0;
					sL = fix ? $(window).scrollLeft() : 0;
					tp0 = pr.position().top - sT;
					lt0 = pr.position().left - sL;
					if (fix)
					{
						pr.css('top', tp0 + 'px');
						pr.css('left', lt0 + 'px');
					}
					ht0 = pr.height();
					wt0 = pr.width();
					tp2 = tp0 + ht0;
					lt2 = lt0 + wt0;
					eX = e.pageX;
					eY = e.pageY;
					$('body').css('cursor', cr);
					tl.css('cursor', cr);
					i = false;
					dlresize = function (e)
					{
						if (!i && drhide) 
						{
							d.hide();
							pr.attr('class', 'parentdl parendlMv');
							i = true;
						}
						if (n1 == 'n' || n2 == 'n')	
						{
							tp1 = ((- e.pageY + eY + ht0) >= mH) ? (e.pageY - eY + tp0) : tp2 - mH;
							ht1 = ((- e.pageY + eY + ht0) >= mH) ? (- e.pageY + eY + ht0) : mH;
						}
						if (n1 == 's' || n2 == 's')	ht1 = ((e.pageY - eY + ht0) >= mH) ? (e.pageY - eY + ht0) : mH;
						if (n1 == 'e' || n2 == 'e')	wt1 = ((e.pageX - eX + wt0) >= mW) ? (e.pageX - eX + wt0) : mW;
						if (n1 == 'w' || n2 == 'w')
						{
							lt1 = (- e.pageX + eX + wt0 >= mW) ? (e.pageX - eX + lt0) : lt2 - mW;
							wt1 = ((- e.pageX + eX + wt0) >= mW) ? (- e.pageX + eX + wt0) : mW;
						}
						if (ht1)
						{
							d.height(ht1 - 20); //////////////////////////////////////////////??????????????
							pr.height(ht1);
						}
						if (wt1) 
						{
							if (stcl) pr.find(stcl).width(d.width() + stwt);
							d.width(wt1 - 22); ///////////////////////////////////////////////????????????
							tl.width(wt1);
							pr.width(wt1);
						}
						if (tp1) pr.css('top', tp1 + 'px');
						if (lt1) pr.css('left', lt1 + 'px');
					}
					$().mousemove(dlresize);
					return false;
				});
			}
			resize(pr.find('.n-resizedl'), 'n', '', mH, mW, 'n-resize');
			resize(pr.find('.s-resizedl'), 's', '', mH, mW, 's-resize');
			resize(pr.find('.e-resizedl'), 'e', '', mH, mW, 'e-resize');
			resize(pr.find('.w-resizedl'),  'w', '', mH, mW, 'w-resize');
			resize(pr.find('.nwresizedl'),  'n', 'w', mH, mW, 'nw-resize');
			resize(pr.find('.neresizedl'),  'n', 'e', mH, mW, 'ne-resize');
			resize(pr.find('.swresizedl'),  's', 'w', mH, mW, 'sw-resize');
			resize(pr.find('.seresizedl'),  's', 'e', mH, mW, 'se-resize');
			$().mouseup(function()
			{
				$().unbind('mousemove', dlresize); 
				$('body').css('cursor', 'auto'); 
				$('div.titledlMv').css('cursor', cr); 
				$('div.titledlDMv').css('cursor', 'auto');
				if (d && drhide)
				{
					d.show();
					pr.attr('class', 'parentdl');
				}
			});
		}
	};

	if(!opt) opt = {};
	if (this.parents('div.parentdl').length > 0)
	{
		var pr = this.parents('div.parentdl');
		var n = pr.attr('id').substr(4);
		var d = pr.find('.thisdl');
		var tl = pr.find('.titledl');
		initD = true;
	}
	
	var getzI = function(obj)
	{
		var zIn = parseInt(obj.css('z-index'));
		var ind = $('.parentdl').index(obj);
		$('.parentdl').each(function()
		{
			var tm = parseInt($(this).css('z-index'));
			if (tm >= zIn && $('.parentdl').index($(this)) != ind) zIn = tm + 2;
		});
		obj.css('z-index', zIn);
		var n = obj.attr('id').substr(4);
		$('#modalDl' + n).css('z-index', zIn - 1);
	}

	switch (opt) { 
	case 'open':
		if (initD)
		{
			getzI(pr);
			$('#modalDl' + n).show();
			pr.fadeIn(); 
		}
	break 
	case 'close':
		if (initD)
		{
			$('#modalDl' + n).hide();
			pr.fadeOut();
		}
	break 
	case 'destroy':
		if (initD)
		{
			$('#modalDl' + n).remove();
			pr.fadeOut(function (){$(this).remove()}); 
		}
	break
	default:
		var drbl = opt.draggable == 'false' ? false : true;
		var rsbl = opt.resizable  == 'false' ? false : true;
		var mH = opt.minHeight ? opt.minHeight : 100;
		var mW = opt.minWidth ? opt.minWidth : 200;
		var cr = opt.cursor ? opt.cursor : 'move';
		var Ht = opt.height ? opt.height : 'auto';
		var Wt = opt.width ? opt.width : 300;
		var zI = opt.zIndex ? opt.zIndex : 2000;
		var aO = opt.autoOpen == 'false' ? false : true;
		var mdl = opt.modal;
		var fix = opt.fixed;
		var stcl = opt.stretch ? opt.stretch[0] : false;
		var stwt = opt.stretch && opt.stretch[1] ? opt.stretch[1] : -50;
		var drhide = opt.draghide == 'false' ? false : true;
		var pos = opt.position ? opt.position : ['center'];
		var topbut = opt.topbuttons ? opt.topbuttons : {
			'[x]' : function()
			{
				$(this).myDialog('close');
				return false;
			}
		};
		
		var autH = (Ht == 'auto') ? true : false;
		if (Ht == 'auto') Ht = 100;
		var autW = (Wt == 'auto') ? true : false;
		if (Wt == 'auto') Wt = 100;
		
		if (!drfun) drbl = false;
		if (!rsfun) rsbl = false;
		if ($.browser.msie && $.browser.version < 7) fix = false;
		if (opt.height && Ht < mH) mH = Ht;
		if (opt.width && Wt < mW) mW = Wt;
		if (opt.minHeight && Ht < mH) Ht = mH;
		if (opt.minWidth && Wt < mW) Wt = mW;
		
		if (!initD)
		{
			for (j = 0; j < this.length; j++)
			{
				n = ar.length;
				ar[n] = this.eq(j);
				$('body').append($('<div id="iddl' + n + '" class="parentdl" style="position:absolute; height:'+ Ht +'px; width:'+ Wt +'px; z-index:' + zI + '"></div>').append(this.eq(j)));
				if (mdl)
					$('body').append($('<div id="modalDl'+ n +'" class="modalDl" style="width:' + $(document).width() + 'px; height:' + $(document).height() + 'px; z-index:' + (zI - 1) + '; display:none; overflow:hidden; position:absolute; top:0; left:0;"></div>'));
			}
			pr = this.parent();
			this.attr('class', this.attr('class') + ' thisdl');
			this.css({
				'display' : 'block',
				'height': (Ht - 20)  + 'px', //////////////////////????????????????
				'width' : (Wt - 22)  + 'px' ///////////////////////?????????????????
			});
			if ($.browser.mozilla) pr.css('overflow','auto');
			if (fix) pr.css('position','fixed');
			if (autH) 
			{
				pr.css('height', function()
				{
					Ht = $(this).find('.thisdl')[0].scrollHeight + 20; ///////////////////////?????????????????
					if (Ht < mH) Ht = mH;
					$(this).find('.thisdl').css('height', (Ht - 20) + 'px'); ///////////////////////?????????????????
					return Ht + 'px';
				});
			}
			if (autW)
			{
				pr.css('width', function()
				{
					Wt = $(this).find('.thisdl')[0].scrollWidth + 22; ///////////////////////?????????????????
					if (Wt < mW) Wt = mW;
					$(this).find('.thisdl').css('width', (Wt - 22) + 'px'); ///////////////////////?????????????????
					return Wt + 'px';
				});
			}
			for (j = 0; j < this.length; j++)
				pr.eq(j).append($('<div class="titledl titledlDMv" style="width:' + Wt + 'px"><span>' + this.eq(j).attr('title') + '</span></div>'));
			tl = pr.find('.titledl');
			var buts = [];
			j = 0;
			$.each(topbut, function(key, value) { 
				tl.append('<a class="topbuttonsdl numbutdl' +j + '" href="">'+ key +'</a>');
				buts[j] = tl.find('.numbutdl' + j);
				buts[j].click(value);
				j++;
			});
			this.removeAttr('title');
			pr.mousedown(function (e){getzI($(this));});
			if (rsbl) rsfun.addevn(); 
			if (drbl)
			{
				tl.css('cursor', cr);
				tl.attr('class', 'titledl titledlMv');
				drfun.addevn();
			}
			pr.find('*').attr('unselectable', 'on');
			this.removeAttr('unselectable');
			this.find('*').removeAttr('unselectable');
			if (stcl) pr.find(stcl).css('width' , (this.width() + stwt) + 'px');
		}
		pr.hide();
		var wH = $(window).height();
		var wW = $(window).width();
		var ns = this.length;
		for (j = 0; j < ns; j++)
		{
			var pH = pr.eq(j).outerHeight();
			var pW = pr.eq(j).outerWidth();
			pr.eq(j).css('top', parseInt(wH/2 - pH/2 + j*15) + 'px');
			pr.eq(j).css('left', parseInt(wW/2 - pW/2  + j*15) + 'px');
			if (pos.top) pr.eq(j).css('top',  (parseInt(pos.top) + j*15) + 'px');
			if (pos.left) pr.eq(j).css('left',  (parseInt(pos.left) + j*15) + 'px');
			if (pos.bottom)
			{
				var tp = !fix ? (wH - pH - parseInt(pos.bottom) - (ns - j)*15) + 'px' : '';
				var bt = !fix ?  '' : (parseInt(pos.bottom) + (ns - j)*15) + 'px';
				pr.eq(j).css({'top' : tp, 'bottom' : bt});
			}
			if (pos.right) 
			{
				var lt = !fix ? (wW - pW - parseInt(pos.right) -  (ns - j)*15) + 'px' : '';
				var rt = !fix ?  '' : (parseInt(pos.right) + (ns - j)*15) + 'px';
				pr.eq(j).css({'left': lt, 'right' : rt});
			}
			if ($.inArray('bottom', pos) != -1) pr.eq(j).css('top', (wH - pH - (ns - j)*15) + 'px');
			if ($.inArray('right', pos) != -1) pr.eq(j).css('left', (wW - pW - (ns - j)*15) + 'px');
			
			if (pos[0] && (pos[0] == 'top' || pos[0] == 'left')) pr.eq(j).css(pos[0],  (j*15) + 'px');
			if (pos[1] && (pos[1] == 'top' || pos[1] == 'left')) pr.eq(j).css(pos[1],  (j*15) + 'px');
			if (!fix) pr.eq(j).css({
				'top': (parseInt(pr.eq(j).css('top')) + $(window).scrollTop()) + 'px',
				'left': (parseInt(pr.eq(j).css('left')) + $(window).scrollLeft()) + 'px'
			});
		}
		if(aO) this.myDialog('open');
	break
	}
}
}
})(jQuery);
