// div id = zcharts

var clsAjax = function()
{
    this.requests = {};
    
}

clsAjax.prototype = 
{
requests: null,
sendRequest: function (url,onSuccess,onFail,Scope)
            {
            var myScope = Scope;
            if (!myScope) MyScope = this;
            
              clsAjax[map.Ajax(url)] = 
                {
                    success: onSuccess,
                    onFail : onFail,
                    scope: myScope
                }
            },
requestDone: function (success,id,content)
            {
             clsAjax[id].success.call( clsAjax[id].scope,content);
            }
};

var mapAjax = new clsAjax();


var isZChartsActive = false;

var zChart;

function zChartsOnFocus()
{
       if (!zChart)
       { // Build The Interface In The First Run
         zChart = new clsZCharts();
         
         
         
       }

       isZChartsActive = true;
       zChart.curPage = 1;
       zChart.sendRequest();
       
       
	
}

function zChartsLostFocus()
{
    isZChartsActive = false;
    zChart.zchartsSelection.hide();

}

function zChartsMapMove()
{
 if (isZChartsActive)
 {
        zChart.curPage = 1;
        zChart.sendRequest();
       }
}

clsZCharts = function ()
{

      
        this.arMenu = [];
        this.curPage = 1;

        this.frmZCharts = new createForm({width: 738, height: 300,target: 'zcharts', blockScreen: false,closebtn: false,noFrame: true});
        
        this.topSep = this.frmZCharts.addDiv({style: 'x-zc-topsep'});
        this.rhtSep = this.frmZCharts.addDiv({style: 'x-zc-rhtsep'});
        this.zCMain = this.frmZCharts.addDiv({style: 'x-zc-main-table'});
        
        this.zCRightMenuBody = this.frmZCharts.addDiv({style: 'x-zc-menu-body',target: this.zCMain});
        
        this.zCRightMenuBody_heading = this.frmZCharts.addDiv({style: 'x-zc-menu-body-heading',target: this.zCRightMenuBody});
        
        
        this.zCRightMenuBody_main = this.frmZCharts.addDiv({style: 'x-zc-menu-body-main',target: this.zCRightMenuBody});
        for (var i = 0; i < 10; i ++ )
        this.createMenuItem("תפריט " + i);
        
        
        this.zCRightMenuBody_nav = this.frmZCharts.addDiv({style: 'x-zc-menu-body-nav',target: this.zCRightMenuBody});
        this.zCRightMenuBody_nav_left = this.frmZCharts.addDiv({style: 'x-zc-menu-body-lft',target: this.zCRightMenuBody_nav});
        this.zCRightMenuBody_nav_left.dom.innerHTML = "הבא ◄"
        this.zCRightMenuBody_nav_left.on('mousedown',this.nextPage,this);
        this.zCRightMenuBody_nav_center = this.frmZCharts.addDiv({style: 'x-zc-menu-body-center',target: this.zCRightMenuBody_nav});
        this.zCRightMenuBody_nav_center.dom.innerHTML = "1/10"
        this.zCRightMenuBody_nav_right = this.frmZCharts.addDiv({style: 'x-zc-menu-body-rgt',target: this.zCRightMenuBody_nav});
        this.zCRightMenuBody_nav_right.dom.innerHTML = " ► הקודם"
        this.zCRightMenuBody_nav_right.on('mousedown',this.prevPage,this);
        


        this.zCLeftChartBody = this.frmZCharts.addDiv({style: 'x-zc-chart-body',target: this.zCMain});
        this.zCLeftChartBody_heading = this.frmZCharts.addDiv({style: 'x-zc-chart-body-heading',target: this.zCLeftChartBody});
        this.zCLeftChartBody_heading.dom.innerHTML = '';
        this.zCLeftChartBody_chart = this.frmZCharts.addDiv({style: 'x-zc-chart-body-chart',target: this.zCLeftChartBody});
        this.zCLeftChartBody_chart_change = this.frmZCharts.addDiv({style: 'x-zc-chart-body-chart-change',target: this.zCLeftChartBody});
        this.zCLeftChartBody_chart_change.dom.innerHTML = 'החלף תרשים'
        this.zCLeftChartBody_chart_change.on('click',this.showHidezchartsSelection,this);
        
        this.chart = new FusionCharts("/zazim/zcharts/charts/Column3D.swf", 'c3d', "563", "241", "0", "1");
        this.chart.setDataXML("<chart></chart>");		   
        
       // this.chartType = 'RoomsPie';
        this.chartType = 'Prices';
        this.selectedArea = '';
        this.pricesChartRoomNo = 3;
        
        
       	this.chart.render( this.zCLeftChartBody_chart.dom.id)
       	
       	
       	this.zchartsSelection = new createForm({width:250,height:150,noframe:true,amouse:true,blockScreen:false});
       	this.zchartsSelection.hide();
       	this.zchartsSelection.content.dom.innerHTML = "";
       	this.zchartsSelection.content.dom.className = "x-zc-chart-body-chart-change-menu";
       	
       	this.zchartsSelection.content.on('mousedown',this.changeChart,this);
       	
       	this.MenuHeading = this.zchartsSelection.addDiv({style:'zcm-heading'});
       	this.PieChart = this.zchartsSelection.addDiv({style:'zcm-item'});
       	this.RoomsChart2 =  this.zchartsSelection.addDiv({style:'zcm-item'});
       	this.RoomsChart3 = this.zchartsSelection.addDiv({style:'zcm-item'});
       	this.RoomsChart4 = this.zchartsSelection.addDiv({style:'zcm-item'});
       	this.RoomsChart5 = this.zchartsSelection.addDiv({style:'zcm-item'});
       	
        this.MenuHeading.dom.innerHTML = 'בחר את סוג הגרף:';
        this.PieChart.dom.innerHTML = 'התפלגות נכסים לפי כמות חדרים';
        this.PieChart.cType = "RoomsPie";
        this.PieChart.cRooms = -1;
       	this.RoomsChart2.dom.innerHTML = 'גרף מחירים היסטורי לדירות 2 חדרים';
       	this.RoomsChart2.cType = "Prices";
        this.RoomsChart2.cRooms = 2;
       	this.RoomsChart3.dom.innerHTML = 'גרף מחירים היסטורי לדירות 3 חדרים';
       	this.RoomsChart3.cType = "Prices";
        this.RoomsChart3.cRooms = 3;
       	this.RoomsChart4.dom.innerHTML = 'גרף מחירים היסטורי לדירות 4 חדרים';
       	this.RoomsChart4.cType = "Prices";
        this.RoomsChart4.cRooms = 4;
       	this.RoomsChart5.dom.innerHTML = 'גרף מחירים היסטורי לדירות 5 חדרים';
       	this.RoomsChart5.cType = "Prices";
        this.RoomsChart5.cRooms = 5;

      /* 
        this.rhtLocationsMenu = this.frmZCharts.addDiv({style: 'rhtLocationsMenu'});
         
        this.menuItem = this.frmZCharts.addDiv({style: 'locMenuItem', target: this.rhtLocationsMenu,text: 'testExtent'});
        this.menuItem.on('click',function () {alert(map.getExtent());} );

        this.topChartsMenu = this.frmZCharts.addDiv({style: 'topChartsMenu'});
        this.mainChartDiv = this.frmZCharts.addDiv({style: 'mainChartDiv'});

; */
       	
       	
}
clsZCharts.prototype = 
{
// form
frmZCharts: null,
// DIVS
topSep: null,
rhtSep: null,
zCMain: null,
zCRightMenuBody: null,
zCRightMenuBody_heading: null,
zCRightMenuBody_main: null,
zCRightMenuBody_nav: null,
zCRightMenuBody_nav_left: null,
zCRightMenuBody_nav_center: null,
zCRightMenuBody_nav_right: null,
// Menu
arMenu: null,
arAssets: null,
curPage: 1,
itemsPerPage: 10,
LOD: '',
maxPages: null,
// Charts
chartType: null,
selectedArea: null,
pricesChartRoomNo:null,

changeChart: function(evt,src)
{
    var OBJ = Ext.get(evt.target);
    if (OBJ.cType)
    {
        this.chartType = OBJ.cType;
        if (OBJ.cRooms) this.pricesChartRoomNo = OBJ.cRooms;
        this.zchartsSelection.hide();
        this.sendRequest();
    
    }
},
showHidezchartsSelection:  function(evt,src)
{
 if (this.zchartsSelection.isVisible)
 {   
    this.zchartsSelection.hide();
  }
  else
 {
    this.zchartsSelection.show(evt,src);
 }
},
nextPage: function ()
{
    if (!this.maxPages) return;
    if (this.curPage < this.maxPages )
        this.drawMenu(this.curPage + 1);
},
prevPage: function ()
{
    if (!this.maxPages) return;
    if (this.curPage > 1 )
        this.drawMenu(this.curPage - 1);
},
createMenuItem: function (ITEM)
{


    var menuItem =  this.frmZCharts.addDiv({style: 'x-zc-menu-body-main-item',target: this.zCRightMenuBody_main});
    menuItem.dom.innerHTML = ITEM.CityName;
    //x-zc-menu-body-main-item-selected
    if ( ITEM.NybName != '')  menuItem.dom.innerHTML += " - " +  ITEM.NybName ;
//    if ( ITEM.Selected)  menuItem.dom.innerHTML += "*" ;
    if ( ITEM.Selected)  menuItem.dom.className = "x-zc-menu-body-main-item-selected" ;
    menuItem.ITEM = ITEM;
    menuItem.on('mousedown',this.selectMenuItem,this);
    this.arMenu.push(menuItem);
    menuItem.menuIndex = this.arMenu.length - 1;
    return menuItem
},
destroyMenuItem: function (menuItem)
{
   menuItem.ITEM = null;
   this.arMenu.remove(menuItem);
   this.frmZCharts.removeDiv(menuItem);
    
    return menuItem
},
selectMenuItem: function(evt)
{
    var ITEM = Ext.get(evt.target).ITEM;
    this.selectedArea = ITEM.CityName + '|' + ITEM.NybName;
    this.sendRequest();
    
},
clearMenu: function ()
{
    while (this.arMenu.length > 0)
        this.destroyMenuItem(this.arMenu.pop());
},
drawMenu: function (inPage)
{
   this.clearMenu();
   if (this.arAssets.length == 0) { 
    this.zCRightMenuBody_nav_center.dom.innerHTML = "0/0";
    this.zCRightMenuBody_heading.dom.innerHTML = 'אין נתונים לאזור זה במפה'
    }
   
   switch (this.LOD)
      {
       case 'MajorCities':
          if (this.arAssets.length != 0) this.zCRightMenuBody_heading.dom.innerHTML = 'הערים הגדולות המופיעות במפה: <br>(בחר עיר)' 
       break;
       case 'AllCities':
          if (this.arAssets.length != 0) this.zCRightMenuBody_heading.dom.innerHTML = 'הערים המופיעות במפה: <br>(בחר עיר)' 
       break;
       case 'NBHoods':
          if (this.arAssets.length != 0)this.zCRightMenuBody_heading.dom.innerHTML = 'השכונות המופיעות במפה: <br>(בחר שכונה)' 
       break;
       case 'ViewPort':
        this.zCRightMenuBody_heading.dom.innerHTML = 'הנתונים מוצגים לאיזור הנראה במפה' 
       break;
      }
      
   this.maxPages =  Math.ceil((this.arAssets.length+1) / this.itemsPerPage);
   
   
   if (inPage) if (inPage <=  this.maxPages) this.curPage = inPage;
   
   this.zCRightMenuBody_nav_center.dom.innerHTML = (this.curPage) + "/" +  this.maxPages;
   
   for (var i = (this.curPage - 1) * this.itemsPerPage; i < this.arAssets.length && i < this.curPage * this.itemsPerPage; i++)
   {
     this.createMenuItem(this.arAssets[i]);
   }
},
// Functions
sendRequest: function ()
{
try
{

          Ext.Ajax.request({
            url : "/zazim/zcharts/chartData.aspx?" + map.getExtent() + "&chartType=" + this.chartType + "&action=" + Ext.fly('x-i-vAddType').dom.options[Ext.fly('x-i-vAddType').dom.selectedIndex].value + "&RoomNo=" + this.pricesChartRoomNo,
            success : function(ans){
                                          var OBJ = eval(ans.responseText );
                                          this.LOD = OBJ.LOD;
                                          this.arAssets =  OBJ.Assets;
                                          this.drawMenu(this.curPage);
                                            this.zCLeftChartBody_heading.dom.innerHTML = OBJ.caption;
                                           if (OBJ.XML != '')
                                          {
				                            this.chart.setDataXML(OBJ.XML);
                                          }
            },
            failure :function(){},
            params : {
               selectedArea: this.selectedArea
            },
            scope : this
        });
          /*  mapAjax.sendRequest("zcharts/chart.ajx?" + map.getExtent(),
                                function(ans){
                                           
                                          var OBJ = eval(ans );
                                          this.LOD = OBJ.LOD;
                                          //this.zCRightMenuBody_main.dom.innerHTML = '';
                                       
                                          this.arAssets =  OBJ.Assets;
                                          
                                          this.drawMenu(1);
 
                                          
                                          if (OBJ.XML != '')
                                          {
				                            this.chart.setDataXML(OBJ.XML);
                                          }
                                          },
                                function() {}
                                ,
                                this
                                );*/
}
catch (ex) {alert(ex);}

},
initA: function()
{
}
}