
// browse.js by Oto Valek <oto@email.cz>
// thanks for viewing the source code !

// system.js needed

 browse_gifpath = 0

 function browse_init(_sizex,_sizey,_actx,_acty,_maxx,_maxy,_thumbx,_thumby,
                      _boxx,_boxy,_boxsx,_boxsy,
                      _mappath,_gifpath,_thumbcontent,_boxcontent,_ext) {
  sizex = _sizex; sizey = _sizey
  actx = _actx; acty = _acty
  maxx = _maxx; maxy = _maxy
  thumbx = _thumbx; thumby = _thumby
  thumbposx = image_left('thumbimg')
  if (thumbposx<0) thumbposx = 0
  thumbposy = image_top('thumbimg')
  if (thumbposy<0) thumbposy = 0
  boxx = _boxx; boxy = _boxy
  boxsx = _boxsx; boxsy = _boxsy
  mappath = _mappath; browse_gifpath = _gifpath
  ext = _ext
  log_string = mappath.substring(mappath.length-2,mappath.length-1)+','+rnd(1E8);
  log_count = 0
  directions = new makearray('nw','n','ne','w','','e','sw','s','se')

  if (thumbposx) {
   createlayer('thumbDiv',0,thumbposx,thumbposy,thumbx,thumby,_thumbcontent,null,1,1)
   createlayer('rectDiv','thumbDiv',boxx,boxy,boxsx,boxsy,_boxcontent,null,1,2)
   createlayer('coverDiv','thumbDiv',0,0,thumbx,thumby,
    '<IMG SRC="'+browse_gifpath+'blank.gif" WIDTH='+thumbx+' HEIGHT='+thumby+'>',null,1,3)

   thumb = layerobject('thumbDiv')
   rect = layerobject('rectDiv','thumbDiv')
   cover = layerobject('coverDiv','thumbDiv')

   if (ie) {
    cover.obj.onmousedown = browse_mousedown
   }
   else if (cover) {
    cover.onmousedown = browse_mousedown
    cover.captureEvents(Event.MOUSEDOWN)
   }
   else {
    document.images['thumbimg'].onmousedown = browse_mousedown
   }
  }
 }

 function browse_tileurl(x,y) {
  return mappath+browse_coord(x+actx,y+acty)+'.'+ext
 }

 function browse_redraw() {
  var i,j
  if (document.param) {
   document.param.x.value = actx
   document.param.y.value = acty
  }
  if (document.images) {
   // UPDATE ACTUAL MAP IMAGES
   for (j=0; j<sizey; j++) {
    for (i=0; i<sizex; i++) {
     document.images['i'+browse_coord(i,j)].src = browse_tileurl(i,j)
    }
   }
   // PRELOAD NEARBY MAP IMAGES
   for (j=-1; j<sizey+1; j++) {
    for (i=-1; i<sizex+1; i++) {
     if ((i==-1)||(j==-1)||(i==sizex)||(j==sizey)) {
      var x=i+actx
      var y=j+acty
      if ((x>=0)&&(y>=0)&&(x<maxx)&&(y<maxy)) {
       preload('document.preload'+browse_coord(x,y),browse_tileurl(i,j));
      }
     }
    }
   }

   // UPDATE STATE OF ARROWS
   for (j=-1; j<=1; j++) {
    for (i=-1; i<=1; i++) {
     if ((i!=0)||(j!=0)) {
      if ((actx+i<0)||(actx+i+sizex>maxx)||(acty+j<0)||(acty+j+sizey>maxy)) {
       browse_setimage(browse_direction(i,j),3)
      }
      else {
       browse_setimage(browse_direction(i,j),1)
      }
     }
    }
   }
  }
  if (thumbposx) {
   boxx = Math.floor(actx*thumbx/maxx)
   boxy = Math.floor(acty*thumby/maxy)
   moveto(rect,boxx,boxy)
  }
 }

 function browse_move(dx,dy,type) {
  actx += dx
  acty += dy
  if ((actx<0)||(actx+sizex>maxx)) {
   actx -= dx
   return
  }
  if ((acty<0)||(acty+sizey>maxy)) {
   acty -= dy
   return
  }
  browse_redraw()
  browse_log(type)
 }

 function browse_setpos(x,y) {
  if (x<0) { x = 0 }
  if (x+sizex>maxx) { x = maxx - sizex }
  if (y<0) { y = 0 }
  if (y+sizey>maxy) { y = maxy - sizey }
  actx = x
  acty = y
  browse_redraw()
  browse_log('j')
 }

 function browse_keydown(nKey,ieKey) {
       if (nKey==56 || ieKey==104) browse_move( 0,-1,'k')
  else if (nKey==53 || ieKey==101
        || nKey==50 || ieKey== 98) browse_move( 0,+1,'k')
  else if (nKey==52 || ieKey==100) browse_move(-1, 0,'k')
  else if (nKey==54 || ieKey==102) browse_move(+1, 0,'k')
  else if (nKey==55 || ieKey==103) browse_move(-1,-1,'k')
  else if (nKey==57 || ieKey==105) browse_move(+1,-1,'k')
  else if (nKey==49 || ieKey== 97) browse_move(-1,+1,'k')
  else if (nKey==51 || ieKey== 99) browse_move(+1,+1,'k')
  else return true
  return false
 }

 function browse_mousedown(e) {
  if (!e) var e = window.event
  if (e.which) if (e.which != 1) return;
  var x = (e.layerX) ? (e.layerX-e.target.x) : e.offsetX;
  var y = (e.layerY) ? (e.layerY-e.target.y) : e.offsetY;
  browse_setpos(Math.floor((x-boxsx/5)*maxx/thumbx),
   Math.floor((y-boxsy/5)*maxy/thumby))
 }

 function browse_coord(a,b) {
  if (a<10) { a = '0'+a }
  if (b<10) { b = '0'+b }
  return ''+b+a
 }

 function browse_sethref(obj,dx,dy) {
  obj.href = 'javascript:browse_move('+dx+','+dy+',\'a\')'
 }

 function browse_setimage(text,num) {
  if (document.images) {
   if (browse_gifpath) {
    if (document.images[text]) {
     document.images[text].src = browse_gifpath+'r'+num+'_'+text+'.gif'
    }
   }
  }
 }

 function browse_highlight(text) {
  if (document.images[text].src.indexOf('r1') != -1) {
   browse_setimage(text,2)
  }
 }

 function browse_lowlight(text) {
  if (document.images[text].src.indexOf('r2') != -1) {
   browse_setimage(text,1)
  }
 }

 function browse_direction(dx,dy) {
  return(directions[dx+3*dy+4])
 }

 function browse_log(type) {
  log_string += ';'+type+','+actx+','+acty
  log_count++
  if (log_count==1 || log_count==3 || log_count==5 || log_count%10==0) {
   preload('document.logimage'+log_count,'track.cgi?'+log_string);
   log_string = log_string.substring(0,log_string.indexOf(';'))
  }
 }

 function rnd(range) {
  return Math.floor(range*Math.random());
 }
