bhajs.defineClass("BHA.Web.UI.Ags", "MapSlider", 
    function (id, ajaxCode) {
        this.$id = id;
        this.$classInfo = bhajs.getClassInfo("BHA.Web.UI.Ags.MapSlider");
        this.$classInfo.registerObject(this.$id, this);
    
        this.$ajaxCode = ajaxCode;
        this.$ajaxCall = new Function("message",ajaxCode);
    
        this.$onMouseClickDelegate=null;
        this.$onMouseDownDelegate=null;
        this.$onMouseUpDelegate=null;
        this.$onMouseMoveDelegate=null;
        
        this.$elementBar=document.getElementById(this.$id + '_bar');
        this.$elementSlider=document.getElementById(this.$id + '_slider');
        this.$minPosition=0;
        this.$maxPosition=parseInt(this.$elementBar.style.height) - 10;
        //this.$currentPosition=parseInt(this.$elementSlider.style.top);
        
        this.$trackMouse=false;
        this.$beginPosition=null;
        this.$beginMouseY=null;
    
        this.$initialize = function() {
            //createInstanceMethodCall = function(id, methodName, paramNames) {
            this.$onMouseClickDelegate = this.$classInfo.createInstanceMethodCall(this.$id,"$onMouseClick",["e"]);
            this.$onMouseDownDelegate = this.$classInfo.createInstanceMethodCall(this.$id,"$onMouseDown",["e"]);
            this.$onMouseUpDelegate = this.$classInfo.createInstanceMethodCall(this.$id,"$onMouseUp",["e"]);
            this.$onMouseMoveDelegate = this.$classInfo.createInstanceMethodCall(this.$id,"$onMouseMove",["e"]);
            
            if (this.$elementSlider.addEventListener) {
                this.$elementBar.addEventListener("click", this.$onMouseClickDelegate, false);
                this.$elementSlider.addEventListener("mousedown", this.$onMouseDownDelegate, false);
            }else if (this.$elementSlider.attachEvent) {
                this.$elementBar.attachEvent("onclick", this.$onMouseClickDelegate);
                this.$elementSlider.attachEvent("onmousedown", this.$onMouseDownDelegate);
            }
            
            delete this.$initialize;
        }
        
        this.$onMouseClick = function(e) {
            if (this.$trackMouse) return;
            
            var newPosition = 0;
            if (e.layerY) {
                newPosition = e.layerY;
            }else if (e.y) {
                newPosition = e.y;
            }
            newPosition = newPosition - 5;
            newPosition = Math.max(newPosition, this.$minPosition);
            newPosition = Math.min(newPosition, this.$maxPosition);
            
            var currentPosition=parseInt(this.$elementSlider.style.top);
            if (currentPosition != newPosition) {
                this.$elementSlider.style.top = String(newPosition) + 'px';
                this.$ajaxCall("NewPosition|" + String(newPosition));
                document.body.style.cursor = 'wait';
                
            }
            
        }
    
        this.$onMouseDown = function(e) {
            if (this.$trackMouse) return;
            if (window.addEventListener) {
                window.addEventListener("mouseup", this.$onMouseUpDelegate, false);
                window.addEventListener("mousemove", this.$onMouseMoveDelegate, false);
            }else if (document.attachEvent) {
                document.attachEvent("onmouseup", this.$onMouseUpDelegate);
                document.attachEvent("onmousemove", this.$onMouseMoveDelegate);
            }
            this.$beginMouseY=e.screenY;
            this.$beginPosition=parseInt(this.$elementSlider.style.top);
            this.$trackMouse=true;
            this.$elementSlider.focus();
        }
        
        this.$onMouseUp = function(e) {
            if (!this.$trackMouse) return;
            
            if (window.addEventListener) {
                window.addEventListener("mouseup", this.$onMouseUpDelegate, false);
                window.addEventListener("mousemove", this.$onMouseMoveDelegate, false);
            }else if (document.attachEvent) {
                document.attachEvent("onmouseup", this.$onMouseUpDelegate);
                document.attachEvent("onmousemove", this.$onMouseMoveDelegate);
            }
            this.$trackMouse=false;
            
            
            var currentMouseY = e.screenY;
            var deltaMouseY = currentMouseY - this.$beginMouseY;
            var newPosition = this.$beginPosition + deltaMouseY;
            newPosition = Math.max(newPosition, this.$minPosition);
            newPosition = Math.min(newPosition, this.$maxPosition);
          
            if (newPosition != this.$beginPosition) {
                this.$elementSlider.style.top = String(newPosition) + 'px';
                this.$ajaxCall("NewPosition|" + String(newPosition));
                document.body.style.cursor = 'wait';
            }
            
            this.$elementSlider.focus();
        }
        
        this.$onMouseMove = function(e) {
            if (!this.$trackMouse) return;
            
            var currentMouseY = e.screenY;
            var deltaMouseY = currentMouseY - this.$beginMouseY;
            var newPosition = this.$beginPosition + deltaMouseY;
            newPosition = Math.max(newPosition, this.$minPosition);
            newPosition = Math.min(newPosition, this.$maxPosition);
            this.$elementSlider.style.top = String(newPosition) + 'px';
            this.$elementSlider.focus();
        }
    
        this.$initialize();
    }
);