var _ss = {},  wait_cycles = 0;
var _docElem = document.documentElement;
var _docBody = document.body;
//---------------------------
function SlidesAppend (id,big_src) {
  _ss[id] = {};
  _ss[id]['imgsize'] = {sw: 0, sh: 0, bw: 0, bh: 0};
  _ss[id]['pos'] = 0;
  _ss[id]['timer'] =   null;
  _ss[id]['img'] =     null;
  _ss[id]['div'] =     null;
  _ss[id]['big_img'] = null;
  _ss[id]['big_src'] = big_src;
  _ss[id]['sml_src'] = '';
}
//---------------------------
function SlidesInit () {
  for (var id in _ss) {
    img = __el(id);
    _ss[id]['img'] = img;
    _ss[id]['sml_src'] = img.src;
    _ss[id]['imgsize'].sw = img.width;
    _ss[id]['imgsize'].sh = img.height;
    _ss[id]['big_img'] = document.createElement ('img');
    _ss[id]['big_img'].src = _ss[id]['big_src'];
    var div = document.createElement('div');
    div.style.width = _ss[id]['imgsize'].sw + 'px';
    div.style.height = _ss[id]['imgsize'].sh + 'px';
    div.style.textAlign = 'center';
  //--  div.className = 'cover_div';
    var imgP = img.parentNode, imgI = img;
    if (imgP.nodeName == 'A') {
      imgI = imgP;
      imgP = imgP.parentNode;
    }
    imgP.insertBefore (div,imgI);
    div.appendChild (imgI);
    _ss[id]['div'] = div;
    img.onmouseover = SlideImageIn;
    img.onmouseout = SlideImageOut;
  //--  img.style.zIndex = 1000;
  //--  setTimeout('SlideImage(-100,"'+id+'")',1);
  }
  setTimeout ('_slides_wait_preload()',100);
}
//---------------------------
function _slides_wait_preload () {
  var c = 1;
  for (var id in _ss) {
    if (_ss[id]['big_img'].width > 36.6) {
      _ss[id]['imgsize'].bw = _ss[id]['big_img'].width;//vio_ss[id]['imgsize'].sw * 1.2;
      _ss[id]['imgsize'].bh = _ss[id]['big_img'].height;  //vio _ss[id]['imgsize'].sh * 1.2;
    } else {
      c = 0;
    }
  }
  if (!c) {
    wait_cycles++;
    setTimeout ('_slides_wait_preload()',(wait_cycles>30)?3000:100);
  }
}
//---------------------------
function SlideImageIn(){SlideImage(-20,this.id); SlideImage(+14,this.id);  } //vio 14
//---------------------------
function SlideImageOut(){SlideImage(-20,this.id); } //vio
//---------------------------
function SlideImage (step,id) {
  if (_ss[id]['timer']) clearTimeout (_ss[id]['timer']);
  if (!_ss[id]['imgsize'].bw) {
    if ((''+_ss[id]['img'].src).match('loading')) {}
    else {
      _ss[id]['img'].src = '/images/tdLoader.gif;'//loading.gif';
    }
  } else {
  _ss[id]['pos'] += step;
  if (_ss[id]['pos'] > 100) _ss[id]['pos'] = 100;
  if (_ss[id]['pos'] < 0) _ss[id]['pos'] = 0;
  if (_ss[id]['img'].style.position != 'absolute') {
    _ss[id]['img'].src = _ss[id]['big_src'];
    _ss[id]['divOffset'] = _getOffset(_ss[id]['div']);
    _ss[id]['img'].style.position = 'absolute';
  }
  var dx = _ss[id]['pos']*(_ss[id]['imgsize'].bw-_ss[id]['imgsize'].sw)/100;
  var dy = _ss[id]['pos']*(_ss[id]['imgsize'].bh-_ss[id]['imgsize'].sh)/100;
  var cwidth = Math.floor(_ss[id]['imgsize'].sw + dx);
  var cheight = Math.floor(_ss[id]['imgsize'].sh + dy);
  var cleft = Math.floor(_ss[id]['divOffset'].X - dx/2);//--
  var ctop = Math.floor(_ss[id]['divOffset'].Y - dy/2);
  var bodySize = getBodySize();
  var minx = bodySize.left - _ss[id]['divOffset'].fullX + _ss[id]['divOffset'].X;
  var miny = bodySize.top  - _ss[id]['divOffset'].fullY + _ss[id]['divOffset'].Y;
  var maxx = minx + parseInt(bodySize.width) - cwidth;
  var maxy = miny + parseInt(bodySize.height) - cheight;
  if (cleft < minx) cleft = minx;
  if (cleft > maxx) cleft = maxx;
  if (ctop < miny) ctop = miny;
  if (ctop > maxy) ctop = maxy;
  _ss[id]['img'].width = cwidth;
  _ss[id]['img'].height = cheight;
  _ss[id]['img'].style.left = cleft + 'px';
  _ss[id]['img'].style.top = ctop + 'px';
  }

  if (_ss[id]['pos'] < 100 && step > 0 || _ss[id]['pos'] > 0 && step < 0) {
    _ss[id]['timer'] = setTimeout ('SlideImage('+step+',"'+id+'")',20);
  }
  if (step < 0 && _ss[id]['pos'] == 0) {
    _ss[id]['img'].style.position = 'static';
    _ss[id]['img'].style.top = 'auto';
    _ss[id]['img'].style.left = 'auto';
    _ss[id]['img'].src = _ss[id]['sml_src'];
  }
}
//---------------------------
function __el (id){return document.getElementById (id);}
//---------------------------
function _getOffset (el) {
  var elStyle = getCurrentStyle(el);
  if (elStyle && parseInt (elStyle.left) && elStyle.position == 'absolute')
    return {X: elStyle.left, Y: elStyle.top, fullX: elStyle.left, fullY: elStyle.top};
  var out = {X: 0, Y: 0, fullX: 0, fullY: 0};
  var b=true;
  var b_getFull=true;
  if (el.getBoundingClientRect){
    var tmp = getOffsetRect(el);
    out.fullX = tmp.left;
    out.fullY = tmp.top;
    b_getFull = false;
  }
  while (el && (b || b_getFull)) {
    if(b && getCurrentStyle(el).position == 'relative' || getCurrentStyle(el).overflow == 'hidden'){
      if(b_getFull){
        out.fullX = out.X;
        out.fullY = out.Y;
        b=false;
      } else {
        break;
      }
    }
    if(b){
      out.X += parseInt(el.offsetLeft);
      out.Y += parseInt(el.offsetTop);
    } else {
      out.fullX += parseInt(el.offsetLeft);
      out.fullY += parseInt(el.offsetTop);
    }
    el = el.offsetParent;
  }
  if(b && b_getFull){
    out.fullX = out.X;
    out.fullY = out.Y;
  }
  return out;
}
//---------------------------
function getBodySize(){
  return { top:    self.pageYOffset || (_docElem && _docElem.scrollTop) || (_docBody && _docBody.scrollTop),
           left:   self.pageXOffset || (_docElem && _docElem.scrollLeft) || (_docBody && _docBody.scrollLeft),
           height: (document.compatMode=='CSS1Compat' && !window.opera && _docElem && _docElem.clientHeight) ||
                   (_docBody && _docBody.clientHeight),
           width:  (document.compatMode=='CSS1Compat' && !window.opera && _docElem && _docElem.clientWidth) ||
                   (_docBody && _docBody.clientWidth)
  }
}
//---------------------------
function getCurrentStyle(el){
  if(!el) return null;
  var s=el.currentStyle;
  if(!s) s=document.defaultView.getComputedStyle(el,null); 
  return s;
}
//---------------------------
function getOffsetRect(elem) {
    var box = elem.getBoundingClientRect()
    _docBody = document.body;
    var scrollTop = window.pageYOffset || _docElem.scrollTop || _docBody.scrollTop
    var scrollLeft = window.pageXOffset || _docElem.scrollLeft || _docBody.scrollLeft
    var clientTop = _docElem.clientTop || _docBody.clientTop || 0
    var clientLeft = _docElem.clientLeft || _docBody.clientLeft || 0
    var top  = box.top +  scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft
    return { top: Math.round(top), left: Math.round(left) }
}
