//Класс Windows для создания окон в ExtJs 4 
//Версия 0.1.0


//Метод создания простого окна без возможности свернуть и развернуть его. Событие закрытия hide
//ObjectWindow=объект класса Windows; Тип:объект
//Item=Элемент который будет вставлен в окно; Тип:объект 
function CreateWindowSympleHide(ObjectWindow,Item)
{
     Item = Item ? Item :'';//Если параметр не задан, то присваеваеться пустая строка
     if (!ObjectWindow.Window)//Проверка на существование окна 
     {
        Ext.getBody().mask('Обработка...');//Маскирование области загрузки окна
        var Window = new Ext.Window( //Описание объекта окна
                            {
                                layout : 'fit', //Элемент который находиться внутри окна, полностью заполняет его
                                title :this.Title,//Заголовок окна
                                closeAction : 'hide',//Событие при закртии окна. hide означает что окно не уничтожаеться а становиться скрытым
                                width : this.Width,//Начальная ширина окна
                                height : this.Height,//Начальная высота окна
                                resizable : this.Resizable,//Возможность изменять размеры окна мышкой 
                                x : this.XCoord,//Начальная позиция окна по оси X
                                y : this.YCoord,//Начальная позиция окна по оси Y
                                items : [Item]//Элемент который будет находиться в окне
                            });//Окончание описания объекта окна
        Ext.getBody().unmask('Обработка...');//Демаскирование области загрузки окна
        this.Window=Window;//Сохранение созданного окна в свойство класса
        return Window;//метод возвращает объект окна    
    }//Окончание проверки на существование окна
    {
        this.Window=ObjectWindow.Window;    
    } 
    
}       



//Метод создания простого окна без возможности свернуть и развернуть его. Событие закрытия destroy
//ObjectWindow=объект класса Windows; Тип:объект
//Item=Элемент который будет вставлен в окно; Тип:объект 
function CreateWindowSympleDestroy(ObjectWindow,Item)
{    
     Item = Item ? Item :'';//Если параметр не задан, то присваеваеться пустая строка
     
     if (!ObjectWindow.Window)//Проверка на существование окна 
     {
        Ext.getBody().mask('Обработка...');//Маскирование области загрузки окна
        var Window = new Ext.Window( //Описание объекта окна
                            {
                                layout : 'fit', //Элемент который находиться внутри окна, полностью заполняет его
                                title :this.Title,//Заголовок окна
                                closeAction : 'destroy',//Событие при закртии окна. destroy означает что окно уничтожаеться
                                width : this.Width,//Начальная ширина окна
                                height : this.Height,//Начальная высота окна
                                resizable : this.Resizable,//Возможность изменять размеры окна мышкой
                                x : this.XCoord,//Начальная позиция окна по оси X
                                y : this.YCoord,//Начальная позиция окна по оси Y
                                items : [Item],//Элемент который будет находиться в окне
                                listeners : 
                                {
                                    destroy : function()//обработка события destroy
                                    {
                                        ObjectWindow.Window = null;//объекту окна присваеваем значение null
                                    }
                                }
                            });//Окончание описания объекта окна
        Ext.getBody().unmask('Обработка...');//Демаскирование области загрузки окна
        this.Window=Window;//Сохранение созданного окна в свойство класса
        return Window;//метод возвращает объект окна    
    }//Окончание проверки на существование окна
    {
        this.Window=ObjectWindow.Window;    
    } 
   
} 



