/**
 * jQuery.extend 0.1.0
 *
 * Copyright (c) 2008 Pan Xuepeng
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-08-31 $
 * $Last: 2008-11-18 $
 */
 
(function($){
	$.dialog = $.dialog || {};
	$.dialog.ids = [];
	$.dialog.titles = [];
	$.dialog.id = 0; 
	$.dialog.current = '';
	$.dialog.self = null;
	$.dialog.offsetClick = {width:0,height:0,maxY:0,startX:0,startY:0,endX:0,endY:0};
	$.dialog.frame = '<table class="dialog" id="dialog{id}" width="350" border="0" align="center" cellpadding="0" '
		+ 'cellspacing="0" style="z-index:2010;background-color:#FFFFFF;cursor:default;position:fixed !important;position:absolute;left:100px;top:100px;border:1px solid #BFBFBF;">'
		+ '<tr><td id="dialog-handle{id}" height="25" style="background:url(style/default/bg_box_hand.gif); '
		+ 'border-bottom:1px solid #E0E0E0;padding:2px;font-weight:bold;line-height:24px;cursor:move;">'
		+ '<span style="float:left; font-size:12px;margin-left:3px;" id="dialog-title">{title}</span>'
		+ '<a style="display:block;float:right;width:16px; height:16px;text-align:center;font-size:16px;cursor:pointer;'
		+ 'background:url(style/default/icn_closew.gif)" id="dialog-close{id}"></a></td></tr>'
		+ '<tr><td height="200" style="padding:10px; padding-bottom:15px;" id="dialog-content">{content}</td></tr>'
		+ '</table>';
	
	
	$.dialog.close = function(){
		$.dialog.self.hide();
		$('div#dialog-shadow-left, div#dialog-shadow, div#alphaDiv').hide();
	};
	
	$.dialog.move = function(e, dialog){
		e = e || event;
		if (e.pageX != null){
			var x = $.dialog.offsetClick;
			var pos = {left:e.pageX - x.width, top:e.pageY - x.height};
			
			if (jQuery.browser.mozilla){
				pos.top -= $(document).scrollTop();
			}
			
			if (pos.top <= 0 ){
				pos.top = 0;
			}
			
			var mh = $(window).height() - 30;
			if (pos.top >=  mh){
				pos.top = mh;
			}
			
			dialog.css(pos);
			$('div#dialog-shadow-left').css({left:pos.left -2, top:pos.top - 2});
			$('div#dialog-shadow').css(pos);
			
		} else {
			return false;
		}
	};
	
	$.dialog.getPosition = function(dialog, position){
		var top, left;
		
		var h1 = $(window).height();
		var h2 = dialog.height();
		if (h2 == 0) h2 = 260;
		if (h1 > h2){
			top = h1 - h2;
		}
		
		var w1 = $(window).width();
		var w2 = dialog.width();
		if (w2 == 0) w2 = 348;
		
		if (w1 > w2){
			left = w1 - w2;
		}

		if ( position == 'center'){
			left = left / 2;
			top = top / 2;
		}
		
		if ($.browser.msie){
			top += $(document).scrollTop();
		}
		
		if ($.browser.mozilla && $.browser.version.substr(0, 3) == '1.8'){
			left = 0;
		}else if ($.browser.msie && $.browser.version == '8.0'){
			
			
		}
		
		return {top:top, left:left}
	};
	
	$.dialog.box = function(title, content, position, js){
		$("body").css('position','static');
		var re = /^url:/i, dialog, top=0, left=0;
		
		if (js)	{
			$.getScript(js);
		}
		
		if (typeof content == 'string' && re.test(content)){
			var url = content.substr(4);
			content = '<b>'+Lang.Loading+'</b>';
			$.get(url, function(data, state){
				$("#dialog-content").html(data);
				
				var inputTexts = $.dialog.self.find(":text");
				if (inputTexts.length > 0){
					inputTexts.get(0).focus();
				}
			});
		}
		
		position = position || 'center';
		
		if (typeof position == 'object'){
			var id = $(position).attr('dialogid');
			if (id && $('#'+id).css('display')!='none'){
				return ;
			}
		}
		
		if ($.dialog.self) {
			$.dialog.close();
		}
		
		if ( typeof position == 'string' ){
			dialog = $.dialog.setBox(title, content);
			var pos = $.dialog.getPosition(dialog, position);
			
			dialog.css({left:pos.left, top:pos.top}).attr('position', position).show();
			
			if (position == 'center'){
				$.dialog.setAlphaDiv('alphaDiv', 2001, 0.5);
			}
			
		} else if (typeof position == 'object'){
			var obj = $(position);
			var offset = obj.offset();
			top = offset.top + obj.height()+1;
			left = offset.left;
			var d = {left:left, top:top};
			
			dialog = obj.attr('dialogid')? $('#'+obj.attr('dialogid')): $.dialog.setBox(title, content, js);
			var leftWidth = $(document).width() - d.left;
			
			if (leftWidth < dialog.width()){
				d.left = $(document).width() - dialog.width() - 2;
			}
				
			if (obj.attr('dialogid')){
				dialog.css(d).show();
			} else {
				var width=0;
				width = Math.floor(dialog.height() * 1.5);
				
				if (dialog.width() < width && width < $(window).width()){
					d.width = width;
				}
				
				dialog.css(d).attr('position', 'Object').show();
				obj.attr('dialogid', $.dialog.current);
			}
			
		}
		
		$.dialog.self = dialog;
		$.dialog.shadow(dialog);
		
	};
	
	$.dialog.setBox = function(title, content){
		var dialog, id=$.dialog.id, html='';
		$.dialog.current ='dialog'+ id;

		$.dialog.id ++;
		$.dialog.ids[$.dialog.current] = true;
		if ($.dialog.titles[title]){
			//$('#dialog-title').html(title);
			//$('#dialog-content').html(content);
			dialog = $.dialog.self = $.dialog.titles[title];
		} else {
			html = $.dialog.frame.replace('{title}', title);
			html = html.replace('{content}', content);
			html = html.replace(/\{id\}/ig, id);
			dialog = $(html);
			dialog.hide().appendTo("body");
			$.dialog.titles[title] = dialog;
			$("#dialog-close"+id).click(function(){
				$('#dialog'+ id +', div#dialog-shadow-left, div#dialog-shadow, div#alphaDiv').hide();
			});
			
			
			$("#dialog-handle"+id).mousedown(function(e){
				if (jQuery.browser.mozilla && $.browser.version.substr(0, 3) == '1.8'){
					return false;
				}
		
				e = e || event;
				var d = $(this).parents('table.dialog');
				var offset = d.offset();
				var maxX =$(window).width() - d.width() - 8;
				$.dialog.offsetClick = {width: e.pageX - offset.left, height:e.pageY - offset.top, maxX:maxX, startX:offset.left, startY:offset.top};
				
				$(document).mousemove(function(e){					
					$.dialog.move(e, d);
				}).bind("contextmenu",function(){return false;})
				.bind("selectstart",function(){return false;})
				.bind("paste",function(){return false;});
				
				$(document).mouseup(function(e){
					var pos = $.dialog.offsetClick;

					$(document).unbind('mousemove').unbind('contextmenu').unbind('selectstart').unbind('paste');
					return false;
				});
				
			});
			

		}
		
		return dialog;
	};
	
	
	$.dialog.setAlphaDiv = function(id, zindex, opacity, bgcolor){
		if ($.browser.msie && $.browser.version == '8.0'){
			return true;
		}
		
		var div = $('div#'+id);
		if (div.length > 0){
			return div.show();
		}
		
		bgcolor = bgcolor || '#FFFFFF';
		
		var s = 'z-index:'+zindex+';background-color:'+bgcolor+';cursor:default;position:absolute;margin:0 auto;';
		s += 'width:100%;height:100%;top:0px;left:0px;';
		$('<div id="'+id+'" style="'+s+'"></div>').css('opacity', opacity).appendTo('body');
		
	};
	
	$.dialog.shadow = function(dialog){
		return false;
		if ($.browser.mozilla && $.browser.version.substr(0, 3) == '1.8'){
			return true;
		}
		var pos = $.dialog.getPosition(dialog, 'center');
		var left = dialog.offset().left;
		var top = dialog.offset().top;
		var width = dialog.width();
		var height = dialog.height();
		
		var d={left:left, top:top, width:width+7, height:height+7};
		var dleft={left:left-2, top:top-2, width:width+4, height:height+4};
		var shadow = $('div#dialog-shadow');
		var shadowLeft = $('div#dialog-shadow-left');

		if (shadow.size() > 0){
			shadowLeft.css(dleft).show();
			shadow.css(d).show();
		} else {
			shadow = '<div id="dialog-shadow" style="position:fixed !important;position:absolute;z-index:2002;display:none;'
				+'background:url(style/default/shadow.png);background-repeat: no-repeat;background-position: right bottom">'
				+'</div>';
			$(shadow).appendTo("body").css(d).show();

			shadow = '<div id="dialog-shadow-left" style="position:fixed !important;position:absolute;z-index:2000;display:none;'
				+'background:url(style/default/shadow.png);background-repeat: no-repeat;">'
				+'</div>';
			$(shadow).appendTo("body").css(dleft).show();

		}
	};
})(jQuery);