Ext.tsinnet.ModalDialog=function(ownerWindown){
  this.configs=new Ext.util.MixedCollection(false);
  this.dialogs=new Ext.util.MixedCollection(false);
  this.normWins=new Ext.util.MixedCollection(false);;
  if (ownerWindown){
    this.ownerWin = ownerWindown;
  } else {
    this.ownerWin = window;
  }
  this.ownerWin.onbeforeunload = TSinNetModalDialog.closeNormWins;
};
Ext.tsinnet.ModalDialog.prototype.addNormWin = function(skey,oNormWin){
  return;
  this.normWins.add(skey,oNormWin);
};

Ext.tsinnet.ModalDialog.prototype.getModalDialogConfig=function(unid){
    var result=this.configs.key(unid);
    if (result)
    {
      return result;
    }else{
      return null;
    }
  };

Ext.tsinnet.ModalDialog.prototype.clear=function(){
    this.configs.clear();
    this.dialogs.clear(); 
  };
  
Ext.tsinnet.ModalDialog.prototype.removeExpireConfigs=function(){
    var iCount=this.configs.getCount();
    for (var iIndex=iCount-1;iIndex>=0;iIndex--)
    {
      if (!this.configs.item(iIndex).winDlg && this.configs.item(iIndex).currentModalDialog && this.configs.item(iIndex).currentModalDialog.isVisible()===false)
      //当不是winDlg、有当前窗体、并且是隐藏的则去掉。winDlg有自己去除。
      {
        this.configs.removeAt(iIndex);
      }
    }
  };
  
Ext.tsinnet.ModalDialog.prototype.getExtModalDialog=function(){
    var iCount=this.dialogs.getCount();
    for (var iIndex=0;iIndex<iCount;iIndex++)
    {
      if (this.dialogs.item(iIndex).isVisible()===false)
      {
        return this.dialogs.item(iIndex);
      }
    }
    var htmlStr = '<div id="{extModalDialogDiv}" style="visibility:hidden;">'+
                '  <div class="x-dlg-hd">{title}</div>'+
                '    <iframe id="{extModalDialogContentFrame}" width="{width}" height="height"></iframe>'+
                '</div>';
    var extModalDialogDivID=document.uniqueID;
    var extModalDialogInnerID=document.uniqueID;
    var extModalDialogContentFrameID=extModalDialogDivID+"Frame";
    var tpl = new Ext.DomHelper.Template(htmlStr);
    tpl.compile();
    tpl.append(document.body, {
      extModalDialogDiv: extModalDialogDivID,
      extModalDialogInner: extModalDialogInnerID,
      title: "对话框",
      extModalDialogContentFrame:extModalDialogContentFrameID
    });
    var extModalDialog = new Ext.LayoutDialog(extModalDialogDivID, {
      modal:true,autoTabs:true,proxyDrag:true,resizable:false,
      width: 480,height: 302,shadow:false,
      closable:true,
      center: {
        autoScroll: true,tabPosition: 'top',closeOnTab: true,alwaysShowTabs: false
      }
    });
    var layout = extModalDialog.getLayout();
    layout.beginUpdate();
    layout.add('center', new Ext.ContentPanel(extModalDialog.getEl().id+"Frame", {title: 'Update Account1',fitToFrame:true}));
    layout.endUpdate();
    this.dialogs.add(extModalDialogDivID,extModalDialog);
    extModalDialog.addKeyListener(27, function(){extModalDialog.hide();}, extModalDialog);
    var beforeHideFn=function(){
      window.document.frames[extModalDialog.getEl().id+"Frame"].document.body.innerHTML="";
    };
    extModalDialog.on('beforehide',beforeHideFn);
    return extModalDialog;
  };
  
