

    
    Global = {};
    Global.mainView = {};
    Global.table = {};
    MainView = {};
    MainView.prev = function(inc){
        if(!inc) var inc = -1
        var d = Global.mainView.date;
        Global.mainView.date.setMonth(d.getMonth() + inc) 
        view.mainShow();    
    };
    MainView.next = function(){
        MainView.prev( 1 );
    };

    ( Global.reset = function(){
        Global.mainView.date = new Date();
        Global.table.mutation = 0;
    })();
  
  // Для ComboBox (select)  
  function MM_jumpMenu(targ,selObj,restore){ //v3.0
    eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
    if (restore) selObj.selectedIndex=0;
  }

                                    
    Date.prototype.toString = function() { 
        var d = this.getDate();
        d = (d < 10) ? "0" + d : d;
        var m = this.getMonth() + 1;
        m = (m < 10) ? "0" + m : m;
        return (d + "." + m + "." + this.getFullYear());
    };


    Date.prototype.getMonthTrunc = function() { 
        var d = this.getDate();
        var m = this.getMonth() + 1;
        m = (m < 10) ? "0" + m : m;
        return (m + "." + this.getFullYear());
    };

    
    utils = {};
    utils.parseDate = function(sDate){
        var dmy = {};
        try {
            dmy.d = parseInt(sDate.substr(0,2),10);
            dmy.m = parseInt(sDate.substr(3,2),10)-1;
            dmy.y = parseInt(sDate.substr(6,4),10);  
            return dmy;
        } catch(e) { return null; }
    };
    
    utils.strToDate = function(sDate){
        try {
            var dmy = utils.parseDate(sDate);       
            return new Date(dmy.y, dmy.m, dmy.d);
        } catch(e) { return null; }
    };
    
    utils.padLeft = function(num, ch, count){
        var l = ("" + num).length;
        var pad = "";
        for(var i = 0; i < count - l; i++) pad += ch;
        return pad + num;
    };
    
    CDateTimeItem = function(d) {
        this.setDate = function(d){ 
            if(d == null) this.dateTime = new Date();
            else if(d instanceof Date) this.dateTime = d;
            else if(typeof(d) == 'string') this.dateTime = utils.strToDate(d);
        };    
        this.setHours = function(h){ this.dateTime.setHours(h); };
        this.getHours = function(){ return utils.padLeft(this.dateTime.getHours(), "0", 2); };      
        this.getDate = function(){ return this.dateTime.toString(); };
            this.getTime = function(){ return this.dateTime.getTime(); };
            this.addTime = function(delta){ this.dateTime = new Date(this.dateTime.getTime() + delta); };
        this.setDate(d);    
    };
    
    Period = {OTHER:0, DAY:1, WEEK:2, MONTH:3, YEAR:4};    
    TimeModel = {ds:[], period:Period.DAY};  
    
    TimeModel.getDelta = function() {
        return TimeModel.ds[1].getTime() - TimeModel.ds[0].getTime();
    };  
    
      
    TimeModel.calculateDelta = function(d, dir) {  
    
        var a = [0,0,0];        
        var sign = 1;
        if (dir && dir < 1) sign = -1;
                
        switch(TimeModel.period){
            case Period.YEAR: a = [sign, 0, 0]; break;
            case Period.MONTH: 
            case Period.OTHER: a = [0, sign, 0]; break;
            case Period.WEEK: a = [0, 0, sign * 7]; break;
            case Period.DAY: 
            case Period.OTHER: a = [0, 0, sign]; break;
        }
        
        var d1 = new Date(d.getFullYear() + a[0], d.getMonth() + a[1], d.getDate() + a[2], d.getHours());
                       
        switch(TimeModel.period){
            case Period.YEAR: 
            case Period.MONTH:
            case Period.WEEK:
            case Period.OTHER:
                d1.setDate(d1.getDate() - sign);
                d1.setHours(23);
            break;
            case Period.DAY: 
            break;
        }
            
        var delta = d1.getTime() - d.getTime();
        TimeModel.delta = Math.abs(delta);
        return delta;
    
    };  
    
        
    TimeModel.setBasicPeriod = function(d, delta){
        var dt = new Date(d.getTime());
        dt.setMinutes(0); dt.setSeconds(0); dt.setMilliseconds(0);           
        
        if(!delta) {
            var delta = TimeModel.calculateDelta(d, 1);
        }
                        
        TimeModel.ds[0].setDate(dt);    
        TimeModel.ds[1].setDate(new Date(dt.getTime() + delta - 1));        
        
        var minDate = new Date( TimeModel.ds[0].getTime() - TimeModel.getDelta() - 1);
        TimeModel.setComparingPeriod(minDate); 
        filter.setDatePickerMaxDate("comparingBeginDate", minDate);
        
    };
    
    TimeModel.setComparingPeriod = function(d){
        var dt = new Date(d.getTime());
        TimeModel.ds[2].setDate(dt);
        var delta = TimeModel.getDelta();
        dt = new Date(dt.getTime() + delta);
        TimeModel.ds[3].setDate(dt);
    };
    
        
    TimeModel.checkBottomTime = function(d){
        if(!d) var d = TimeModel.ds[0].dateTime;
        var d1 = new Date(d.getTime());
        d1.setHours(d1.getHours(),0,0,0);
        var d2 = TimeModel.bottomTime;
        d2.setHours(d2.getHours(),0,0,0);
        if(Math.abs(d1.getTime() - d2.getTime()) >= 24 * 60 * 60 * 1000) return true;             
        return false;
    };
    
    for(i = 0; i < 4; i++) TimeModel.ds[i] = new CDateTimeItem();  
    
    // ***************************************
    
    TimeModel.init = function(){
        
        var dt = new Date();    
        dt.setHours(dt.getHours(),0,0,0);	
        var a = [0,0,0];        
        var sign = -1;	
        switch(TimeModel.period){
            case Period.YEAR:  a = [sign, 0, 0]; break;
            case Period.MONTH: 
            case Period.OTHER: a = [0, sign, 0]; break;
            case Period.WEEK:  a = [0, 0, sign * 7]; break;
            case Period.DAY:   a = [0, 0, sign]; break;
        }        
        var d1 = new Date(dt.getFullYear() + a[0], dt.getMonth() + a[1], dt.getDate() + a[2], dt.getHours());                 
        
        switch(TimeModel.period){
            case Period.YEAR: 
            case Period.MONTH:
            case Period.WEEK:
            case Period.OTHER:
                        // Коррекция первого дня периода    
                d1.setDate(d1.getDate() - sign);
                d1.setHours(0);
            break;
            case Period.DAY: 
            break;
        }
        
        var delta = d1.getTime() - dt.getTime();
        
        TimeModel.delta = Math.abs(delta);
                
        TimeModel.setBasicPeriod(new Date(dt.getTime() + delta), -delta);
                    
        TimeModel.bottomTime = new Date(TimeModel.ds[0].getTime());
        
        var bottom = new Date();
        if(TimeModel.period != Period.OTHER)
            bottom = TimeModel.bottomTime;
        filter.setDatePickerMaxDate("beginDate", bottom);
                
        menu.initFavoritesFromCookie();
                                
    };
    
    TimeModel.addTime = function(delta){
        for(var i = 0; i < 4 ; i++)
                TimeModel.ds[i].addTime(delta);
    };
                        
    filter = {};
    
    var menu = {}
    menu.selectedGroup = 0;
                  
    menu.reports = [];
    
      menu.reports[0] = { name: 'Просмотры страниц', order: [1, 3], mutable: false };
      menu.reports[1] = { name: 'Хосты', order: [1, 3], mutable: false };
      menu.reports[2] = { name: 'Страны мира', order: [-2, -3], mutable: true };
      menu.reports[3] = { name: 'Регионы России', order: [-2, -3], mutable: true };
      menu.reports[4] = { name: 'Глубина просмотра', order: [-1, -1], mutable: false };
      menu.reports[5] = { name: 'Браузеры', order: [-2, -3], mutable: true };
      menu.reports[6] = { name: 'Опереционные системы', order: [-2, -3], mutable: true };
      menu.reports[7] = { name: 'Разрешение экрана', order: [-2, -3], mutable: true };
      menu.reports[8] = { name: 'Поддержка Flash', order: [-2, -3], mutable: true };
      menu.reports[9] = { name: '', order: [-2, -3], mutable: false };
      menu.reports[10] = { name: 'Страницы входа', order: [-2, -3], mutable: false };
      menu.reports[11] = { name: 'Страницы выхода', order: [-2, -3], mutable: false };
      menu.reports[12] = { name: 'Ресурсы-источники', order: [-2, -3], mutable: false };
      menu.reports[13] = { name: 'Поисковые системы', order: [-2, -3], mutable: false };
      menu.reports[14] = { name: 'Все ресурсы', order: [-2, -3], mutable: false };
      menu.reports[15] = { name: 'Продолжительность', order: [1, 1], mutable: false };
      menu.reports[16] = { name: 'Самые популярные', order: [-2, -3], mutable: false };
      menu.reports[17] = { name: 'Уникальные посетители', order: [1, 3], mutable: false };
      menu.reports[18] = { name: 'По посещаемости', order: [-2, -3], mutable: true };
      menu.reports[19] = { name: '', order: [1, 1], mutable: false };
      menu.reports[20] = { name: '', order: [1, 1], mutable: false };
      menu.reports[21] = { name: '', order: [1, 1], mutable: false };
      menu.reports[22] = { name: '', order: [1, 1], mutable: false };
      menu.reports[23] = { name: '', order: [1, 1], mutable: false };
      menu.reports[24] = { name: '', order: [1, 1], mutable: false };
      menu.reports[25] = { name: '', order: [1, 1], mutable: false };
      menu.reports[26] = { name: '', order: [1, 1], mutable: false };
      menu.reports[27] = { name: '', order: [1, 1], mutable: false };
        
    menu.favorites = [];
    
    menu.initFavoritesFromCookie = function(){
        var f = getCookie("favorit");                
        try{        
            menu.favorites = f.split(","); 
            $('#menu\\:6\\:itemsdiv').html( view.getFavoritesHTML() );        
        } catch(e){ }
    };
        
    menu.closeAll = function(slide){
                
        if(slide) {
            
            $('#menu div').filter(
                function() { return this.id.match(/^menu:\d+:itemsdiv/); }
            ).slideUp('fast'); 
            
        }
        else {
            $('#menu div').filter(
                function() { return this.id.match(/^menu:\d+:itemsdiv/); }
            ).hide();
            menu.selectedGroup = 0;        
                        
            $('#menu td').filter(
                function() { return this.id.match(/^menuItemMarker:\d+/); }
            ).attr('class','menumarker');        
        
            $('#menu td').filter(
                function() { return this.id.match(/^menuItem:\d+/); }
            ).attr('class','menu2ndlvl');        
            
        }
                        
        $('#menu div').filter(
            function() { return this.id.match(/^menu:\d+:titlediv/); }
        ).attr("class", "menuclose");

        $('#menu td').filter(
            function() { return this.id.match(/^menu:\d+:titleicon/); }
        ).attr("class", "menuclosepic");
    }

    
    menu.expand = function(n){
        
        if(n != menu.selectedGroup) menu.selectedGroup = n; 
        else return;
                
        menu.closeAll(true);
                                    
        $('#menu\\:' + n + '\\:itemsdiv').slideDown('fast');
        $('#menu\\:' + n + '\\:titleicon').attr("class","menuopenpic");
        $('#menu\\:' + n + '\\:titlediv').attr("class","menuopen");
        
    }
        
    menu.action = function(actionId, actionName){
        report.set(actionId, actionName);
        
        $('#menu td').filter(
                function() { return this.id.match(/^menuItemMarker:\d+/); }
        ).attr('class','menumarker');        
        
        $('#menu td').filter(
                function() { return this.id.match(/^menuItem:\d+/); }
        ).attr('class','menu2ndlvl');        
        

        $('#menuItemMarker\\:' + actionId).attr('class','menumarkeract');
        $('#menuItem\\:' + actionId).attr('class','menu2ndlvlact');

        $('#menuItemMarker\\:' + actionId + "\\:fav").attr('class','menumarkeract');
        $('#menuItem\\:' + actionId  + "\\:fav").attr('class','menu2ndlvlact');
                    
        $('#tabsRow').show();    
                
        table.order = menu.reports[ report.typeId ].order[ filter.compare ? 1 : 0 ];
        table.pg = 1;
        
        filter.apply();   
        
    };
        
    filter.setBeginHour = function(h){
        var o = $("#beginHour").get(0);
        var func = o.onchange; o.onchange = null;
        try{
            $("#beginHour").val(h);
        } catch(e){}
        o.onchange = func;                
    };
    
    filter.applyTimeModel = function(){
                                    
        var d = TimeModel.ds[0].dateTime;
        $("#beginDate").val( d.toString() );                         
        filter.setBeginHour( TimeModel.ds[0].dateTime.getHours() );
                            
        d = TimeModel.ds[1];
        $("#endDate").val(d.getDate()); 
        $("#endHour").val(d.getHours() + ":00");
        
        d = TimeModel.ds[2];
        $("#comparingBeginDate").val(d.getDate()); 
        $("#comparingBeginHour").val(d.getHours() + ":00");
        
        d = TimeModel.ds[3];
        $("#comparingEndDate").val(d.getDate()); 
        $("#comparingEndHour").val(d.getHours() + ":00");

        filter.initBeginHourSelect();
                
    };
    
    filter.base = ""; 
    filter.compare = false;
    
    var report = {};
    report.typeId = 2;
    report.name = "";  
    
    report.set = function(id, name){
        report.typeId = id;
        report.name = name;
        $('#favoriteReport').get(0).checked = view.isFavorit(id);    
    };
    
    filter.hide = function(){  
        $.each(['#filterRow', '#selectKindRow'], function(i, val) {
                $(val).css('display','none');
        });    
        $('#selectPeriodTable').css('visibility','hidden');  
    };
    filter.show = function(){
        $.each(['#filterRow', '#selectKindRow'], function(i, val) {
                $(val).css('display','');
        });
        $('#selectPeriodTable').css('visibility','visible');  
    };
    
        
    var init = function(){     
                
        try{
            document.getElementById('tableTab').onclick = view.kind;
            document.getElementById('graphTab').onclick = view.kind;
            document.getElementById('other').onclick = view.other;
            document.getElementById('day').onclick = view.day;
            document.getElementById('week').onclick = view.week;
            document.getElementById('month').onclick = view.month;
            document.getElementById('year').onclick = view.year;
            document.getElementById('bCompare').onclick = function() { filter.setCompare(); }
            
//            document.getElementById('pdf').onclick = filter.exportToPdf;
//            document.getElementById('excel').onclick = filter.exportToExcel;
            
            document.getElementById('bApply').onclick = function() { filter.apply(); }
            
            document.getElementById('beginHour').onchange = function() { filter.beginHourOnChange(); }
            
            //        document.getElementById('comparingBeginHour').onchange = function() { filter.comparingHourOnChange(); } 
            
            $('#favoriteReport').click( function(){       
                if( this.checked ) view.addToFavorites();
                else view.removeFromFavorites();
            } );
            
            $.each(['#go_home1', '#go_home2'], function(i, val) {
                $(val).click( 
                    function(){
                        Global.reset();
                        menu.closeAll();
                        $('#tabsRow').hide(); 
                        view.mainShow();
                    }
                );       
            });
            
        }
        catch(e){ alert('Во время инициализации произошла ошибка.' + e); }

                        
        $('#bCompare').get(0).checked = false;
        
//        updateMenu();
//        document.getElementById("gr_navigator").innerHTML = "";
//        menuGenerator(JSMenu);	

//        report.set(2,"");
                
        view.tabsDeselct();
        view.selectTab('day');
//        document.getElementById('day').className = 'statacttab';
//        view.period = 'day';    
        filter.hoursVisible(true);
        filter.setDatePickerRange(false);
        
        TimeModel.init();
        filter.applyTimeModel();                
        view.mainShow();                      

    };
    
    var view = {};  
    view.value = 'table';
    view.period = 'day';
    
   
    view.isFavorit = function(id){
        var fav = menu.favorites;
        for(var i = 0; i < fav.length; i++)
            if(fav[i] == report.typeId)
                return true;
        return false;
    };
         
    
    view.getFavoritesHTML = function() {
        var HTML = "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">";
        for(var i = 0; i < menu.favorites.length; i++){
               HTML += "<tr><td id=\"menuItemMarker:"+ menu.favorites[i]  + ":fav\" class=\"menumarker\"></td>";
               HTML += "<td id=\"menuItem:"+ menu.favorites[i] + ":fav\" class=\"menu2ndlvl\" onclick=\"menu.action( '" + menu.favorites[i] + "' , '' )\" > ";
               HTML += menu.reports[ menu.favorites[i] ].name; 
               HTML += "</td>";
        }
        HTML += "</tr></table>";
        return HTML;
    }
    
    
    view.addToFavorites = function(){    
        
        var f = menu.favorites;

        if( !view.isFavorit() )
            f[f.length] = report.typeId;        
                                            
        setCookie("favorit", f.join(","), 120);
        
        $('#menu\\:6\\:itemsdiv').html( view.getFavoritesHTML() );

    
    };
    
    view.removeFromFavorites = function(){

        var f = menu.favorites;
        
        for(var i = 0; i < f.length; i++){
            if(f[i] == report.typeId) {
                f.splice(i, 1);
                break;
            }
        }
                
        setCookie("favorit", f.join(","), 120);    

        $('#menu\\:6\\:itemsdiv').html( view.getFavoritesHTML() );
        
    };
            
        
    view.show = function(){    
        filter.setCompare(null, false);        
        TimeModel.init();        
        filter.applyTimeModel();        
        filter.apply();
    };
    
    
    view.kind = function(){
                
        var vTable, vGraph; 
        
        vTable = document.getElementById('vTable');
        vGraph = document.getElementById('vGraph');
        
        var tableTab = document.getElementById('tableTab');
        var graphTab = document.getElementById('graphTab');
    
//        if(vTable && vGraph){            
            
            var k = (this.id.toString() == "tableTab");                        
            tableTab.className = k ? 'datactive' : 'data';                        
            graphTab.className = !k ? 'datactive' : 'data';            
            
            view.value = k ? 'table' : 'graph';
            
            filter.apply();
                                    
//      }
    
    };
    
    
    filter.setDatePickerMaxDate = function(id, d){
        $.datepicker._changeDatepicker( $("#" + id).get(0), { maxDate: new Date(d.getTime()) } );
    };   
        
    filter.setDatePickerRange = function(b){
        $.datepicker._changeDatepicker( 
            $('#beginDate').get(0),
              { 
                numberOfMonths: ((b)? 3 : 1), rangeSelect: b 
              }
             );
    };
    
    
    view.selectTab = function(id){
        view.period = id;
        $('#' + id).attr('class','statacttab');
        $('#' + id + "_left").attr('class','statacttablc');
        $('#' + id + "_right").attr('class','statacttabrc');
    }
      
    view.other = function(){
        TimeModel.period = Period.OTHER;
        view.tabsDeselct();
        view.selectTab('other');
        filter.hoursVisible(false);
        filter.setDatePickerRange(true);
        view.show();  
    };
     
    view.day = function(){
        TimeModel.period = Period.DAY;
        view.tabsDeselct();
        view.selectTab('day');
        filter.hoursVisible(true);
        filter.setDatePickerRange(false);
        view.show();  
    };
    
    view.week = function(){                
        TimeModel.period = Period.WEEK;
        view.tabsDeselct();        
        view.selectTab('week');        
        filter.hoursVisible(false);        
        filter.setDatePickerRange(false);        
        view.show();        
    };
    
    
    view.month = function(){
        TimeModel.period = Period.MONTH;
        view.tabsDeselct();
        view.selectTab('month');
        filter.hoursVisible(false);
        filter.setDatePickerRange(false);
        view.show();
    };
      
    view.year = function(){
        TimeModel.period = Period.YEAR;
        view.tabsDeselct();        
        view.selectTab('year');
        filter.hoursVisible(false);
        filter.setDatePickerRange(false);
        view.show();
    };
    
    
    view.tabsDeselct = function(){
                        
        var re = /^other$|^day$|^week$|^month$|^year$/;
        $('td').filter(
            function() { return this.id.match(re); }
        ).attr("class", "stattab");
        
        re = /^other_left$|^day_left$|^week_left$|^month_left$|^year_left$/;
        $('td').filter(
            function() { return this.id.match(re); }
        ).attr("class", "stattablc");

        re = /^other_right$|^day_right$|^week_right$|^month_right$|^year_right$/;
        $('td').filter(
            function() { return this.id.match(re); }
        ).attr("class", "stattabrc");
        
    };
               
    filter.setCompare = function(event, state){
        var o = document.getElementById('bCompare');        
        filter.compare = o.checked;
        
        table.order = menu.reports[ report.typeId ].order[ filter.compare ? 1 : 0 ];
        table.pg = 1;
        
        filter.hoursVisible(view.period == 'day');
        $('#blockComparingBeginDate').css('visibility', filter.compare ? 'visible' : 'hidden');
        $('#blockComparingImageBeginDate').css('visibility', filter.compare ? 'visible' : 'hidden');
        $('#comparingLabelEndDate').css('visibility', filter.compare ? 'visible' : 'hidden');
        $('#blockComparingEndDate').css('display', filter.compare ? '' : 'none');        
    };
                                          
    filter.exportToPdf = function(){      
        var url = filter.base + "filefactory" + filter.getParameters() + "&file=pdf";
        url += "&v=" + (new Date()).getTime();  // debug
        window.open(url,'newwindow');
    };
    
    filter.exportToExcel = function(){
        var url = filter.base + "filefactory" + filter.getParameters() + "&file=excel";
        url += "&v=" + (new Date()).getTime();  // debug    
        url += ".xls"
        window.open(url,'newwindow');
    };
      
    
    filter.beginHourOnChange = function(){
                    
        var h = $('#beginHour').val();
        h -= 0 + TimeModel.ds[0].getHours();
        var delta = h * 60 * 60 * 1000;
        var tmpDate = new Date(TimeModel.ds[0].getTime() + delta);
        TimeModel.addTime(delta);
                    
        var d = TimeModel.ds[1];
        $("#endDate").val(d.getDate());
        $("#endHour").val(d.getHours() + ":00");
        
        d = TimeModel.ds[2];
        $("#comparingBeginDate").val(d.getDate());
        $("#comparingBeginHour").val(d.getHours() + ":00");
        
        d = TimeModel.ds[3];
        $("#comparingEndDate").val(d.getDate());
        $("#comparingEndHour").val(d.getHours() + ":00");
    
    };
    
                
    filter.initBeginHourSelect = function(){
        
        if(TimeModel.period != Period.DAY) return;

        var o = $('#beginHour').get(0);                                
                
        var selectedIndex = o.selectedIndex;

        var size = 0;
        if( !TimeModel.checkBottomTime( TimeModel.ds[0].dateTime ) ){
            size = parseInt(TimeModel.bottomTime.getHours());
        }        
        else size = 23;
        var selected = size;        
        if(selectedIndex < size) selected = selectedIndex;
                
        o.length = 0;            
                
        for(var i = 0; i <= size; i++){
            var op = document.createElement('option');                    
            op.value = i;        
            if(i == selected) op.selected = true;
            var text = document.createTextNode(utils.padLeft(i, '0', 2) + ":00");
            op.appendChild(text);        
            o.appendChild(op);                                
        }       
    };
    
    filter.beginDateOnChange = function(){
                                                    
        if(TimeModel.period != Period.OTHER){
            var beginDate = utils.strToDate($("#beginDate").val());
            beginDate.setHours($("#beginHour").val());
            if( TimeModel.checkBottomTime(beginDate) ){
                TimeModel.setBasicPeriod(beginDate);
            }
            else {
                TimeModel.setBasicPeriod(TimeModel.bottomTime);
            }
        }
        else{ 
            TimeModel.setBasicPeriod( TimeModel.ds[0], TimeModel.getDelta() + 1 );
        }
        
        filter.applyTimeModel();        
        filter.beginHourOnChange();                    
    };
    
    filter.comparingDateOnChange = function(){
        var beginDate = utils.strToDate($("#comparingBeginDate").val());
        var endDate = new Date(beginDate.getTime() + TimeModel.getDelta() + 1);    
        $("#comparingEndDate").val(endDate);    
    };
    
            
    filter.hoursVisible = function(b){                
        $('#blockBeginHour').css('display', b ? '' : 'none');
        $('#blockEndHour').css('display', b ? '' : 'none');
        $('#blockComparingBeginHour').css('display', b && filter.compare ? '' : 'none');
        $('#blockComparingEndHour').css('display', b && filter.compare ? '' : 'none');
    };
    
    
    // ->  ******* AJAX запросы **********
        
    var ajaxRequest = null;
    
    var showHelp = function(){        
        if(ajaxRequest) try{  ajaxRequest.abort(); } catch(e) { }         
        
        $('#tabsRow').hide(); 
        menu.closeAll();
        filter.hide();
        
        var url = filter.base + "help.jspf";
        ajaxRequest = $.ajax({
           type: "GET",
           url: url,
           cache: false,
           success: function(data) {
             $("#ajaxframe").html(data);
           },
           error: function(xhr, ajaxOptions, thrownError){
                var error = "На сервере произошла ошибка!\n\n";
    //                error += xhr.responseText;
                error += "\n\nПопробуйте снова.";
                alert(error); 
           },
           complete: function(){ 
                ajaxRequest = null;                
                view.loaderHide(); 
           }
        });                    
    };
    
            
    view.mainShow = function(){
        
        if(ajaxRequest) try{  ajaxRequest.abort(); } catch(e) { }
        filter.hide();
        var url = filter.base + "mainview.jsp?rid=" + window.rid;
        url += "&date=" + Global.mainView.date.getMonthTrunc();
        url += "&v=" + new Date().getTime();
        
        if ( filter.request ) filter.request.abort();
        view.loaderShow();
        
        ajaxRequest = $.ajax({
           type: "GET",
           url: url,
           cache: false,
           success: function(data) {
             $("#ajaxframe").html(data);
           },
           error: function(xhr, ajaxOptions, thrownError){
                var error = "На сервере произошла ошибка!\n\n";
    //                error += xhr.responseText;
                error += "\n\nПопробуйте снова.";
                alert(error); 
           },
           complete: function(){ 
                ajaxRequest = null;                
                view.loaderHide(); 
           }
        });    
    };
        
    var table = {};
    table.order = 1;
    table.pgsize = 25;
    
    table.setMutation = function(n){
        Global.table.mutation = n;
        filter.apply();
    };
    
    var pager = {};

    pager.go = function(n){
        if(table.pg == n) return;
        table.pg = n;
        filter.apply();
    };
    pager.setPgSize = function(n){
        table.pgsize = n;
        table.pg = 1;
        filter.apply();
    };
    
    table.sort = function(n){
        table.order = n;
        table.pg = 1;
        filter.apply();
    };
    
    filter.apply = function(){    

        if(ajaxRequest) try{  ajaxRequest.abort(); } catch(e) { }
        filter.show();

        var url = filter.base + "view.jsp";        
//        var url = "reportgraph.jsp";
                        
//        if(
//        
//            (
//                report.typeId == 0 
//                || report.typeId == 1 
//                || report.typeId == 17
//                || report.typeId == 2
//            )            
//            && view.value == 'table'
//        
//        ) url = "table.jsp";
                
        if( view.value == 'table' )  url = "table.jsp"
//        if( view.value == 'table' )  url = "reporttable.jsp"
                
        url += filter.getParameters() + "&v=" + (new Date()).getTime();
        
//        alert(url);
                           
        if ( filter.request ) filter.request.abort();
        
        view.loaderShow();
        ajaxRequest = $.ajax(
        {
           type: "GET",
           url: url,
           cache: false,
           success: function(data) {
             $("#ajaxframe").html(data);
           },
           error: function(xhr, ajaxOptions, thrownError){
                var error = "На сервере произошла ошибка!\n\n";
                error += xhr.responseText;
                error += "\n\nПопробуйте снова.";
                alert(error); 
           },
           complete: function(){ 
                ajaxRequest = null;
                view.loaderHide(); 
           }
        });    
    };
        
    // *-  ******* AJAX запросы **********

        
    // -*  ******* Формирование параметров запросов **********

    filter.getParameters = function(){    
        var sBeginDate = $('#beginDate').val();
        var sEndDate = $('#endDate').val();        
        if(view.period == 'day'){        
            var sBeginHour = $('#beginHour').val();
            var sEndHour = $('#endHour').val();
            try{
                sEndHour = parseInt(sEndHour.split(":")[0], 10);
            } catch(e){ sEndHour = 0; }
        }        
        if(filter.compare){
            var sComparingBeginDate = $('#comparingBeginDate').val();
            var sComparingEndDate = $('#comparingEndDate').val(); 
            if(view.period == 'day'){
                var sComparingBeginHour = $('#comparingBeginHour').val();
                try{
                    sComparingBeginHour = parseInt(sComparingBeginHour.split(":")[0], 10);
                } catch(e){ sComparingBeginHour = 0; }                            
                var sComparingEndHour = $('#comparingEndHour').val();
                try{
                    sComparingEndHour = parseInt(sComparingEndHour.split(":")[0], 10);
                } catch(e){ sComparingEndHour = 0; }            
            }   
        }                    
        
        var params = "?rid=" + window.rid + "&reportTypeId="+report.typeId+"&view="+view.value+"&period="+view.period;        
        params += '&beginDate=' + sBeginDate;
        params += '&endDate=' + sEndDate;
        if(filter.compare){
            params += '&comparingBeginDate=' + sComparingBeginDate;
            params += '&comparingEndDate=' + sComparingEndDate;
        }
        if(view.period == 'day'){
            params += '&beginHour=' + sBeginHour;
            params += '&endHour=' + sEndHour;
            if(filter.compare){
                params += '&comparingBeginHour=' + sComparingBeginHour;
                params += '&comparingEndHour=' + sComparingEndHour;
            }
        }
        
        params += "&pg=" + table.pg;
        params += "&pgsize=" + table.pgsize;
        params += "&order=" + table.order;
        
        if( menu.reports[ report.typeId ].mutable ){
            params += "&m=" + Global.table.mutation;
        }
        
        return params;    
    };


    // *-  ******* Формирование параметров запросов **********
            

    view.loaderHide = function(){
        document.getElementById('loader').style.display = 'none';  
        document.getElementById('blockView').style.display = '';  
    };
    
    view.loaderShow = function(){
        document.getElementById('loader').style.display = '';  
        document.getElementById('blockView').style.display = 'none';  
    };
    

    // -* Cookies
    
    function setCookie( c_name, value, expiredays ){
        var exdate=new Date();
        exdate.setDate(exdate.getDate()+expiredays);
        document.cookie = c_name+ "=" + escape(value) +
        ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
        };
        
    function getCookie ( cookie_name ){
          var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
          if ( results )
            return ( unescape ( results[2] ) );
          else
            return null;
    };
        
    // *- Cookies
    
    
    // -* Menu
    
    var findMenuElement = function(menu, id){
        var item = null;
        for(var i in menu){
                  if(menu[i].id && menu[i].id == id)
                  {
                          return menu[i];
                  }
                  if(menu[i].node) {
                    item = findMenuElement(menu[i].node, id);
                        if(item && item.id && item.id == id) { 
                          return item;
                        }
                  }		  
        }
    };
        
    var updateMenu = function(){
                
        return;        
        
        JSMenu[5].node = null;
		var preffered = getCookie("favorit"); 
        if(preffered) { 
	        preffered = preffered.split(",");  
	        var arr = [];
	        for(var i = 0; i < preffered.length; i++){
	            var item = findMenuElement(JSMenu, preffered[i]);
	                if(item) {
	                  arr[i] = {};
	                  arr[i].id = item.id;
	                  arr[i].name = item.name;
	                }
	        }
	        JSMenu[5].node = arr;  
        }
		document.getElementById("gr_navigator").innerHTML = "";
		menuGenerator(JSMenu);   
    };
  
    // *- Menu

        
    $(document).ready(
    function()
    {	
                
//        return;

        var now = new Date();
        var yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate());

        $("#dialog_login").dialog();
        $("#dialog_login").dialog('close');
        
        if (FlagUserEnter == false)
        {
          $("#enter_table").hide();
          $("#login_table ").show();
        }
        else
        {
          $("#login_table ").hide();
          $("#enter_table").show();
        }

        $("#a_enter").click(function () {
          $("#dialog_login").dialog('open');
          return true;
        });

        $("#beginDate").datepicker(			    
            {
            mandatory: true,
            firstDay: 1,
            changeFirstDay: false,
            rangeSeparator: "       - ",
            beforeShow: 
                function(){                                    
                    var inst = $.datepicker._getInst($(this).get(0));
                    var rangeSelect = $.datepicker._get(inst, 'rangeSelect')
                    if(rangeSelect){
                    var beginDate = $("#beginDate").val();
                    var endDate = $("#endDate").val();
                    if(beginDate != "" && endDate != "")
                        $(this).val($("#beginDate").val() + "         - " + $("#endDate").val());  
                    }
                },
            onClose: 
                function(){			    
                    var inst = $.datepicker._getInst($(this).get(0));
                    var rangeSelect = $.datepicker._get(inst, 'rangeSelect');
                    if(rangeSelect){
                        var dateRange = $(this).val().split('-');
                        var sBeginDate = $.trim(dateRange[0]);
                        var sEndDate = $.trim(dateRange[1]);
                        var beginDate = utils.strToDate(sBeginDate);
                        var endDate = utils.strToDate(sEndDate);
                        
                        TimeModel.ds[0].setDate(beginDate);                
                        TimeModel.ds[1].setDate(endDate);
                                        
                        $("#beginDate").val(sBeginDate); 
                        $("#endDate").val(sEndDate);                    
                    }
                    filter.beginDateOnChange();
                },
            dateFormat: 'dd.mm.yy',
            rangeSelect: false,
            duration: 0,
            numberOfMonths: 1,
            closeAtTop: false
            }
            
        );

        $("#comparingBeginDate").datepicker(
            {
            mandatory: true,
            firstDay: 1,
            changeFirstDay: false,
            beforeShow: function(){ },
            onClose: function(){
                filter.comparingDateOnChange(); 
            },
            maxDate: new Date(),
            dateFormat: 'dd.mm.yy',
            rangeSelect: false,
            duration: 0,
            numberOfMonths: 1,
            closeAtTop: false
            }
        );								
                
    init();    
    
    });