//Метод создания модального окна
//ObjectWindow=объект класса Windows; Тип:объект
//Item=Элемент который будет вставлен в окно; Тип:объект 
function CreateWindowModal(ObjectWindow,Item)
{
     Item = Item ? Item :'';//Если параметр не задан, то присваеваеться пустая строка
     if (!ObjectWindow.Window)//Проверка на существование окна 
     {
        Ext.getBody().mask('Обработка...');//Маскирование области загрузки окна
        var Window = new Ext.Window( //Описание объекта окна
                            {
                                layout : 'fit', //Элемент который находиться внутри окна, полностью заполняет его
                                title :this.Title,//Заголовок окна
                                closeAction : 'destroy',//Событие при закртии окна. destroy означает что окно уничтожаеться
                                width : this.Width,//Начальная ширина окна
                                height : this.Height,//Начальная высота окна
                                resizable : this.Resizable,//Возможность изменять размеры окна мышкой
                                modal:true,//признак того что окно модальное
                                x : this.XCoord,//Начальная позиция окна по оси X
                                y : this.YCoord,//Начальная позиция окна по оси Y
                                items : [Item],//Элемент который будет находиться в окне
                                listeners : 
                                {
                                    destroy : function()//обработка события destroy
                                    {
                                        ObjectWindow.Window = null;//объекту окна присваеваем значение null
                                    }
                                }
                            });//Окончание описания объекта окна
        Ext.getBody().unmask('Обработка...');//Демаскирование области загрузки окна
        this.Window=Window;//Сохранение созданного окна в свойство класса
        return Window;//метод возвращает объект окна    
    }//Окончание проверки на существование окна
    {
        this.Window=ObjectWindow.Window;    
    } 
    
}   



//Метод создания окна с возможностью свернуть и развернуть
//MinimizableArea=Объект области сворачивания 
function CreateWindowMinMax(ObjectWindow,Item,MinimizableArea)
{
     Item = Item ? Item :'';//Если параметр не задан, то присваеваеться пустая строка
     if (!ObjectWindow.Window)//Проверка на существование окна 
     {
        Ext.getBody().mask('Обработка...');//Маскирование области загрузки окна
        var Window = new Ext.Window( //Описание объекта окна
                            {
                                layout : 'fit', //Элемент который находиться внутри окна, полностью заполняет его
                                title :this.Title,//Заголовок окна
                                closeAction : 'destroy',//Событие при закртии окна. destroy означает что окно уничтожаеться
                                width : this.Width,//Начальная ширина окна
                                height : this.Height,//Начальная высота окна
                                minimizable: true,//сворачивание окна
                                maximizable:true,//разворачивание окна 
                                resizable : this.Resizable,//Возможность изменять размеры окна мышкой
                                x : this.XCoord,//Начальная позиция окна по оси X
                                y : this.YCoord,//Начальная позиция окна по оси Y
                                listeners :  
                                {
                                    minimize:function()//Описание события сворачивания
                                    {
                                        Window.hide();//Скрытие окна
                                        var ButtonMinimizable = Ext.create('Ext.button.Button',//Создание кнопку которая будет наодиться в области сворачивания. Данная кнопка заменяет собой окно
                                        {
                                            text    : Window.title,//Текст кнопки такой же как и заголовок окна
                                            handler : function()//Действия при нажатии на кнопку 
                                            {
                                                Window.show();//Отображение окна 
                                                MinimizableArea.remove(obj);//Удаление окна из области сворачивания
                                            }
                                        });
                                        MinimizableArea.add(ButtonMinimizable)//Дабавление к области сворачивания созданной кнопки
                                    },
                                    
                                    destroy : function()//обработка события destroy
                                    {
                                        ObjectWindow.Window = null;//объекту окна присваеваем значение null
                                    }
                                },
                                items : [Item]//Элемент который будет находиться в окне
                            });//Окончание описания объекта окна
        Ext.getBody().unmask('Обработка...');//Демаскирование области загрузки окна
        this.Window=Window;//Сохранение созданного окна в свойство класса
        return Window;//метод возвращает объект окна    
    }//Окончание проверки на существование окна
    {
        this.Window=ObjectWindow.Window;    
    }
} 


