﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("OS.Web");

OS.Web.PageModalDialog = function(element) {
    OS.Web.PageModalDialog.initializeBase(this);
    
    this._modalDialogControl = null;
    this._iframe = null;
    this._additionalVariable = null;
}

OS.Web.PageModalDialog.prototype = {
    initialize: function() {
        OS.Web.PageModalDialog.callBaseMethod(this, 'initialize');
        
        //?? надо ли в dispose отписываться от события?        
        this._modalDialogControl.add_Hidden(Function.createDelegate(this, this._OnModalDialogHidden));
        
        this._iframe = this._modalDialogControl.get_element().getElementsByTagName("iframe")[0];
        
        $addHandler(this._iframe, "load", Function.createDelegate(this, this._OnLoadIFrame));
    },
    
    dispose: function() {
        OS.Web.PageModalDialog.callBaseMethod(this, 'dispose');
        
        $clearHandlers(this._iframe);
        this._iframe.contentWindow.CloseModalDialog = null;
    },
    
    Show : function(title, url, contentWidth, contentHeight, onCloseCallback)
    {            
      this._modalDialogControl.set_HeaderText(title);
      
      if (contentWidth)
        this._modalDialogControl.set_Width(contentWidth);
        
      if (contentHeight)
        this._modalDialogControl.set_ContentHeight(contentHeight);
      
      this._iframe.src = url;
      this._modalDialogControl.Show(onCloseCallback);
    },
    
    Close : function()
    {
      this._modalDialogControl.Close.apply(this._modalDialogControl, arguments);
    },
    
    _OnModalDialogHidden : function()
    {
      this._iframe.contentWindow.CloseModalDialog = null;
      this._iframe.src = "about:blank";      
      this._iframe.style.visibility = "hidden";
      PreviousElement(this._iframe).style.display = "";
    },
    
    _OnLoadIFrame : function(evt)
    {
      if (this._iframe.src == "" || this._iframe.src == "about:blank")
        return;
  
      this._iframe.contentWindow.CloseModalDialog = Function.createDelegate(this, this.Close);
      this._iframe.style.visibility = "visible";
      PreviousElement(this._iframe).style.display = "none";
    },
        
    get_ModalDialogControl : function()
    {
      return this._modalDialogControl;
    },
        
    set_ModalDialogControl : function(value)
    {
      if (this._modalDialogControl)
          throw Error.invalidOperation("ModalDialogControl cannot be set twice.")
      
      this._modalDialogControl = value;
    }
}

OS.Web.PageModalDialog.registerClass('OS.Web.PageModalDialog', Sys.Component);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
