/* DirectionBalloon Class */
    function DirectionBalloonClass(){
        var self = this;
        this.entObj = document.getElementById("DirectionBalloon");
        this.diapazon = 0;
        
        this.Close = $(this.entObj).find("div.Close")[0];
        $(this.Close).click(function(){ self.hide(); });       
        
        this.DateLabel = document.getElementById("CalendarLink");
        
        this.StartAirpInput = document.getElementById("StartAirp_input");
        this.StartAirpInput.Field = new FieldClass(this.StartAirpInput);
        this.StartAirpCodeInput = document.getElementById("StartAirpCode_input")
        
        this.EndAirpInput = document.getElementById("EndAirp_input");
        this.EndAirpInput.Field = new FieldClass(this.EndAirpInput);
        this.EndAirpCodeInput = document.getElementById("EndAirpCode_input");
        
        this.StartAirpInput.suggest = new Suggest(this.StartAirpInput, self);
        this.EndAirpInput.suggest = new Suggest(this.EndAirpInput, self);
        

        this.StartAirpCodeInput.onfocus = function(){ self.StartAirpInput.focus() }
        this.StartAirpCodeInput.parentNode.onclick = function(){ self.StartAirpInput.focus() }
        this.EndAirpCodeInput.onfocus = function(){ self.EndAirpInput.focus() }
        this.EndAirpCodeInput.parentNode.onclick = function(){ self.EndAirpInput.focus() }
        
        //this.PlusMinus = $(".DirectionBalloonContent #PlusMinus")[0];
        this.PlusMinus = $(this.entObj).find(".PlusMinus")[0]
        this.PlusMinusLabel = $(this.entObj).find(".PlusMinusLabel")[0];
        
        this.Prev = $(this.entObj).find(".prev")[0];
        $(this.Prev).click(function(){
            var diapazon = self.PlusMinus.value * 1;
            if (diapazon > 1){
                diapazon--;
                self.PlusMinus.value = diapazon;
                self.PlusMinus.style.display = 'inline';
                self.PlusMinusLabel.innerHTML = MO_range+': +/-';
            } else {
                self.PlusMinus.value = '';
                self.PlusMinus.style.display = 'none';
                self.PlusMinusLabel.innerHTML = MO_precise_date;
            }
        });
        
        this.Next = $(this.entObj).find(".next")[0];
        $(this.Next).click(function(){
            var diapazon = self.PlusMinus.value * 1;
            if (diapazon < 3){
                diapazon++;
                self.PlusMinus.value = diapazon;
                self.PlusMinus.style.display = 'inline';
                self.PlusMinusLabel.innerHTML = MO_range+': +/-';
            }
        });

        
        this.oDate = null;
        /*this.entObj.onkeydown = function(event){ self.OnKeyDown(event||window.event) }*/
    }
    DirectionBalloonClass.prototype.show = function(oDate){
        var self = this;
    
        this.oDate = oDate;
        this.cell = oDate.cell;
        var CalendarBody = document.getElementById("CalendarBody");
        var CalendarBodyWidth = CalendarBody.offsetWidth;
        var CalendarBodyXY = getPosition(CalendarBody);
        var cellXY = getPosition(this.cell);
        var BalloonHeight = this.entObj.offsetHeight;
        var BalloonWidth = 250;

        var BalloonPadding = (this.entObj.offsetWidth - this.cell.offsetWidth)/2+200;
        
        var x = (cellXY[1]-CalendarBodyXY[1]-50);
        var y = cellXY[0];

        //this.entObj.style.left = (cellXY[1]-CalendarBodyXY[1]-50)+"px";
        
        var z = cellXY[1]-CalendarBodyXY[1];

        if(z>800 ) {
            this.entObj.style.left = (x - 30)+"px";
        } else if(z == 0 ) {
            this.entObj.style.left = (x + 30)+"px";
        } else {
            this.entObj.style.left = x+"px";
        }
        
        if ( (cellXY[0]-BalloonHeight) < (CalendarBodyXY[0] - 60) ) {
            this.entObj.style.top = ( y + 40 )+"px";
            $(this.entObj).removeClass("onTop");
            $(this.entObj).addClass("onBottom");
        } else {
            this.entObj.style.top = ( y - BalloonHeight + 20 )+"px";
            $(this.entObj).removeClass("onBottom");
            $(this.entObj).addClass("onTop");
        }
        
        
        
        this.fill();
        
        self.entObj.style.visibility = "visible";
        var AirpInput = null;
        if( Directions.length <= 1 )
        {
            AirpInput = self.StartAirpInput;
        }
        else
        {
            AirpInput = self.EndAirpInput;
        }
                
        AirpInput.Field.Select = false;
        AirpInput.focus();
        AirpInput.Field.Select = true;
                
        $(window).keydown( function(event){ self.OnKeyDown(event) } );

    }
    DirectionBalloonClass.prototype.fill = function(){
        var self = this;
        
        this.drawDateLabel();
        
        this.StartAirpInput.value = "";
        this.StartAirpInput.title = $('label[for='+this.StartAirpInput.id+']')[0].firstChild.data;
        this.StartAirpCodeInput.value = "";
        this.StartAirpCodeInput.title = $('label[for='+this.StartAirpInput.id+']')[0].firstChild.data;
        this.EndAirpInput.value = "";
        this.EndAirpInput.title = $('label[for='+this.EndAirpInput.id+']')[0].firstChild.data;
        this.EndAirpCodeInput.value = "";
        this.PlusMinus.value = "";
        this.PlusMinusLabel.innerHTML = MO_precise_date;
        this.diapazon = 0;
        
        this.EndAirpCodeInput.title = $('label[for='+this.EndAirpInput.id+']')[0].firstChild.data;
        
        if( Directions.length > 0 && Directions[ Directions.length - 1 ] != null )
        {
            if( self.StartAirpCodeInput.value == "" )
            {
                self.StartAirpInput.value = Directions[ Directions.length - 1 ].EndAirp;
                self.StartAirpInput.title = Directions[ Directions.length - 1 ].EndAirpStr;
                self.StartAirpCodeInput.value = Directions[ Directions.length - 1 ].EndAirpCode;
                self.StartAirpCodeInput.title = Directions[ Directions.length - 1 ].EndAirpStr;
            }
        }
        
        this.StartAirpInput.suggest.update();
        this.EndAirpInput.suggest.update();
        this.StartAirpInput.Field.Update();
        this.EndAirpInput.Field.Update();
    }
    DirectionBalloonClass.prototype.drawDateLabel = function() {
        var self = this;
        //var tempDate = this.cell.getAttribute("Date");
        var tempDate = this.oDate.strDate;
        
        var arrDate = tempDate.split('.');
        var span_Date = $(this.DateLabel).find('span[class="Date"]')[0];

        var lDate = $(span_Date).find('span[class="lDate"]')[0];
        lDate.innerHTML = parseInt(arrDate[0], 10);
        var lMonth = $(span_Date).find('span[class="lMonth"]')[0];
        lMonth.innerHTML = Datepicker.getMonthDName(arrDate[1]);
        var lYear = $(span_Date).find('span[class="lYear"]')[0];
        lYear.innerHTML = arrDate[2];
    }
    
    DirectionBalloonClass.prototype.OnKeyDown = function(event){
        var self = this;
        switch (event.keyCode) {
            case 27: // <Esc>
                if(this.StartAirpInput.suggest.isShow == false && this.EndAirpInput.suggest.isShow == false){
                    self.hide();
                }
                //this.StartAirpInput.suggest.isShow = false;
                this.StartAirpInput.suggest.inFocus = false;
                //this.EndAirpInput.suggest.isShow = false;
                this.EndAirpInput.suggest.inFocus = false;
                break;
        }
    }
    DirectionBalloonClass.prototype.OnClick = function(){

    }
    DirectionBalloonClass.prototype.update = function(){
        if(this.StartAirpCodeInput.value!='' && this.EndAirpCodeInput.value != ''){
            this.hide();
            
            var NewDirectionNumber = Directions.length;
            if(Directions.length == 0){
                NewDirectionNumber = 1;
            }
            var NewDirection = new DirectionClass( NewDirectionNumber, this.oDate.strDate, this.StartAirpInput.value, this.EndAirpInput.value, this.StartAirpCodeInput.value, this.EndAirpCodeInput.value, this.StartAirpInput.title, this.EndAirpInput.title, this.PlusMinus.value );
            if(DirectionsDOM[NewDirection.DirectionNumber]){
                
                DirectionsDOM[NewDirection.DirectionNumber].update(NewDirection);
            } else {
                var NewDirectionDOM = new DirectionDOMClass(NewDirection);
            }
        }
    }
    DirectionBalloonClass.prototype.hide = function(){
        var self = this;
        
        if( self.entObj.style.visibility != "hidden" ) {

            setTimeout( function(){
                self.entObj.style.visibility = "hidden";
                $(window).unbind("keydown", self.OnKeyDown );
                $(window).unbind("click", self.OnClick );
            }, 50 );
            
            if($.browser.mozilla ) $('#ADTQnt_1').focus();
        }
    }
/* /DirectionBalloon Class */