/**
 * depends on dojo v0.9 or newer, prototype-window
 */
if(!window.buptnu){ // prevent running twice, which would break references to native globals
(function(){ // anonymous function to avoid global variables
/**
 * summary: trims whitespaces from both sides of the string
 * This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript).
 */
String.prototype.trim = function(){
	var str=this;
	str=str.replace(/^\s\s*/,'');
	var ws=/\s/,i=str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
};
if(typeof dojo == "undefined"){
	alert("Not found dojo v0.9 or newer!");
	return;
}
if(typeof djConfig != "undefined"){//for dojo 0.9 or 1.0
	this.dojoConfig=djConfig;
}
if(typeof dojo.config != "undefined"){//for dojo 1.1
	this.dojoConfig=dojo.config;
}
dojo.require("dojo.behavior");
buptnu={};
buptnu.cfg={
	CTX : (typeof dojoConfig != "undefined" && dojoConfig && dojoConfig.ctxUrl)?dojoConfig.ctxUrl:"",
	TEMPLATE_MSG : "/scripts/templates/message.tl"
};
buptnu.Messages={
	LOADING : "正在加载，请稍等...",
	CONFIRM : "确认要进行“${title}”操作吗？",
	CONFIRM_DEFAULT : "确认要进行此操作吗？",
	ERROR : "系统响应错误: ${error}",
	Window : {
		TITLE : "新窗口",
		ALERT_TITLE : "警告窗口",
		INFO_TITLE : "信息窗口"
	}
};
/**
 * IE下获取elem元素所处的document，firefox下直接返回document，主要用于document.createElement()
 */
buptnu.getDocument=function(elem) {
	var doc=document;
	if(elem&&elem.document){
		doc=elem.document;
	}
	return doc;
};
buptnu.elemOnLoad=function(elem,act){
	elem[dojo.isIE?"onreadystatechange":"onload"]=function(){
		if(document.all){
			if(elem.readyState=="loaded"||elem.readyState=="complete"){
				act();
			}
		}else{
			act();
		}
	}
}
/**
 * 打印指定元素内部的HTML内容
 */
buptnu.print=function(elem){
	var pwObj=dojo.byId("printWindow");
	var pw=frames["printWindow"];
	if(!pwObj||!pw){
		alert("页面没有设置打印容器");
	}
	//pw.document.body.innerHTML="";
	pw.document.body.innerHTML=elem.innerHTML;
	pwObj.style.visibility="visible";
	pw.focus();
	pw.print();
	pwObj.style.visibility="hidden";
};

buptnu.util={};
buptnu.util.eval=function(expression){
	if(expression){
		return dojo.eval("(function(){"+expression+"})()");
	}else{
		return Prototype.emptyFunction;
	}
};
buptnu.util.formToUrl=function(form,url){
	if(form){
		if(url==null||url.toLowerCase()==buptnu.Dojo.cfg.ATTR_FORM){
			if(form.getAttribute("action")){
				url=dojo.trim(form.getAttribute("action"));
			}else{
				url="";
			}
		}
		var params=dojo.formToQuery(form);
		if(url.indexOf("?")<0){
			url+="?";
		}else{
			url+="&";
		}
		url+=params;
	}
	console.debug("formToUrl(%s): %s",form.id,url);
	return url;
};
buptnu.util.ctxUrl=function(url){
	return buptnu.cfg.CTX+url;
};

/**
 * 封装一些对HTML元素的操作
 */
buptnu.html={};
/**
 * 取元素标题，优先取title属性，其次取元素内的文本，最后取元素的value
 */
buptnu.html.getTitle=function(elem){
	var title;
	if(!$(elem).readAttribute("title")||$(elem).readAttribute("title").empty()){
		if($(elem).empty()){
			if($(elem).value&&!$(elem).value.empty()){
				title=$(elem).value.strip();
			}
		}else{
			title=$(elem).innerHTML.stripTags().strip();
			//title=$(elem).innerHTML.strip();
		}
	}else{
		title=$(elem).readAttribute("title").strip();
	}
	if(!title||title.empty()){
		return null;
	}
	return title;
};

/**
 * Removes the children of the target element
 */
buptnu.html.removeChildren=function(elem) {
	while(elem.hasChildNodes()){
		elem.removeChild(elem.firstChild);
	}
};
/**
 * 针对Select选项列表的操作
 */
buptnu.html.Select = {
	/**
	 * Gets current selected value, return values array for multiple select.
	 * if selected value is empty return false.
	 */ 
	getSelVal: function(elem) {
		var selOpt=buptnu.html.Select.getSelOpt(elem);
		if(!selOpt){
			return false;
		}else{
			if(elem.multiple===false){
				return selOpt.value; 
			}else{
				var selVals=[];
				for (var i=0, j=selOpt.length; i<j; i++) {
					selVals.push(selOpt[i].value);
				}
				return selVals;
			}
		}
	},
	/**
	 * Gets current selected option, return options array for multiple select.
	 * if selected is empty return false.
	 */ 
	getSelOpt: function(elem) {
		if (elem.nodeName == 'SELECT'){
			if(elem.multiple===false){
				var selOpt=elem.options[elem.selectedIndex];
				if(selOpt.value.empty()){
					return false;
				}
				return selOpt;
			}else{
				var selOpts=[];
				var children = elem.childNodes;
				for (var i=0, j=children.length; i<j; i++) {
					if (children[i].selected === true && !children[i].value.empty()) {
						selOpts.push(children[i]);
					}
				}
				if(selOpts.length==0){
					return false;
				}
				return selOpts;
			}
		} else {
			return false;
		}
	},
	/**
	 * Creates select option
	 */
	createOpt: function(strVal,strText,targetSelect) {
		var doc=buptnu.getDocument(targetSelect);
		var opt = doc.createElement('OPTION');
		opt.setAttribute('value',strVal);
		var text = doc.createTextNode(strText);
		opt.appendChild(text);
		targetSelect.appendChild(opt);
	},
	/**
	 * Loads in the json data to the select
	 * options={
	 * 		needBlank:false,	//是否需要在首行添加一个空白选项,default:false
	 * 		blankOption: "-",	//如果需要空白选项空白选项的显示文字,default:"-"
	 * 		valueKey:"id",		//value对应的对象属性名,default:"id"
	 * 		textKey:"name",		//text对应的对象属性名,default:"name"
	 * 		isMap:false 		//在Json对象中存储的是对象列表还是Map格式(不需要设置valueKey和textKey).default:对象列表
	 * };
	 */
	loadData: function(jsonData,targetSelect,options) {
		var opts=Object.extend({
			needBlank:false,
			blankOption: "-",
			valueKey:"id",
			textKey:"name",
			isMap:false
		}, options || {});
		buptnu.html.removeChildren(targetSelect);
		if(opts.needBlank&&opts.blankOption!=null){
			buptnu.html.Select.createOpt('',opts.blankOption,targetSelect);
		}
		if(opts.isMap){
			for(var prop in jsonData) {
				buptnu.html.Select.createOpt(prop,jsonData[prop],targetSelect);
			}
		}else{
			for(var i=0,j=jsonData.length;i<j;i++) {
				var obj=jsonData[i];
				buptnu.html.Select.createOpt(obj[opts.valueKey],obj[opts.textKey],targetSelect);
			}
		}
	}
};

/**
 * 对ECSide做一些功能扩展
 */
buptnu.Grid={};
buptnu.Grid.initGrids=function(){
	if(typeof(ECSideUtil)!="undefined"){
		ECSideUtil.initAllGird();
	}
	if(typeof(dojo)!="undefined"){
		dojo.behavior.apply();
	}
};
buptnu.Grid.reload=function(gridId){
	if(typeof(ECSideUtil)!="undefined"){
		if(gridId==null||gridId==""){
			gridId="ec";
		}
		var lowerId=gridId.toLowerCase();
		if(lowerId=="false"||lowerId=="null"||lowerId=="0"){
			return;
		}
		ECSideUtil.reload(gridId);
	}
};
/**
 * 在ECSide列表中弹出符合筛选条件的批量打印页面
 */
buptnu.Grid.batchPrint=function(gridId,action){
	$(gridId).action=action;
	$(gridId).target="_blank";
	$(gridId).submit();
};

/**
 * 对Dojo做一些功能扩展
 */
buptnu.Dojo={};
buptnu.Dojo.uid=0;
/**
 * returns the parent widget of this widget
 */
buptnu.Dojo.getParent=function(widget){
	for(var p=widget.domNode.parentNode; p; p=p.parentNode){
		var id = p.getAttribute && p.getAttribute("widgetId");
		if(id){
			var parent = dijit.byId(id);
			return parent.isContainer ? parent : null;
		}
	}
	return null;
};
buptnu.Dojo.cfg={
	DEFAULT_LINKTARGET : "UrlWindow",
	CONTAINER_CONTENT : "contentWrapper",
	CONTAINER_TAB : "contentTabs",
	ATTR_ONLOADED : "onLoaded",
	ATTR_ONBEFORE : "onBefore",
	ATTR_FORM : "form",
	ATTR_GRIDID : "gridId",
	ATTR_TGWIDTH : "tgWidth",
	ATTR_TGHEIGHT : "tgHeight",
	ATTR_TEMPLATE : "template",
	RELOAD_SAME_HREF : true,
	DEFAULT_OPTIONS : {
		container:null,
		href:null,
		title:null,
		onLoaded:null,
		onBefore:null,
		form:null,
		gridId:null,
		tgWidth:null,
		tgHeight:null,
		template:null
	}
};

/**
 * 定义链接的几种 target 类型,用来指定链接内容的打开方式和位置
 * "Content" : 在Index内容区加载所指定的链接内容;
 * "UrlWindow" : 在新窗口iframe中加载所指定的链接;
 * "AjaxWindow" : 在新窗口中采用Ajax方式加载所指定的链接的内容;
 * "AjaxBack" : 后台Ajax操作不显示用户界面;
 * "NewTab" : 在Index Tab 旁边新建一个Tab来加载所指定的链接的内容;
 * 也可以指定一个dojo layout widget的ID,指定的链接内容将在此widget中加载;
 * 如果指定的是其他值,那么将按照普通链接的方式处理.
 * 以后根据需要可以扩展更多的类型.如果类型很多可以重构实现为dojo的widget或自定义的对象形式.
 * 
 * 属性说明:
 * onLoaded : 通过设置该属性,可以在加载完成后执行该代码.
 * onBefore : 通过设置该属性,可以在加载之前执行该代码, 如果返回false则取消加载.
 * title : 通过设置该属性,可以控制显示在新窗口的标题,如果不设置则取元素内的文本,其次取value属性值.
 * form : 通过设置该属性为一个form id,为href指定的url添加form参数.如果href设为'form',那么url采用form的action属性值.
 *        也可以使用href="form:formId"的形式代替设置form属性.
 * 		例1:<a title="教师列表" target="NewTab" form="aForm" href="${ctx}/secure/usermanage/teacherIndex.action">Teacher List</a>
 * 		例2:<a title="教师列表" target="NewTab" form="aForm" href="form">Teacher List</a>
 * 		例3:<a title="教师列表" target="NewTab" href="form:aForm">Teacher List</a>
 * 		例2和例3是等价的.
 * gridId : 用于AjaxBack, 指定该目标所属的ECSide组件的ID, 用于刷新Grid. 如果gridId为"false"、"null"、"0"则表示不需刷新.
 * tgWidth : 目标容器的宽度.
 * tgHeight : 目标容器的高度.
 * 
 * template (未实现): 该属性应该设置一个JS模板的url,若此项不为空那么Ajax返回Json类型的数据,并绑定指定的模板.
 * 例:<a onLoaded="alert('完成')" title="教师列表" target="Content" template="script/templates/t.html" href="${ctx}/secure/usermanage/teacherIndex.action">Teacher List</a>
 */
buptnu.Dojo.linkTargets={
	Content:function(elem){
		buptnu.Dojo.linkTargets.Default(elem,buptnu.Dojo.cfg.CONTAINER_CONTENT);
	},
	UrlWindow:function(elem){
		buptnu.Dojo.linkModes.urlWindow({
			href:elem.srcHref,
			form:elem.formId,
			title:buptnu.html.getTitle(elem),
			onLoaded:elem.getAttribute(buptnu.Dojo.cfg.ATTR_ONLOADED),
			tgWidth:elem.getAttribute(buptnu.Dojo.cfg.ATTR_TGWIDTH),
			tgHeight:elem.getAttribute(buptnu.Dojo.cfg.ATTR_TGHEIGHT)
		});
	},
	AjaxWindow:function(elem){
		buptnu.Dojo.linkModes.ajaxWindow({
			href:elem.srcHref,
			form:elem.formId,
			title:buptnu.html.getTitle(elem),
			onLoaded:elem.getAttribute(buptnu.Dojo.cfg.ATTR_ONLOADED),
			tgWidth:elem.getAttribute(buptnu.Dojo.cfg.ATTR_TGWIDTH),
			tgHeight:elem.getAttribute(buptnu.Dojo.cfg.ATTR_TGHEIGHT)
		});
	},
	NewTab:function(elem){
		buptnu.Dojo.linkModes.newTab({
			container:buptnu.Dojo.cfg.CONTAINER_TAB,
			href:elem.srcHref,
			form:elem.formId,
			title:buptnu.html.getTitle(elem),
			onLoaded:elem.getAttribute(buptnu.Dojo.cfg.ATTR_ONLOADED)
		});
	},
	AjaxBack:function(elem){
		buptnu.Dojo.linkModes.ajaxBack({
			href:elem.srcHref,
			form:elem.formId,
			title:buptnu.html.getTitle(elem),
			onLoaded:elem.getAttribute(buptnu.Dojo.cfg.ATTR_ONLOADED),
			gridId:elem.getAttribute(buptnu.Dojo.cfg.ATTR_GRIDID)
		});
	},
	Default:function(elem,targetId){
		if(!targetId){
			targetId=elem.linkTarget;
		}
		buptnu.Dojo.linkModes.container({
			container:targetId,
			href:elem.srcHref,
			form:elem.formId,
			title:buptnu.html.getTitle(elem),
			onLoaded:elem.getAttribute(buptnu.Dojo.cfg.ATTR_ONLOADED)
		});
	}
};
buptnu.Dojo.linkModes={
	urlWindow:function(args){
		var opts=Object.extend(buptnu.Dojo.cfg.DEFAULT_OPTIONS, args || {});
		if(buptnu.Dojo.validateLinkModeOptions(opts)===false){
			return;
		}
		//Dialog.info(buptnu.Messages.LOADING,buptnu.Window.infoArgs);
		var onLoadFun=function(){
			//Dialog.closeInfo();
			Event.stopObserving(win.getContent(), "load", onLoadFun);
			buptnu.util.eval(opts.onLoaded);
		};
		var options=args||{};
		if(opts.tgWidth){
			options.width=opts.tgWidth;
		}
		if(opts.tgHeight){
			options.height=opts.tgHeight;
		}
		var win=buptnu.Window.showWindow(opts.title,options);
		win.setURL(opts.href);
		Event.observe(win.getContent(), "load", onLoadFun);
		win.show();
		return win;
	},
	ajaxWindow:function(args){
		var opts=Object.extend(buptnu.Dojo.cfg.DEFAULT_OPTIONS, args || {});
		if(buptnu.Dojo.validateLinkModeOptions(opts)===false){
			return;
		}
		var options=args||{};
		if(opts.tgWidth){
			options.width=opts.tgWidth;
		}
		if(opts.tgHeight){
			options.height=opts.tgHeight;
		}
		var win=buptnu.Window.showWindow(opts.title,options);
		win.setAjaxContent(opts.href,{onComplete:function(){
			buptnu.util.eval(opts.onLoaded);
		}});
		win.show();
		return win;
	},
	newTab:function(args){
		dojo.require("dojox.layout.ContentPane");
		var opts=Object.extend(buptnu.Dojo.cfg.DEFAULT_OPTIONS, args || {});
		if(buptnu.Dojo.validateLinkModeOptions(opts)===false){
			return;
		}
		var contentTabs=dijit.byId(opts.container);
		if(!contentTabs){
			return;
		}
		var node = document.createElement("div");
		//document.body.appendChild(node);	// necessary for tab contianer ???
		var newTab;
		if(opts.title){
			dojo.some(contentTabs.getChildren(), function(child){
				if(child.title===opts.title||child.href===opts.href){
					newTab = child;
					return true;
				}
				return false;
			});
		}
		if(!newTab){
			var id=++buptnu.Dojo.uid;
			newTab = new dojox.layout.ContentPane({
					id: "newTab_"+ id,
					title: opts.title?opts.title:"Tab #" + id,
					renderStyles : "true",
					preventCache : "true",
					extractContent : "true",
					closable: true
				}, node );
			contentTabs.addChild(newTab);
		}
		if(!newTab.isLoaded){
			newTab.cancel();
		}
		newTab.onLoad=function(){
			buptnu.util.eval(opts.onLoaded);
			buptnu.Grid.initGrids();
		};
		if(newTab.href!==opts.href||buptnu.Dojo.cfg.RELOAD_SAME_HREF){
			newTab.setHref(opts.href);
		}
		if(contentTabs.selectedChildWidget!==newTab){
			contentTabs.selectChild(newTab);
		}
	},
	ajaxBack:function(args){
		dojo.require("dojo.string");
		dojo.require("dijit._Templated");
		var opts=Object.extend(buptnu.Dojo.cfg.DEFAULT_OPTIONS, args || {});
		if(buptnu.Dojo.validateLinkModeOptions(opts)===false){
			return;
		}
		var question=opts.title?dojo.string.substitute(buptnu.Messages.CONFIRM,{title:opts.title}):buptnu.Messages.CONFIRM_DEFAULT;
		if(!confirm(question)){
			return;
		}
		var deferred = dojo.xhrGet({
			url: opts.href,
			preventCache:true,
			handleAs: 'json-comment-optional',
			load: function(jsonData,ioArgs){
				if(typeof(jsonData)!=="object"||!ioArgs.xhr.getResponseHeader("Content-Type").include("json")){
					Dialog.alert(buptnu.Window.fixAlert(jsonData),buptnu.Window.alertOptions);
					return;
				}
				if(!jsonData.actionErrors || jsonData.actionErrors.length==0){
					buptnu.util.eval(opts.onLoaded);
					buptnu.Grid.reload(opts.gridId);
				}
				if(jsonData.actionErrors.length>0||jsonData.actionMessages.length>0){
					var template=dijit._Templated.getCachedTemplate(buptnu.util.ctxUrl(buptnu.cfg.TEMPLATE_MSG),null,true);
					Dialog.alert(buptnu.Window.fixAlert(template.process(jsonData)),buptnu.Window.alertOptions);
					return;
				}else{
				}
			},
			error: function(data){
				Dialog.alert(dojo.string.substitute(buptnu.Messages.ERROR,{error:(data instanceof Error)?(data.message):data}),buptnu.Window.alertOptions);
			}
		});
	},
	container:function(args){
		var opts=Object.extend(buptnu.Dojo.cfg.DEFAULT_OPTIONS, args || {});
		if(buptnu.Dojo.validateLinkModeOptions(opts)===false){
			return;
		}
		var widget=dijit.byId(opts.container);
		if(!widget){
			return;
		}
		if(!widget.isLoaded){
			widget.cancel();
		}
		if(typeof(widget.controlButton)!="undefined"){
			widget.controlButton.setLabel(opts.title?opts.title:"Index");
			console.debug("target widget:{id:'%s',controlButton.label:'%s',title:'%s'}",opts.container,widget.controlButton.label,opts.title);
		}
		if(widget.href!==opts.href||buptnu.Dojo.cfg.RELOAD_SAME_HREF){
			widget.onLoad=function(){
				buptnu.util.eval(opts.onLoaded);
				buptnu.Grid.initGrids();
			};
			widget.setHref(opts.href);
		}
		var parentWidget=buptnu.Dojo.getParent(widget);
		if(parentWidget&&parentWidget.selectedChildWidget&&parentWidget.selectedChildWidget!==widget){
			parentWidget.selectChild(widget);
		}
	}
};
/**
 * 校验linkModes的选项是否有效
 */
buptnu.Dojo.validateLinkModeOptions=function(opts){
	if(opts.form!=null){
		var form=dojo.byId(opts.form);
		if(form){
			if(opts.href==null||opts.href.toLowerCase()==buptnu.Dojo.cfg.ATTR_FORM){
				if(!form.getAttribute("action")){
					return false;
				}
				var action=dojo.trim(form.getAttribute("action"));
				if(action==""){
					return false;
				}
				opts.href=action;
			}
			opts.href=buptnu.util.formToUrl(form,opts.href);
		}
	}
	if(opts.href==null){
		return false;
	}
	if(opts.onBefore!=null){
		if(buptnu.util.eval(opts.onBefore)===false){
			return false;
		}
	}
	return true;
}
buptnu.Dojo.resetLink=function(elem,linkTarget){
	if(!elem.getAttribute("href")){
		return;
	}
	var href=dojo.trim(elem.getAttribute("href"));
	if(href==""||href=="#"||href.toLowerCase().indexOf("javascript:") === 0){
		return;
	}
	if(!elem.getAttribute("target")){
		if(linkTarget){
			elem.linkTarget=linkTarget;
		}else{
			elem.linkTarget=buptnu.Dojo.cfg.DEFAULT_LINKTARGET;
		}
	}else{
		elem.linkTarget=elem.getAttribute("target");
	}
	if(buptnu.Dojo.linkTargets[elem.linkTarget]||dijit.byId(elem.linkTarget)){
		elem.srcHref=href;

		var formAttr;
		formAttr=elem.getAttribute(buptnu.Dojo.cfg.ATTR_FORM);
		if(typeof(formAttr)=="string"){
			formAttr=dojo.trim(formAttr);
			if(formAttr!=""){
				elem.formId=formAttr;
			}
		}else{
			if(href.toLowerCase().indexOf(buptnu.Dojo.cfg.ATTR_FORM+":")==0){
				formAttr=dojo.trim(href.substr((buptnu.Dojo.cfg.ATTR_FORM+":").length));
				if(formAttr==""){
					return;
				}else{
					elem.formId=formAttr;
					elem.srcHref=buptnu.Dojo.cfg.ATTR_FORM;
				}
			}
		}

		if(elem.formId){
			var form=dojo.byId(elem.formId);
			if(form){
				//注释下面代码，不在此处判读是否使用form的action作为href，而在validateLinkModeOptions()中
				//if(href.toLowerCase()==buptnu.Dojo.cfg.ATTR_FORM){
				//	if(!form.getAttribute("action")){
				//		return;
				//	}
				//	var action=dojo.trim(form.getAttribute("action"));
				//	if(action==""){
				//		return;
				//	}
				//	href=action;
				//}

				//使form的submit触发按钮的点击事件
				form.onsubmit=function(){elem.click();return false;};
				//dojo.connect(form, "onsubmit", function(){elem.click();return false;});//buptnu.Dojo.linkEvent(elem)
				//firefox下有效，防止使用submit按钮，防止点击按钮时触发form的onsubmit事件
				if(elem.type&&elem.type=="submit"){
					elem.setAttribute("type","button");
				}
			}
		}
		elem.setAttribute("href","#");
		//elem.removeAttribute("href");
		elem.setAttribute("target","");
	}
};
buptnu.Dojo.linkEvent=function(elem){
	if(elem.getAttribute(buptnu.Dojo.cfg.ATTR_ONBEFORE)){
		if(buptnu.util.eval(elem.getAttribute(buptnu.Dojo.cfg.ATTR_ONBEFORE))===false){
			return;
		}
	}
	if(elem.srcHref&&elem.linkTarget){
		if(!buptnu.Dojo.linkTargets[elem.linkTarget]){
			buptnu.Dojo.linkTargets.Default(elem);
		}else{
			buptnu.Dojo.linkTargets[elem.linkTarget](elem);
		}
	}
};
buptnu.Dojo.behaviorObj = {
	".content a[href],.content button[href],.toolButton[href],.dijitTooltipDialog a[href]" : {
		"found" : buptnu.Dojo.resetLink,
		"onclick" : function(evt){
			buptnu.Dojo.linkEvent(evt.currentTarget);//evt.target
		}
	},
	//	"#navMenu ul li" : function(elem){
	//		dojo.style(elem,"color", "red");
	//	},
	"#navMenu ul li a[href],.linkEvent[href]" : {
		"found" : function(elem){buptnu.Dojo.resetLink(elem,"Content");},
		"onclick" : function(evt){
			buptnu.Dojo.linkEvent(evt.currentTarget);
		}
	}
};

/**
 * 对弹出窗口对象的操作
 */
buptnu.Window={};
buptnu.Window.className="buptnuBlue";
buptnu.Window.defaultOptions={
	title:buptnu.Messages.Window.TITLE,
	className:buptnu.Window.className,
	destroyOnClose:true,
	width:640,
	height:480,
	top:50,
	left:100,
	zIndex:11,
	wiredDrag:true
};
buptnu.Window.init=function(){
	if(typeof(Window)!="undefined"){
		Window.keepMultiModalWindow=true;
		//WindowStore.init();
		//WindowCloseKey.init();
	}
};
/**
 * 新建一个弹出窗口对象
 * 	用法：win = buptnu.util.Window.newWindow({title: "title", ...})
 *  or win = buptnu.util.Window.newWindow({...})
 */
buptnu.Window.newWindow=function(){
	var optionIndex = 0;
	var options=Object.extend(buptnu.Window.defaultOptions, arguments[optionIndex] || {});
	var win= new Window(options);
	win.centered=true;
	return win;
};
/**
 * 显示弹出窗口，如果还未存在任何窗口对象则新建一个弹出窗口对象；
 * 如果已经存在不可见的缓存窗口对象则直接复用此缓存对象；
 * 如果已经存在可见的缓存弹出窗口则新建一个弹出窗口对象；
 * 
 * 	用法：win= buptnu.util.Window.getWindow("title", {...})
 *  or win = buptnu.util.Window.getWindow({title: "title", ...})
 *  or win = buptnu.util.Window.getWindow({...})
 */
buptnu.Window.showWindow=function(){
	var title;
	var optionIndex = 0;
	if (arguments.length > 0) {
		if (typeof arguments[0] == "string" ) {
			title = arguments[0];
			optionIndex = 1;
		}else{
			if(!arguments[0]){
				optionIndex = 1;
			}
			title = arguments[0] ? arguments[0].title : null;
		}
	}
	if(!title){
		title=buptnu.Messages.Window.TITLE;
	}
	var options=Object.extend({
		title:title,
		destroyOnClose:false
	}, arguments[optionIndex]||{});
	if(buptnu.Window.cacheWin){
		if(buptnu.Window.cacheWin.isVisible()===true){
			options.destroyOnClose=true;
			options.id=null;
			return buptnu.Window.newWindow(options);
		}else{
			var titleChg=false;
			if(buptnu.Window.cacheWin.getTitle()!==options.title){
				buptnu.Window.cacheWin.setTitle(options.title);
				titleChg=true;
			}
			if(typeof(options.width)=="undefined"){
				options.width=buptnu.Window.defaultOptions.width;
			}
			if(typeof(options.height)=="undefined"){
				options.height=buptnu.Window.defaultOptions.height;
			}
			if(titleChg&&(buptnu.Window.cacheWin.getSize().width!=parseFloat(options.width)||buptnu.Window.cacheWin.getSize().height!=parseFloat(options.height))){
				buptnu.Window.cacheWin.setSize(options.width,options.height);
			}
			return buptnu.Window.cacheWin;
		}
	}else{
		options.id="cacheWin";
		buptnu.Window.cacheWin=buptnu.Window.newWindow(options);
		return buptnu.Window.cacheWin;
	}
};
/**
 * 在弹出窗口中通过浏览器window对象或一个DOM节点对象取弹出窗口对象
 */
buptnu.Window.getOuterWindow=function(obj){
	if(obj){
		var win=buptnu.Window.getIframeWindow(obj);
		if(!win){
			win=buptnu.Window.getAjaxWindow(obj);
		}
		return win;
	}
	return null;
};
/**
 * 在弹出窗口中通过一个DOM节点对象取弹出窗口对象
 */
buptnu.Window.getAjaxWindow=function(domNode){
	for(var p=domNode.parentNode; p; p=p.parentNode){
		if(p.tagName=="DIV"||p.tagName=="IFRAME"){
			var id = p.getAttribute && p.getAttribute("id");
			if(id.endsWith("_content")){
				id=id.substr(0,id.lastIndexOf("_content"));
				var win = Windows.getWindow(id);
				return win;
			}
		}
	}
	return null;
};
/**
 * 在弹出窗口中通过浏览器window对象取弹出窗口对象
 */
buptnu.Window.getIframeWindow=function(iWin){
	var id = iWin.name;
	if(id.endsWith("_content")){
		id=id.substr(0,id.lastIndexOf("_content"));
		var win = Windows.getWindow(id);
		return win;
	}
	return null;
};
/**
 * 通过弹出窗口对象或弹出窗口ID取弹出窗口的iframe
 */
buptnu.Window.getIframe=function(win){
	if (typeof win == "string" ) {//参数为 Window ID
		return window.frames[win+"_content"];
	}else{//参数为Window Object
		return window.frames[win.getId()+"_content"];
	}
};

/**
 * 在弹出窗口中通过浏览器window对象或一个DOM节点对象关闭弹出窗口
 */
buptnu.Window.closeWindow=function(obj){
	if(obj){
		var win=buptnu.Window.getOuterWindow(obj);
		if(win){
			win.close();
			return;
		}
	}
	if(buptnu.Window.cacheWin){
		buptnu.Window.cacheWin.close();
	}
	//if(Windows.getFocusedWindow()){
	//	Windows.getFocusedWindow().close();
	//}
};
/**
 * 在弹出窗口中通过浏览器window对象或一个DOM节点对象关闭弹出窗口并且刷新父窗口的ECSide列表组件
 */
buptnu.Window.closeAndReload=function(obj,gridId){
	buptnu.Window.closeWindow(obj);
	buptnu.Grid.reload(gridId);
};
/**
 * 解决弹出警示框的显示窗口滚动条的问题
 */
buptnu.Window.fixAlert=function(message){
	var prefix="<div style='overflow:hidden;width:300px;height:80px'>";
	var suffix="</div>";
	return prefix+message+suffix;
};
/**
 * 弹出警示框的默认选项
 */
buptnu.Window.alertOptions={title:buptnu.Messages.Window.ALERT_TITLE, className:buptnu.Window.className, width:300, height:140, okLabel: "确定",ok:function(win) {return true;}};

/**
 * 弹出信息框的选项，暂时没用
 */
buptnu.Window.infoShew=false;
buptnu.Window.infoOnShow=function(win){buptnu.Window.infoShew=true;alert("shew"+win.getId())};
buptnu.Window.infoOnClose=function(win){buptnu.Window.infoShew=false;alert("close"+win.getId())};
buptnu.Window.infoArgs={title:buptnu.Messages.Window.INFO_TITLE, className:buptnu.Window.className, width:250, height:100, showProgress: true,onShow:buptnu.Window.infoOnShow,onClose:buptnu.Window.infoOnClose};

/**
 * 初始化操作
 */
dojo.behavior.add(buptnu.Dojo.behaviorObj);
dojo.addOnLoad(buptnu.Window,"init");
})(); // end anonymous function
} // end if(!window.buptnu)
