/*window*/
function grd_rand_string(len){
		var str =  ['a','b','c','d','e','f','h','j','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
		var hash = '';
		for(i=0;i<len;i++){
			var r = str[Math.ceil(Math.random()*100)];if(r!=undefined)hash +=r;
		}
		if(hash.length<len)hash+=grd_rand_string(len-hash.length);return hash;
}
/*此插件在IE 下可能存在内存不释放的问题*/
function stateChangeIE(_frame){
/*state: loading ,interactive,   complete*/
 if (_frame.readyState=="interactive") {
	  $(".grd_loading").remove();
		_frame.style.visibility = "visible";   
	 }
}
function stateChangeFirefox(_frame){ 
 $(".grd_loading").remove();
 _frame.style.visibility = "visible";   
}
;(function(){
	$.fn.extend({
		grd_overlay: function(ops,id){
			var ops = $.extend({
					position: 'fixed', top: 0, left: 0, width: '100%',height: '100%', opacity: 0.1, background: 'black', zIndex: 99
			}, ops),
			id = id || grd_rand_string(8);
			if($(this).grd_is_ie6) ops = $.extend(ops, {
				position: 'absolute',
				width: Math.max($(window).width(),$(document.body).width()),
				height:Math.max($(window).height(),$(document.body).height())
			});
			return $('<div class="grd_overlay" zindex="'+ops.zIndex+'" id="'+id+'"/>').appendTo(document.body).css(ops);
		},
		grd_maxLength:function(o){
			var defaults = {
				length:200,
				class_dom:'text_limiter'
			};	
			var opt = $.extend({},defaults,o);
			var class_dom = $('.'+opt.class_dom);
			$(class_dom).html(opt.length);
			$(this).keyup(function(){return _parse($(this));});
			$(this).blur(function(){return _parse($(this));});
			function _parse(obj){
				var val = $.trim($(obj).val());
				if(val=='')$(class_dom).html(opt.length);
				var t = val.length;var l = opt.length-t;l = l<=0?0:l;$(class_dom).html(l);
				if(l<=0)return $(obj).val(val.substr(0,opt.length));
			}
		},
		grd_is_ie6:function(){return $.browser.msie && $.browser.version<=6?true:false;},
		grd_hide_select:function(){return $(this).grd_is_ie6()?$(document.body).find('embed, object, select').css({ 'visibility' : 'hidden'}):'';},
		grd_show_select:function(){return $(this).grd_is_ie6()?$(document.body).find('embed, object, select').css({ 'visibility' :'visible'}):'';},
		grd_loading:function(html){
			var opt = {'margin-top':parseInt($(this).parent().height()/2)-30};
			return $(this).html($('<div class="grd_loading">'+html+'</div>').css(opt));
		},
		grd_dragdrop:function(ops,callback,zindex) {
			if(typeof(ops)=='function')callback=ops;
			this.css('position','absolute');
			var ops = $.extend({}, ops),handle=ops.handle ? $(ops.handle, this) : this,flag =false,_o={left:0,top:0},self=this;
			function pos(e){
				if(flag){self.css({left : e.pageX - _o.left + 'px',top : e.pageY - _o.top + 'px'});}
			}
			handle.mousedown(function(e){
				flag = true;
				self.css({'z-index':zindex});
				var offset = self.offset();
				_o = { left: e.pageX - offset.left, top: e.pageY - offset.top };
				$(document).mousemove(pos);
			}).mouseup(function(e){
				pos(e);
				flag = false;
				$(document).unbind('mousemove');
				if(callback)callback.apply(this,[self]);
			}).css('cursor','move');
			return self;
		},
		grd_position: function(ops){
			var opt = $.extend({x:0,y:0,zindex:1000},ops);
			var l = parseInt(($(window).width()-opt.x)/2);
			var t = $(window).height()/2+$(document).scrollTop()-($(this).height()/2);
			return $(this).css({left:l,top:t,width:opt.x,height:opt.y,'z-index':opt.zindex});
		},
		/*关闭 仅适合内部关闭 外部关闭直接remove所有的DOM 数据*/
		grd_close:function(){
			var p = $(this).parents('.grd_main_windows');
			$(p).next().remove();
			$(p).remove();
			p = null;
		},
		grd_window:function(opts){
			var opt = $.extend({
					zindex:10000,title:'title bar',content:'',append_content:'',
					type:'GET',
					iframe:false,/*iframe*/
					dataType:'html',
					loading:'<img src="'+tpl_url+'images/zoomloader.gif" />',width:600,height:350,
					first:'【',last:'】',id:'',url:'',closeCallBack:{},moveCallBack:{},sucess:{},
					over:true
				},opts);
			var self = $(this);
			var grd_bar = $('<div class="grd_bar"></div>');
			$(self).grd_hide_select();
			var over = $('.grd_overlay');
			var zindex = opt.zindex;
			if(over.length==1){
				zindex+=1;
			}else if (over.length>1){
				$(over).each(function(i){
					if(i+1==over.length){
						zindex=parseInt(parseInt($(this).css('z-index'))+1);	
					}
				});	
			}
			var grd_window_pannel = $('<div class="grd_main_windows" />').attr({'id':grd_rand_string(10)}).appendTo(document.body).grd_position({x:opt.width,y:opt.height,zindex:parseInt(zindex+1)});
			if(opt.over){
				$(this).grd_overlay({opacity:0.1,zIndex:zindex});var layer = $(grd_window_pannel).next();
			}
			var grd_bar = $('<div class="grd_bar"><div class="grd_title">'+opt.first+opt.title+opt.last+'</div></div>').appendTo(grd_window_pannel);
			var grd_status = $('<div class="grd_status"></div>').appendTo(grd_bar);
			$('<a class="g_close"></a>').appendTo(grd_status).click(function(){
				$(grd_window_pannel).remove().removeData();
				if(opt.over)$(layer).remove();
				$(self).grd_show_select();self = null;
				if(typeof(opt.closeCallBack)=='function'){
					opt.closeCallBack();	
				}
			});
			var grd_content = $('<div class="grd_main_content"></div>').css({"height":opt.height-$(grd_bar).height()-2}).appendTo(grd_window_pannel);
			$(grd_bar).parent().grd_dragdrop({handle:'.grd_bar'},'',zindex+1);
				if(opt.url && !opt.iframe){
						$.ajax({
							beforeSend:function(){$(grd_content).grd_loading(opt.loading);},
							cache:false,
							type:opt.type,
							url:opt.url,
							success:function(data){
								$(grd_content).html(data);
								if(opt.append_content)$(grd_content).appendTo(opt.append_content);
								if(typeof(opt.sucess)=='function'){opt.sucess();}
								return ;
							}
						});
					}else if (opt.iframe && opt.url){
						$(grd_content).grd_loading(opt.loading);
						var iframe_string = '<iframe frameborder="0" style="visibility:hidden" onreadystatechange="stateChangeIE(this)" onload="stateChangeFirefox(this);" scrolling="no"  width="'+parseInt(opt.width-20)+'" stype="display:none;" height="'+parseInt(opt.height-10)+'" src="'+opt.url+'"></iframe>';
						$(grd_content).append(iframe_string);
						return;
					}else{
						$(grd_content).html(opt.content);
						if(opt.append_content)$(grd_content).appendTo(opt.append_content);
					}		
			}
	});
})(jQuery);
