
function ImageViewer() {
  this.timer=null;
  this.active=null;

  
  this.templates=[];
  this.setTemplate=function(str,id){
    this.templates[this.templates.length]={id:id,str:str};
  };
  
  this.show=function(a,src){
    var cache=ImageViewer.cache(src);
    var div=this.previewer;
    if(div){
      var img=div.firstChild;
      var span=div.lastChild;
      if(img&&span){
        if(this.active)this.active.className="";
        this.active=a;
        this.active.className="active";
        span.style.display="none";
        img.style.display="block";
        if (window.opera) {// se: nothing clever :(
          img.style.display="inline";
        } else {
          img.onload=function(e){
            img.style.display="inline";
          }
        } 
        img.src=cache.src;
        img.title=(a.title)?a.title:(a.alt)?a.alt:"";
        this.parseTemplates();
      }
    } else {// se added
      setTimeout(function(){viewer.show(a,src)},200);
    }
    return false;
  };

  this.getImagePath=function(){
    var path="";
    var div=this.previewer;
    if(div){
      var img=div.firstChild;
      if(img){
        /*
        path=img.src.split("/");
        path=path[path.length-1];
        */
        img.galleryImg=false;
        path=(img.title!="")?img.title:img.alt;
      }
    }
    return path;
  };
  
  this.getCurrentImageIndex=function(){
    if(this.thumbnail){
      var pos=0;
			var firstItem=document.getElementById("fIt");
      var layer = Scrollbar.getFirstChild(this.thumbnail);
      if(layer){
        for(i=0;i<layer.childNodes.length;i++){
          a=layer.childNodes[i];
          if(a.tagName=="A"){ //se fix
            pos++;
            if(a==this.active){
							if(pos==1){firstItem.style.display="block"}else{firstItem.style.display="none"}
							return pos;
						}
          }
        }
      }
    }
    return 1;
  };

  this.getCurrentImageInfo=function(){
    if(this.thumbnail){
			var pos=0;
      var info="a";
      var layer = Scrollbar.getFirstChild(this.thumbnail);
      if(layer){
        for(i=0;i<layer.childNodes.length;i++){
          a=layer.childNodes[i];
          if(a.tagName=="A"){ //se fix
            pos++;
            if(a==this.active){
							for(y=0;y<a.firstChild.childNodes.length;y++){
								if(a.firstChild.childNodes[y].tagName == "SPAN"){
									return a.firstChild.childNodes[y].innerHTML;
								}
							}
            }
					}
        }
      }
    }
    return "";
  };

  this.getImagesCount=function(){
    var total=0;
    if(this.thumbnail){
      var i,layer = Scrollbar.getFirstChild(this.thumbnail);
      if(layer){
        for(i=0;i<layer.childNodes.length;i++){
          a=layer.childNodes[i];
          if(a&&a.tagName=="A"){
            total++;
          }
        }
      }
    }
    return total;
  };
  
  this.init=function(id){
    this.previewer=document.getElementById(id);
    if(!this.previewer){
      var viewer=this;
      EventUtil.add(window,"load",function(){viewer.init(id)},false);
    }else{
      this.parseTemplates();
    }
  };
  
  this.parseTemplates=function(){
    for(var i=0;i<this.templates.length;i++){
      var tpl=this.templates[i];
      var obj=document.getElementById(tpl.id);
      if(obj){
        var str=tpl.str;
        str = str.replace(/\{current\}/g,this.getCurrentImageIndex());
        str = str.replace(/\{total\}/g,this.getImagesCount());
        str = str.replace(/\{fileName\}/g,this.getImagePath());
				str = str.replace(/\{info\}/g,this.getCurrentImageInfo());
        obj.innerHTML=str;
      }
    }
  };
  
  this.resize=function(id){
    this.thumbnail=document.getElementById(id);
    if(this.thumbnail){
      var w,a,i,layer = Scrollbar.getFirstChild(this.thumbnail);
      if(layer){
        w=0;
        for(i=0;i<layer.childNodes.length;i++){
          a=layer.childNodes[i];
          if(a&&a.tagName=="A"){
            w+=a.offsetWidth;
            if(a.className=="active"){
              this.active=a;
            }
          }
        }
        w+=4;
      }
      layer.style.width=w+"px";
      Scrollbar.create(id);
      this.parseTemplates();
      
      if(this.active){
        this.scrollIntoView();
      }
      
    }else{
      var viewer=this;
      EventUtil.add(window,"load",function(){viewer.resize(id)},false);
    }
  };
  
  this.scrollIntoView=function(){
    var o,s=Scrollbar;
    var id=this.thumbnail.id;
    o=s.map[id];
    //alert(this.active.offsetLeft);
    if(o) {
      var viewer=this;
      s.initScroll(id,"right",Scrollbar.speed);
      var foo = function(){
        if(viewer.active.offsetLeft <= (o.lyr.offsetLeft*-1)+2){
          s.stopScroll(id);
          //o.startScroll(Scrollbar.speed);
          s.stopScroll(id);
          var a=viewer.active;
          if(a.click)a.click();
          else if(a.onclick)a.onclick();
        }else{
          setTimeout(foo,5);
        }
      };
      foo();
    }
  };
  
  var a=arguments;
  if(a[0])this.init(a[0]);
  if(a[1])this.resize(a[1]);
}