Ext.tsinnet.ModalDialog.prototype.getUniqueID = function(){
  return this.ownerWin.document.uniqueID;
};
Ext.tsinnet.ModalDialog.prototype.getLayoutDialog=function(config,curWindow){
    this.removeExpireConfigs();
    if (typeof config.url==="string"){
      config.url = config.url.replace("#","＃");
    }
    config.unid = this.getUniqueID();
    var cfg=this.getModalDialogConfig(config.unid);
    if (cfg)
    {
      this.configs.removeKey(config.unid);
    }
    this.configs.add(config.unid,config.modalDialogParas);
    var urlObj=new Ext.tsinnet.URL(config.url);
    var paras=urlObj.searchObject();
    if (config.unid){
      paras.dialogUnid=config.unid;
    }else if(paras.dialogUnid){
      config.unid=paras.dialogUnid;
    }else{
      return {
        show:function(){
          alert("没有找到对话框unid[config.unid]");
        },
        hide:function(){
          return false;
        }
      };
    }
    config.winDlg=true;
    if (config.winDlg){
      paras.winDlg=config.winDlg;
      config.modalDialogParas.winDlg=config.winDlg;
    }
    config.url=urlObj.url();
    if (config.maxWin && config.normWin){
      config.width=screen.availWidth-10;
      config.height = screen.availHeight-80;
      config.left = 0;
      config.top = 0;
    }
    this.standardSize(config);
    if (config.normWin){
      var sFeatures=this.getOpenFeatures(config);//sunken:raised
      var oOwnerWin = this.ownerWin;
      config.show=function(){
        var winNameForOpen="_blank";
        if (config.winName){
          winNameForOpen = config.winName;
        }
        var oOpenWin = oOwnerWin.open(config.url,winNameForOpen,sFeatures);
        this.openedWindow=oOpenWin;
        if (oOpenWin && !oOpenWin.closed){
          TSinNetModalDialog.getTopWindow().tsinnetModalDialog.addNormWin(config.unid,oOpenWin);
          oOpenWin.focus();
        }
        else {
          alert("所有者窗体已经被关闭");
        }
      };
      config.hide=function(){
        if (this.openedWindow && !this.openedWindow.closed) {
          this.openedWindow.close();
        }
      };
      return config;
    }else
    if (paras.winDlg){
      var sDlgFeatures=this.getDialogFeatures(config);
      config.show=function(){
        var dlgArgs = {};
        dlgArgs.openWindow=TSinNetModalDialog.getTopWindow();
	    var dlgResult=curWindow.showModalDialog(config.url,dlgArgs,sDlgFeatures);
		if(dlgResult && dlgResult.refresh){
          var dlgConfig=TSinNetModalDialog.getTopWindow().tsinnetModalDialog.getModalDialogConfig(paras.dialogUnid);
		  if (dlgConfig){
		    if (dlgConfig.refreshParent){
		       dlgConfig.refreshParent(dlgResult);
		    }else{
		      alert("没有提供refreshParent()函数");
		    }
		  }else{
		    alert("没有找到对话框dialogUnid="+paras.dialogUnid);
		  }
        }
        TSinNetModalDialog.getTopWindow().tsinnetModalDialog.configs.removeKey(paras.dialogUnid);
      };
      return config;
    }else{
    var result=this.getExtModalDialog(true);  
    config.modalDialogParas.currentModalDialog=result;
    if (config.title)
    {
      result.setTitle(config.title);
    }
    if (config.width && config.height)
    {
      result.resizeTo(parseInt(config.width,10),parseInt(config.height,10));
      result.center();
    }
    Ext.get(result.getEl().id+"Frame").dom.src=config.url;
    return result;
    }
  };

Ext.tsinnet.ModalDialog.prototype.standardSize = function(config){
  if (config.width){
    if (config.width.toString().toLowerCase().indexOf("px")>=0){
      config.width=config.width.toString().substring(0,
        config.width.toString().toLowerCase().indexOf("px"));
    }
  }
  if (config.height){
    if (config.height.toString().toLowerCase().indexOf("px")>=0){
      config.height=config.height.toString().substring(0,
        config.height.toString().toLowerCase().indexOf("px"));
    }
  }
  if (config.left){
    if (config.left.toString().toLowerCase().indexOf("px")>=0){
      config.left=config.left.toString().substring(0,
        config.left.toString().toLowerCase().indexOf("px"));
    }
  }
  if (config.top){
    if (config.top.toString().toLowerCase().indexOf("px")>=0){
      config.top=config.top.toString().substring(0,
        config.top.toString().toLowerCase().indexOf("px"));
    }
  }
};
Ext.tsinnet.ModalDialog.prototype.getOpenFeatures = function(config){
  var sFeatures="";
  if (config.width){
    sFeatures+="width="+config.width+"px,";
  }else{
    config.width=screen.availWidth-10;
  }
  if (config.height){
    if (config.maxWin!=true){
      config.height = config.height + 24;
    }
    sFeatures+="height="+config.height+"px,";
  }else{
    config.height = screen.availHeight-40;
  }
  if (config.resizable){
    sFeatures+="resizable="+config.resizable+",";
  }else{
    sFeatures+="resizable=yes,";
  }
  if (config.scroll){
    config.scrollbars = config.scroll;
  }
  if (config.scrollbars){
    sFeatures+="scrollbars="+config.scrollbars+",";
  }else{
    sFeatures+="scrollbars=no,";
  }
  if (config.status){
    sFeatures+="status="+config.scroll+",";
  }else{
    sFeatures+="status:no,";
  }
  if (typeof config.left != "undefined"){
    sFeatures+="left="+config.left+"px,";
  }else{
    sFeatures+="left="+(screen.availWidth-config.width)/2+"px,";
  }
  if (typeof config.top != "undefined"){
    sFeatures+="top="+config.top+"px,";
  }else{
    var vTop2 = screen.availHeight-config.height;
    if (config.normWin===true) {
      vTop2 = vTop2 - 80;
    }
    if (vTop2<0) {
      vTop2 = 0;
    }
    sFeatures+="top="+vTop2/2+"px,";
  }
  if (typeof config.location != "undefined"){
    sFeatures+="location="+config.location+",";    
  }else{
    sFeatures+="location=yes,";
  }
  sFeatures =sFeatures + "help:no,edge:sunken";//sunken:raised
  return sFeatures;
};