function CreateWindowDestroyClear(ObjectWindow,Item)
{    
     Item = Item ? Item :'';//Если параметр не задан, то присваеваеться пустая строка
     
     if (!ObjectWindow.Window)//Проверка на существование окна 
     {
        Ext.getBody().mask('Обработка...');//Маскирование области загрузки окна
        var Window = new Ext.Window( //Описание объекта окна
                            {
                                layout : 'fit', //Элемент который находиться внутри окна, полностью заполняет его
                                title :this.Title,//Заголовок окна
                                closeAction : 'destroy',//Событие при закртии окна. destroy означает что окно уничтожаеться
                                width : this.Width,//Начальная ширина окна
                                height : this.Height,//Начальная высота окна
                                resizable : this.Resizable,//Возможность изменять размеры окна мышкой
                                closable : false,
                                x : this.XCoord,//Начальная позиция окна по оси X
                                y : this.YCoord,//Начальная позиция окна по оси Y
                                items : [Item],//Элемент который будет находиться в окне
                                listeners : 
                                {
                                    destroy : function()//обработка события destroy
                                    {
                                        ObjectWindow.Window = null;//объекту окна присваеваем значение null
                                    }
                                }
                            });//Окончание описания объекта окна
        Ext.getBody().unmask('Обработка...');//Демаскирование области загрузки окна
        this.Window=Window;//Сохранение созданного окна в свойство класса
        return Window;//метод возвращает объект окна    
    }//Окончание проверки на существование окна
    {
        this.Window=ObjectWindow.Window;    
    } 
   
} 


function CreateWindowMaximizableDestroy(ObjectWindow,Item)
{    
     Item = Item ? Item :'';//Если параметр не задан, то присваеваеться пустая строка
     
     if (!ObjectWindow.Window)//Проверка на существование окна 
     {
        Ext.getBody().mask('Обработка...');//Маскирование области загрузки окна
        var Window = new Ext.Window( //Описание объекта окна
                            {
                                layout : 'fit', //Элемент который находиться внутри окна, полностью заполняет его
                                title :this.Title,//Заголовок окна
                                closeAction : 'destroy',//Событие при закртии окна. destroy означает что окно уничтожаеться
                                width : this.Width,//Начальная ширина окна
                                height : this.Height,//Начальная высота окна
                                resizable : this.Resizable,//Возможность изменять размеры окна мышкой
                                maximizable:true,//разворачивание окна 
                                x : this.XCoord,//Начальная позиция окна по оси X
                                y : this.YCoord,//Начальная позиция окна по оси Y
                                items : [Item],//Элемент который будет находиться в окне 
                                listeners : 
                                {
                                    destroy : function()//обработка события destroy
                                    {
                                        ObjectWindow.Window = null;//объекту окна присваеваем значение null
                                    }
                                }
                            });//Окончание описания объекта окна
        Ext.getBody().unmask('Обработка...');//Демаскирование области загрузки окна
        this.Window=Window;//Сохранение созданного окна в свойство класса
        return Window;//метод возвращает объект окна    
    }//Окончание проверки на существование окна
    {
        this.Window=ObjectWindow.Window;    
    } 
   
} 


//Конструктор класса "окно"
//Параметры: 
//Title=Заголовок окна; Тип:строка
//Width=Начальная ширина окна; Тип:целое
//Height=Начальная высота окна; Тип:целое
//XCoord=Начальное положение окна по оси X; Тип:целое
//YCoord=Начальное положение окна по оси Y; Тип:целое
//Resizable=Возможность изменять размеры окна мышкой; Тип:булевское
function Windows(Title,Width,Height,XCoord,YCoord,Resizable)
{
    this.Title = Title ? Title :'';//Если параметр не задан, то присваеваеться пустая строка        
    this.Width = Width ? Width :550;//Если параметр не задан, то присваеваеться 550px        
    this.Height = Height ? Height :400;//Если параметр не задан, то присваеваеться 400px        
    this.XCoord = XCoord ? XCoord :40;//Если параметр не задан, то присваеваеться 40px
    this.YCoord = YCoord ? YCoord :60;//Если параметр не задан, то присваеваеться 60px       
    this.Resizable = Resizable ? Resizable :true;//Если параметр не задан, то присваеваеться true        
    this.Window=null;//Созданное окно
    this.CreateWindowSympleHide=CreateWindowSympleHide;//Объявление метода создания простого окна с методом закрытия hide
    this.CreateWindowSympleDestroy=CreateWindowSympleDestroy;//Объявление метода создания простого окна с методом закрытия destroy
    this.CreateWindowModal=CreateWindowModal;//Объявление метода создания простого окна с методом закрытия destroy
    this.CreateWindowMinMax=CreateWindowMinMax;//Объявление метода создания окна с возможностью свернуть развернуть
    this.CreateWindowDestroyClear=CreateWindowDestroyClear;//
    this.CreateWindowMaximizableDestroy=CreateWindowMaximizableDestroy;//
}