ImageViewer.step = 10;
ImageViewer.timeout = 5;

ImageViewer.cache=function(src){
  if(!ImageViewer.images)ImageViewer.images={};
  var i,a=arguments;
  for(i=0;i<a.length;i++) {
    src=a[i];
    if(!ImageViewer.images[src]){
      ImageViewer.images[src]=new Image();
      ImageViewer.images[src].src=src;
    }
  }
  return ImageViewer.images[src];
};

ImageViewer.slowDisplay=function(maxWidth,img,viewer){
  try {
	  if(!ImageViewer.stack)ImageViewer.stack={};
	  if(typeof img=="string")img=ImageViewer.stack[img].image;
	  else if(img.tagName=="IMG")ImageViewer.stack[img.src]={image:img,viewer:viewer};
  
    if(ImageViewer.stack[img.src].viewer.timer) {
      clearTimeout(ImageViewer.stack[img.src].viewer.timer)
    }
	  var ie_opacity = (window.VBArray)?parseInt(img.style.filter.match(/(\d)+/)):null;
	  var moz_opacity = parseFloat(img.style.MozOpacity);
	  var opacity = parseFloat(img.style.opacity);
	  if(img){
	    var timeout = ImageViewer.timeout;
	    if(ie_opacity && ie_opacity<100){
	      img.style.filter="Alpha(opacity="+(ie_opacity+10)+")";
	      timeout += 25;
	      ImageViewer.stack[img.src].viewer.timer=setTimeout("ImageViewer.slowDisplay("+maxWidth+",'"+img.src+"')",timeout);
	    } else if(moz_opacity<1&&!window.opera){
	      img.style.MozOpacity=moz_opacity+0.1;
	      timeout += 15;
	      ImageViewer.stack[img.src].viewer.timer=setTimeout("ImageViewer.slowDisplay("+maxWidth+",'"+img.src+"')",timeout);
	    } else if(opacity<1){
	      img.style.opacity=opacity+0.1;
	      timeout-=10;
	      ImageViewer.stack[img.src].viewer.timer=setTimeout("ImageViewer.slowDisplay("+maxWidth+",'"+img.src+"')",timeout);
	    }
	  }
  }
  catch(e) {

  };
}
ImageViewer.slowResize=function(maxWidth,img,viewer) {
  if(!ImageViewer.stack)ImageViewer.stack={};
  if(typeof img=="string")img=ImageViewer.stack[img].image;
  else if(img.tagName=="IMG")ImageViewer.stack[img.src]={image:img,viewer:viewer};
  
  clearTimeout(ImageViewer.stack[img.src].viewer.timer);
  if(img&&img.offsetWidth<=maxWidth){
    img.style.width=img.offsetWidth+ImageViewer.step+"px";
    ImageViewer.stack[img.src].viewer.timer=setTimeout("ImageViewer.slowResize("+maxWidth+",'"+img.src+"')",ImageViewer.timeout);
  }
};

