//------------------------------------------------------------------------------
/** @author Бреславский А.В. (Hi-tech Research Group) */
//------------------------------------------------------------------------------
var WindowOnLoad = null;
//------------------------------------------------------------------------------
var WindowPostLoaded = 0;
//------------------------------------------------------------------------------
function ShowWindow($Url,$Args){
  //----------------------------------------------------------------------------
  $HTTP = new HTTP();
  //----------------------------------------------------------------------------
  if(!$HTTP.Resource){
    //--------------------------------------------------------------------------
    alert('Не удалось создать HTTP соединение');
    //--------------------------------------------------------------------------
    return false;
  }
  //----------------------------------------------------------------------------
  $HTTP.onLoaded = function(){
    //--------------------------------------------------------------------------
    HideProgress();
  }
  //----------------------------------------------------------------------------
  $HTTP.onResponse = function($Response){
    //--------------------------------------------------------------------------
    switch($Response.Status){
      case 'Error':
        ShowAlert($Response.Error.String,'Warning');
      break;
      case 'Exception':
        ShowAlert(eStack($Response.Exception),'Warning');
      case 'Eval':
        eval($Response.Eval);
      break;
      case 'Ok':
        //----------------------------------------------------------------------
        HideWindow();
        //----------------------------------------------------------------------
        $Window = document.createElement('TABLE');
        $($Window).attr('id','Window');
        $($Window).attr('cellspacing',5);
        $($Window).attr('cellpadding',0);
        $($Window).attr('title',$Response.Title);
        //----------------------------------------------------------------------
        var $html  = '<TR><TD>';
        $html += $Response.Into;
        $html += '</TD></TR>';
        $($Window).html($html);
        //----------------------------------------------------------------------
        document.body.appendChild($Window);
        //----------------------------------------------------------------------
        $($Window).dialog({modal:true,width:$($Window).width()+40,close:function(){HideWindow();}});
        //----------------------------------------------------------------------
        var PostLoaded = [];
        //----------------------------------------------------------------------
        var $eElements = document.getElementsByTagName('SCRIPT');
        //----------------------------------------------------------------------
        var $Externals = $Response.Externals;
        //----------------------------------------------------------------------
        for(var $i=0;$i<$Externals.length;$i++){
          //--------------------------------------------------------------------
          var $Element = $Externals[$i];
          //--------------------------------------------------------------------
          var $Attribs = $Element.Attribs;
          //--------------------------------------------------------------------
          switch($Element.Name){            case 'LINK':
              //----------------------------------------------------------------
              if($Attribs.href){
                //--------------------------------------------------------------
                Debug('Требует загрузки: '+$Attribs.href);
                //--------------------------------------------------------------
                if($(sprintf('LINK[href=%s]',$Attribs.href)).length < 1)
                  PostLoaded.push($Element);
                //--------------------------------------------------------------
                break;
              }
            case 'SCRIPT':
              //----------------------------------------------------------------
              if($Attribs.src){
                //--------------------------------------------------------------
                Debug('Загружен требует загрузки: '+$Attribs.src);
                //--------------------------------------------------------------
                if($(sprintf('SCRIPT[src=%s]',$Attribs.src)).length < 1)
                  PostLoaded.push($Element);
                //--------------------------------------------------------------
                break;
              }
            default:
              //----------------------------------------------------------------
              var $Adding = document.createElement($Element.Name);
              //----------------------------------------------------------------
              for(var $AttribID in $Attribs)
                $Adding[$AttribID] = $Attribs[$AttribID];
              //----------------------------------------------------------------
              if($Element.Text)
                $Adding.text = $Element.Text;
              //----------------------------------------------------------------
              document.body.appendChild($Adding);          }
        }
        //----------------------------------------------------------------------
        WindowOnLoad = $Response.onload;
        //----------------------------------------------------------------------
        WindowPostLoaded = 0;
        //----------------------------------------------------------------------
        if(PostLoaded.length > 0){
          //--------------------------------------------------------------------
          for(var $i=0;$i<PostLoaded.length;$i++){
            //------------------------------------------------------------------
            var $Element = PostLoaded[$i];
            //------------------------------------------------------------------
            var $Adding = document.createElement($Element.Name);
            //------------------------------------------------------------------
            var $Attribs = $Element.Attribs;
            //------------------------------------------------------------------
            for(var $AttribID in $Attribs)
              $Adding[$AttribID] = $Attribs[$AttribID];
            //------------------------------------------------------------------
            if($Element.Name == 'SCRIPT'){              //----------------------------------------------------------------
              if(jQuery.browser.msie)
                $Adding.onreadystatechange = WindowElementLoadedMSIE;
              else
                $Adding.onload = WindowElementLoaded;
              //----------------------------------------------------------------
              WindowPostLoaded++;
            }
            //------------------------------------------------------------------
            document.body.appendChild($Adding);
          }
        }else{
          //--------------------------------------------------------------------
          if(WindowOnLoad)
            eval(WindowOnLoad);
        }
        //----------------------------------------------------------------------
      break;
      default:
        alert('Не известный ответ');
    }
  };
  //----------------------------------------------------------------------------
  if(!$HTTP.Send($Url,$Args)){
    //--------------------------------------------------------------------------
    alert('Не удалось отправить запрос на сервер');
    //--------------------------------------------------------------------------
    return false;
  }
  //----------------------------------------------------------------------------
  ShowProgress('Пожалуйста, подождите');
}
//------------------------------------------------------------------------------
function WindowElementLoaded(event){  //----------------------------------------------------------------------------
  Debug('Загружен элемент: '+event.currentTarget.src);
  //----------------------------------------------------------------------------
  WindowPostLoaded -= 1;
  //----------------------------------------------------------------------------
  if(!WindowPostLoaded){
    //--------------------------------------------------------------------------
    if(WindowOnLoad)
      eval(WindowOnLoad);
  }
  //----------------------------------------------------------------------------
  event.currentTarget.onload = null;
}
//------------------------------------------------------------------------------
function WindowElementLoadedMSIE(){
  //----------------------------------------------------------------------------
  if(this.readyState != 'complete' && this.readyState != 'loaded')
    return;
  //----------------------------------------------------------------------------
  WindowPostLoaded -= 1;
  //----------------------------------------------------------------------------
  if(!WindowPostLoaded){
    //--------------------------------------------------------------------------
    if(WindowOnLoad)
      eval(WindowOnLoad);
  }
}
//------------------------------------------------------------------------------
function UpdateWindow(){
  //----------------------------------------------------------------------------
  var $Window = $('#Window');
  //----------------------------------------------------------------------------
  $($Window).dialog('option','width',$($Window).width()+40);
}
//------------------------------------------------------------------------------
function HideWindow(){
  //----------------------------------------------------------------------------
  var $Window = $('#Window');
  //----------------------------------------------------------------------------
  $Window.dialog('destroy');
  $Window.remove();
}