Ext.tsinnet.ModalDialog.prototype.getDialogFeatures = function(config){
  var sFeatures="help:no;edge:sunken;";//sunken:raised
  if (config.width){
    config.width = config.width + 12;
    sFeatures+="dialogWidth:"+config.width+"px;";
  }
  if (config.height){
    config.height = config.height + 36;
    sFeatures+="dialogHeight:"+config.height+"px;";
  }
  if (config.resizable!==false && config.resizable!==0
    && config.resizable!=="no"){
    sFeatures+="resizable:yes;";
  }
  if (config.scrollbars) {
    config.scroll = config.scrollbars;
  }
  if (config.scroll){
    sFeatures+="scroll:"+config.scroll+";";
  }else{
    sFeatures+="scroll:no;";
  }
  if (config.status){
    sFeatures+="status:"+config.scroll+";";
  }else{
    sFeatures+="status:no;";
  }
  return sFeatures;
};
TSinNetModalDialog={};
//自己调用对话框使用
TSinNetModalDialog.getTopWindow=function(){
  return window.dialogArguments?window.dialogArguments.openWindow:top;
};
//获取自己被打开的父窗体
TSinNetModalDialog.getOpenerWindow = function() {
  var result=false;
  if (window.dialogArguments) {
    result = window.dialogArguments.openWindow;
  } else if (top.opener) {
    if (!top.opener.closed) {
      result = top.opener;
    }
  }
  /*
  if (result) {
    alert("window="+window.location.pathname+";openerWindow="+result.location.pathname);
  } else {
    alert("父窗体已经被关闭");
  }
  */
  return result;
};

TSinNetModalDialog.getModalDialogConfig=function(dialogUnid){
  var dlgConfig=null;
  if (dialogUnid){
	  var openerWindow=TSinNetModalDialog.getOpenerWindow();
      if (openerWindow) {
	  if (openerWindow.TSinNetModalDialog.checkWindowModalDialog(openerWindow)){
	    dlgConfig=openerWindow.tsinnetModalDialog.getModalDialogConfig(dialogUnid);
	    if (!dlgConfig){
	      alert("window="+window.location.pathname+"的dialogUnid="+dialogUnid+"没有找到配置信息\r\n"+
            ";openerWindow="+openerWindow.location.pathname);
	    }
	  }
      }
  }else{
    alert("没有提供对话框dialogUnid值");
  }
  return dlgConfig;
};
TSinNetModalDialog.getLayoutDialog=function(dlgConfig,useWin){
  var dlg=null;
  var oWindow=TSinNetModalDialog.getTopWindow();
  if (oWindow.TSinNetModalDialog.checkWindowModalDialog(oWindow)){
    if (!useWin){
      useWin = window;
    }else{
	    	alert("使用参数提供window");
	    }
    dlg=oWindow.tsinnetModalDialog.getLayoutDialog(dlgConfig,useWin);
    if (!dlg){
      alert("获取模式对话框失败");
    }
  }
  if (!dlg){
    dlg={show:function(){},hide:function(){}};
  }
  return dlg;
};

TSinNetModalDialog.checkWindowModalDialog = function(oWindow){
  if (oWindow){
    if (!oWindow.tsinnetModalDialog){
      oWindow.tsinnetModalDialog=new Ext.tsinnet.ModalDialog(oWindow);
    }
    return true;
  } else {
    alert("TSinNetModalDialog.checkWindowModalDialog()调用没有提供窗体对象");
    return false;
  }
};

TSinNetModalDialog.closeNormWins = function(){
  return;
  for (var i=tsinnetModalDialog.normWins.getCount()-1; i>=0; i--){
    var tmpWin=tsinnetModalDialog.normWins.itemAt(i);
    if (tmpWin && tmpWin.closed!==true){
      tmpWin.close();
    }
  }
};