var Scrollbar={
  speed:200,
  map:{},
  //c=container;t=track;l=layer;f=face;
  bind:function(c,t){
    var h=function(){
      Scrollbar.create(c,t);
    }
    if(window.attachEvent)window.attachEvent("onload",h);
    else window.addEventListener("load",h,false)
  },
  create:function(c,t){
    var l,f,o,s=Scrollbar;o=s.getObject(c);
    if(o){
      l=s.getFirstChild(o);
      if(l){
        c=new Scroller(c,l);
        t=s.getObject(t);
        if(t){
          f=s.getFirstChild(t);
          if(f)c.setUpScrollbar(f,t,"v",1,1)
        }
        s.__fix__(c)
      }
    }
  },
  //a=arrow;w=div;d=direction;s=Scrollbar;
  bindArrow:function(a,w,d){
    a=this.getObject(a);
    if(a){
      var s=Scrollbar;
      var o=Scrollbar.map[w];
      if(o){
        if(!o.arrows)o.arrows={};
        o.arrows[d]=a;
      }
      function over(){
        if(o){
          if(d=="left"){var b=o.arrows["right"];if(b)b.className=""}
          else if(d=="right"){var b=o.arrows["left"];if(b)b.className=""}
          else if(d=="up"){var b=o.arrows["down"];if(b)b.className=""}
          else if(d=="down"){var b=o.arrows["up"];if(b)b.className=""}
        }
        s.initScroll(w,d);
      }
      over();
      a.onmouseover=function(){over()};
      a.onmouseout=function(){s.stopScroll(w)};
      a.onmousedown=function(){s.doubleSpeed(w)};
      a.onmouseup=function(){s.resetSpeed(w)};
      a.onclick=function(){return false}
    }
  },
  getFirstChild:function(o){o=o.firstChild;if(o.nodeType!=1)o=this.getNextSibling(o);return o},
  getNextSibling:function(o){o=o.nextSibling;while(o.nodeType!=1)o=o.nextSibling;return o},
  getObject:function(o){if(typeof o=="string") o=document.getElementById(o);return o},
  init:function(){try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}},
  stopScroll:function(w){var o=Scrollbar.map[w];if(o)o.endScroll()},
  doubleSpeed:function(w){var o=Scrollbar.map[w];if(o)o.speed*=2},
  resetSpeed:function(w){var o=Scrollbar.map[w];if(o)o.speed/=2},
  initScroll:function(w,d,sp){
    var a,s,c,o=Scrollbar.map[w];
    if(o){
      if(typeof d=="string"){ switch(d){case "up":d=90;break;case "down":d=270;break;case "left":d=180;break;case "right":d=0;break}}
      d=d%360;
      if(d%90==0){c=(d==0)?-1:(d==180)?1:0;s=(d==90)?1:(d==270)?-1:0}
      else{a=d*Math.PI/180;c=-Math.cos(a);s=Math.sin(a)}
      o.fx=c/(Math.abs(c)+Math.abs(s));
      o.fy=s/(Math.abs(c)+Math.abs(s));
      o.endX=(d==90||d==270)?o.x:(d<90||d>270)?-o.maxX:0;o.endY=(d==0||d==180)?o.y:(d<180)?0:-o.maxY;
      o.startScroll(sp)
    }
  },
  getWndoLyrRef:function(){this.wnLyr=Scrollbar.getObject(this.wn.layer)},
  tossWndoLyrRef:function(){this.wnLyr=null},
  __pos__:function(x,y){var nx,ny;if(this.axis=="v"){nx=this.wn.x;ny=-(y-this.minY)*(this.wn.maxY/(this.maxY-this.minY))||0}else{ny=this.wn.y;nx=-(x-this.minX)*(this.wn.maxX/(this.maxX-this.minX))||0}this.wn.shiftTo(this.wnLyr,nx,ny)},
  __fix__:function(){var s,ua=navigator.userAgent;s=Scrollbar;if(ua.indexOf("Gecko")>-1&&ua.indexOf("Firefox")==-1&&ua.indexOf("Safari")==-1&&ua.indexOf("Konqueror")==-1){s.hold=[];for(var i=0;arguments[i];i++){if(s.map[arguments[i]]){var wndo=s.getObject(arguments[i]);var holderId=wndo.parentNode.id;var holder=s.getObject(holderId);document.body.appendChild(holder.removeChild(wndo));wndo.style.zIndex=1000;var pos=s.getPageOffsets(holder);wndo.style.left=pos.x+"px";wndo.style.top=pos.y+"px";s.hold[i]=[arguments[i],holderId]}}window.addEventListener("resize",s.rePositionGecko,true)}},
  rePositionGecko:function(){var p,h,i,w,s=Scrollbar;if(s.hold){for(i=0;s.hold[i];i++){w=s.getObject(s.hold[i][0]);h=s.getObject(s.hold[i][1]);p=s.getPageOffsets(h);with(w.style){left=p.x+"px";top=p.y+"px"}}}},
  getPageOffsets:function(e){var t,l=e.offsetLeft;t=e.offsetTop;if(e.offsetParent&&e.offsetParent.clientLeft||e.offsetParent.clientTop){l+=e.offsetParent.clientLeft;t+=e.offsetParent.clientTop}while(e=e.offsetParent){l+=e.offsetLeft;t+=e.offsetTop}return{x:l,y:t}}
};
Scrollbar.init();
function Scroller(win,layer) {
    this.id=win;
    Scrollbar.map[this.id]=this;
    this.animString="Scrollbar.map."+this.id;
    this.load=function(layer){if(this.layer){layer=Scrollbar.getObject(this.layer);layer.style.visibility="hidden"}layer=Scrollbar.getObject(layer);var win=Scrollbar.getObject(this.id);layer.style.top=this.y=0;layer.style.left=this.x=0;this.maxY=(layer.offsetHeight-win.offsetHeight>0)?layer.offsetHeight-win.offsetHeight:0;this.wd=layer.offsetWidth;this.maxX=(this.wd-win.offsetWidth>0)?this.wd-win.offsetWidth:0;this.layer=layer;layer.style.visibility="visible";this.onload();this.ready=true};
    this.shiftTo=function(layer,x,y){if(!layer||!layer.style)return;layer.style.left=(this.x=x)+"px";layer.style.top=(this.y=y)+"px"};
    this.startScroll=function(speed){if(!this.ready)return;if(this.timerId)clearInterval(this.timerId);this.speed=speed||Scrollbar.speed;this.lyr=Scrollbar.getObject(this.layer);this.lastTime=(new Date()).getTime();this.on_scroll_start();this.timerId=setInterval(this.animString+".scroll()",10)};
    this.scroll=function(){
      var now=(new Date()).getTime();
      var y,x,d=(now-this.lastTime)/1000*this.speed;
      if(d>0){
      x=this.x+this.fx*d;y=this.y+this.fy*d;
      if(this.fx==0||this.fy==0){
        if((this.fx==-1&&x>-this.maxX)||(this.fx==1&&x<0)||(this.fy==-1&&y>-this.maxY)||(this.fy==1&&y<0)){this.lastTime=now;this.shiftTo(this.lyr,x,y);this.on_scroll(x,y)}
        else{clearInterval(this.timerId);this.timerId=0;this.shiftTo(this.lyr,this.endX,this.endY);this.on_scroll_end(this.endX,this.endY)}
      }else{
        if((this.fx<0&&x>=-this.maxX&&this.fy<0&&y>=-this.maxY)||(this.fx>0&&x<=0&&this.fy>0&&y<=0)||(this.fx<0&&x>=-this.maxX&&this.fy>0&&y<=0)||(this.fx>0&&x<=0&&this.fy<0&&y>=-this.maxY)){this.lastTime=now;this.shiftTo(this.lyr,x,y);this.on_scroll(x,y)}
        else{clearInterval(this.timerId);this.timerId=0;this.on_scroll_end(this.x, this.y)}
      }
      }
    };
    this.endScroll=function(){if(!this.ready)return;if(this.timerId)clearInterval(this.timerId);this.timerId=0;this.lyr=null};
    this.bSizeDragBar = false;
    this.setUpScrollbar = function(id, trkId, axis, offx, offy) {
      var bar = Scrollbar.getObject(id);
      var trk = Scrollbar.getObject(trkId);
      Slider.init(bar, trk, axis, offx, offy);
      bar.wn = Scrollbar.map[this.id];
      if (axis == "v") this.vBarId = id;else this.hBarId = id;
      if (this.bSizeDragBar) this.setBarSize();
      bar.on_drag_start = bar.on_slide_start = Scrollbar.getWndoLyrRef;
      bar.on_drag_end =   bar.on_slide_end =   Scrollbar.tossWndoLyrRef;
      bar.on_drag =       bar.on_slide =       Scrollbar.__pos__;
    };
  
    // Keep position of dragBar in sync with position of layer onscroll
    this.updateScrollbar = function(x, y) {
      var nx, ny;
      if ( this.vBarId ) {
      if (!this.maxY) return;
      ny = -( y * ( (this.vbar.maxY - this.vbar.minY) / this.maxY ) - this.vbar.minY );
      ny = Math.min( Math.max(ny, this.vbar.minY), this.vbar.maxY);  
      nx = parseInt(this.vbar.style.left);
      this.vbar.style.left = nx + "px"; this.vbar.style.top = ny + "px";
      } if ( this.hBarId ) {
      if (!this.maxX) return;
      nx = -( x * ( (this.hbar.maxX - this.hbar.minX) / this.maxX ) - this.hbar.minX );
      nx = Math.min( Math.max(nx, this.hbar.minX), this.hbar.maxX);
      ny = parseInt(this.hbar.style.top);
      this.hbar.style.left = nx + "px";
      this.hbar.style.top = ny + "px";
      } 
      
    };

    // Restore dragBar to start position when loading new layer
    this.restoreScrollbars = function() {
      var bar;
      if (this.vBarId) {
      bar = Scrollbar.getObject(this.vBarId);
      bar.style.left = bar.minX + "px"; bar.style.top = bar.minY + "px";
      }
      if (this.hBarId) {
      bar = Scrollbar.getObject(this.hBarId);
      bar.style.left = bar.minX + "px"; bar.style.top = bar.minY + "px";
      }
    };
    
    // Size dragBar in proportion to size of content in layer
    // called on_load of layer if bSizeDragBar prop true
    this.setBarSize = function() {
      var bar;
      var lyr = Scrollbar.getObject(this.layer);
      var wn = Scrollbar.getObject(this.id);
      if (this.vBarId) {
      bar = Scrollbar.getObject(this.vBarId);
      bar.style.height = (lyr.offsetHeight > wn.offsetHeight)? bar.trkHt / ( lyr.offsetHeight / wn.offsetHeight ) + "px": bar.trkHt - 2*bar.minY + "px";
      bar.maxY = bar.trkHt - bar.offsetHeight - bar.minY; 
      }
      if (this.hBarId) {
      bar = Scrollbar.getObject(this.hBarId);
      bar.style.width = (this.wd > wn.offsetWidth)? bar.trkWd / ( this.wd / wn.offsetWidth ) + "px": bar.trkWd - 2*bar.minX + "px";
      bar.maxX = bar.trkWd - bar.offsetWidth - bar.minX; 
      }
    }

    this.on_scroll = function(x,y) { this.updateScrollbar(x,y); };
    this.on_slide = this.on_scroll;
    
    this.on_scroll_start=function(){
      if ( this.vBarId ) this.vbar = Scrollbar.getObject(this.vBarId);
      if ( this.hBarId ) this.hbar = Scrollbar.getObject(this.hBarId);
    };
    this.on_slide_start = this.on_scroll_start;
  
    this.on_scroll_end=function(x, y) { 
      this.updateScrollbar(x,y);
      this.lyr = null;
      this.bar = null;
      
      var dir=(x==0)?"left":"right";
      var a=this.arrows[dir];
      if(a)a.className="disabled";
      
      var dir=(y==0)?"up":"down";
      var a=this.arrows[dir];
      if(a)a.className="disabled";
    };
    this.on_slide_end = this.on_scroll_end;
    
    this.onload=function(){
      this.restoreScrollbars();
      if (this.bSizeDragBar) this.setBarSize();
    };
    
    
    this.load(layer);
  }

Scrollbar.map = {};



var EventUtil={
  add:function(o,e,h,c){if(o.addEventListener)o.addEventListener(e,h,(c||false));else if(o.attachEvent)o.attachEvent("on"+e,h)}, 
  remove:function(o,e,h,c){if(o.removeEventListener)o.removeEventListener(e,h,(c||false));else if(o.detachEvent)o.detachEvent("on"+e,h)}, 
  getEvent:function(e){e=e?e:window.event;e.tgt=e.srcElement?e.srcElement:e.target;if(!e.preventDefault)e.preventDefault=function(){return false};if(!e.stopPropagation)e.stopPropagation=function(){if(window.event)window.event.cancelBubble=true};return e}
}


// model: Aaron Boodman's dom drag at www.youngpup.net
var Slider = {
  obj: null,
  slideDur: 500,  // duration of glide onclick of track  
  init: function (bar, track, axis, x, y) {
    x = x || 0; y = y || 0;
    bar.style.left = x + "px"; bar.style.top = y + "px";
    bar.axis = axis; track.bar = bar;
    if (axis == "h") {
      bar.trkWd = track.offsetWidth; // hold for setBarSize
      bar.maxX = bar.trkWd - bar.offsetWidth - x; 
      bar.minX = x; bar.maxY = y; bar.minY = y;
    } else {
      bar.trkHt = track.offsetHeight;
      bar.maxY = bar.trkHt - bar.offsetHeight - y; 
      bar.maxX = x; bar.minX = x; bar.minY = y;
    }
    bar.on_drag_start =  bar.on_drag =   bar.on_drag_end = 
    bar.on_slide_start = bar.on_slide =  bar.on_slide_end = function() {}
    bar.onmousedown = this.startDrag; track.onmousedown = this.startSlide;
  },
  
  startSlide: function(e) { // called onmousedown of track 
    if ( Slider.aniTimer ) clearInterval(Slider.aniTimer);
    e = e? e: window.event;
    var bar = Slider.obj = this.bar; // i.e., track's bar
    e.offX = (typeof e.layerX != "undefined")? e.layerX: e.offsetX;
    e.offY = (typeof e.layerY != "undefined")? e.layerY: e.offsetY;
    bar.startX = parseInt(bar.style.left); bar.startY = parseInt(bar.style.top);
    if (bar.axis == "v") {
      bar.destX = bar.startX;
      bar.destY = (e.offY < bar.startY)? e.offY: e.offY - bar.offsetHeight;
      bar.destY = Math.min( Math.max(bar.destY, bar.minY), bar.maxY );
    } else {
      bar.destX = (e.offX < bar.startX)? e.offX: e.offX - bar.offsetWidth;
      bar.destX = Math.min( Math.max(bar.destX, bar.minX), bar.maxX );
      bar.destY = bar.startY;
    }
    bar.distX = bar.destX - bar.startX; bar.distY = bar.destY - bar.startY;
    Slider.per = Math.PI/(2 * Slider.slideDur);
    Slider.slideStart = (new Date()).getTime();
    bar.on_slide_start(bar.startX, bar.startY);
    Slider.aniTimer = setInterval("Slider.doSlide()",10);
  },
  
  doSlide: function() {
    if ( !Slider.obj ) { clearInterval(Slider.aniTimer); return; }    
    var bar = Slider.obj;     
    var elapsed = (new Date()).getTime() - this.slideStart;
    if (elapsed < this.slideDur) {
      var x = bar.startX + bar.distX * Math.sin(this.per*elapsed);
      var y = bar.startY + bar.distY * Math.sin(this.per*elapsed);
      bar.style.left = x + "px"; bar.style.top = y + "px";
      bar.on_slide(x, y);
    } else {  // if time's up
      clearInterval(this.aniTimer);
      bar.style.left = bar.destX + "px"; bar.style.top = bar.destY + "px";
      bar.on_slide_end(bar.destX, bar.destY);
      this.obj = null;
    }
  },
  
  startDrag:function(e){
    e=EventUtil.getEvent(e);
    if(Slider.aniTimer)clearInterval(Slider.aniTimer);
    var bar = Slider.obj = this;
    bar.downX = e.clientX; bar.downY = e.clientY;
    bar.startX = parseInt(bar.style.left);
    bar.startY = parseInt(bar.style.top);
    bar.on_drag_start(bar.startX, bar.startY);
    EventUtil.add( document, "mousemove", Slider.doDrag, true );
    EventUtil.add( document, "mouseup",   Slider.endDrag,  true );
    e.stopPropagation();
  },

  doDrag: function (e) {
    e = e? e: window.event;
    if (!Slider.obj) return;
    var bar = Slider.obj; 
    var nx = bar.startX + e.clientX - bar.downX;
    var ny = bar.startY + e.clientY - bar.downY;
    nx = Math.min( Math.max( bar.minX, nx ), bar.maxX);
    ny = Math.min( Math.max( bar.minY, ny ), bar.maxY);
    bar.style.left = nx + "px"; bar.style.top  = ny + "px";
    bar.on_drag(nx,ny);

    return false;  
  },
  endDrag:function(){
    EventUtil.remove(document,"mousemove",Slider.doDrag,true);
    EventUtil.remove(document,"mouseup",Slider.endDrag,true);
    if(!Slider.obj)return;
    Slider.obj.on_drag_end(parseInt(Slider.obj.style.left),parseInt(Slider.obj.style.top));
    Slider.obj=null;
  } 
}
