var imgNoCache = Math.random();
var imgCol,curOpenImg,opened;
var loader = new Image();
var dragImg = false;
loader.src = '/gallery/images/loader.gif';
//DRAG AND DROP

var dragMaster = (function()
{
 var dragObject
 var mouseDownAt
 function mouseDown(e)
 {
  e = e || w.event
  this.style.cursor = 'url(/images/drag2.cur),auto';
  if(!e.which && e.button) e.which = e.button & 1?1:(e.button & 2?3:(e.button & 4?2:0))
  if(e.which!=1) return
  mouseDownAt = {element:this}
  addDocumentEventHandlers()
  return false
 }
 function mouseMove(e)
 {
  e = e || w.event
  if(mouseDownAt)
  {
  	var elem  = mouseDownAt.element
  	dragObject = elem.dragObject
  	mouseDownAt = null
  	dragObject.onDragStart(e)
  }
  dragObject.onDragMove(e)
  return false
 }
 function mouseUp()
 {
  get('open_img').style.cursor = 'url(/images/drag1.cur),auto';
  if (!dragObject) mouseDownAt = null
  else
  {
   dragObject.onDragSuccess()
   dragObject = null
  }
  removeDocumentEventHandlers()
 }
 function addDocumentEventHandlers()
 {
  d.onmousemove = mouseMove
  d.onmouseup = mouseUp
  d.ondragstart = d.body.onselectstart = function(){return false}
 }
 function removeDocumentEventHandlers()
 {
  d.onmousemove = d.ondragstart = d.body.onselectstart = null
 }
 return {makeDraggable:function(element){element.onmousedown = mouseDown}}
}())

function DragObject(element)
{
 element.dragObject = this
 var s = element.style
 s.cursor = 'url(/images/drag1.cur),auto';
 dragMaster.makeDraggable(element)
 var rememberPosition = new Object();
 var mouseOffset
 this.onDragStart = function(e)
 {
  rememberPosition.x = defPosition(e).x - absPosition(element).x
  rememberPosition.y = defPosition(e).y - absPosition(element).y
 }
 this.hide = function(){element.style.display = 'none'}
 this.onDragMove = function(e)
 {
  element.parentNode.scrollLeft = (defPosition(e).x - absPosition(element.parentNode).x - rememberPosition.x)/-1;
  element.parentNode.scrollTop = (defPosition(e).y - absPosition(element.parentNode).y - rememberPosition.y)/-1;
 }
 this.onDragSuccess = function(){s.cursor = 'url(/images/drag1.cur),auto';}
 this.toString = function(){return element.id}
}



function open_img(link)
{
  return false;
}

function show_image_handler(e)
{
 e = e || w.event;
 show_image(this);
(e.preventDefault)?e.preventDefault():(e.returnValue=false)
}

function prev_img_handler(e)
{
 e = e || w.event;
 if(inArray(curOpenImg,imgCol) > 0)
 {show_image(imgCol[inArray(curOpenImg,imgCol) - 1])}
 (e.preventDefault)?e.preventDefault():e.returnValue=false
}

function next_img_handler(e)
{
 e = e || w.event;
 if(inArray(curOpenImg,imgCol) != imgCol.length - 1)
 {show_image(imgCol[inArray(curOpenImg,imgCol) + 1])}
 (e.preventDefault)?e.preventDefault():e.returnValue=false
}

function close_img_handler(e)
{
 e = e || w.event;
 doc = document.getElementsByTagName('BODY')[0];
 doc.removeChild(get('new_image'));
 (e.preventDefault)?e.preventDefault():(e.returnValue=false)
}

function show_image(img_obj)
{
 opened = 0;
 var objImagePreloader = new Image();
 var img = img_obj.getElementsByTagName('IMG')[0] || img_obj;

 if(!get('new_image'))
 {
  opened = 1;
  var obj = d.createElement('DIV');
      obj.id = 'new_image';
  obj.src = loader.src;
  doc = d.getElementsByTagName('BODY')[0];
  imgBlock = doc.appendChild(obj);
  imgBlock.innerHTML = '<div id="view_img"><img id="open_img" src="'+loader.src+'"></div><img id="loader" src="'+loader.src+'"><div id="img_nav"><a id="nav_left" href="#" onfocus="this.blur();"><b><!--[if IE]><i></i><![endif]--></b></a><a id="nav_right" href="#" onfocus="this.blur();"><b><!--[if IE]><i></i><![endif]--></b></a></div><div id="img_info"><p id="img_desc"></p><ul><li id="img_num"></li><li style="text-align:right"><a href="#" id="img_close" onfocus="this.blur();">Закрыть <b style="color:red">×</b></a></li></ul></div>';
  imgBlock.style.left = Math.ceil(scrollPos().x + absPosition(img).x + img.offsetWidth/2 - loader.width/2 - 10) + 'px';
  imgBlock.style.top = Math.ceil(scrollPos().y + absPosition(img).y + img.offsetHeight/2 - loader.height/2 - 10) + 'px';
  addEvent(get('nav_left'),'click',prev_img_handler);
  addEvent(get('nav_right'),'click',next_img_handler);
  
  curOpenImg = loader;
 }
 if(opened != 1) get('loader').style.visibility = 'visible';
 var openImg = get('open_img');
 if(inArray(img_obj,imgCol) == 0) get('nav_left').style.display='none';
 else get('nav_left').style.display='block';
 if(inArray(img_obj,imgCol) == imgCol.length - 1) get('nav_right').style.display='none';
 else get('nav_right').style.display='block';

 objImagePreloader.onload = function()
 {
  
  imgBlock.style.background = '#fff';
  imgBlock.style.border = '1px gray solid'
  get('img_desc').innerHTML = ((img.title)?img.title:((img.alt)?img.alt:''))
  get('img_num').innerHTML = 'Изображение '+(inArray(img_obj,imgCol)+1)+' из '+imgCol.length;
  addEvent(get('img_close'),'click',close_img_handler);
  openImg.src = objImagePreloader.src;
  if(opened == 1)
  {
   openImg.width = img.width || 180;
   imgBlock.style.left = scrollPos().x + absPosition(img).x - 11 + 'px';
   imgBlock.style.top = scrollPos().y + absPosition(img).y - 11 + (img.offsetHeight - openImg.height)/2 + 'px';
  }
  moveImg(openImg,objImagePreloader);
  curOpenImg = img_obj;
  get('loader').style.visibility = 'hidden';
  get('new_image').style.marginLeft = '-'+get('new_image').offsetWidth/2+'px';
  //clear onLoad, IE behaves irratically with animated gifs otherwise
  objImagePreloader.onload=function(){};
 }
 objImagePreloader.src = img_obj.href + '?' +imgNoCache;
}

function moveImg(openImg,objPreload)
{
 this.delay = 30;
 var imgBlock = get('new_image');
 var i = openImg.width/3;
 
 if(opened == 1)
 {
  openImg.width += i;
  if(openImg.width > objPreload.width) openImg.width = objPreload.width;
  get('view_img').scrollTop = openImg.height
  if(openImg.width > 900)
  {
   get('view_img').style.width = '900px';dragImg = true
  }
  if(openImg.height > 600 && openImg.width > 900)
  {
   get('view_img').style.height = '600px';dragImg = true
  }
  imgBlock.style.left = '50%';
  imgBlock.style.marginLeft = '-' + imgBlock.offsetWidth/2 + 'px';
  imgBlock.style.top = scrollPos().y + getClientHeight()/2 - imgBlock.offsetHeight/2 + 'px';
  
  if(openImg.width < objPreload.width) this.timer = setTimeout(function(){moveImg(openImg,objPreload)}, this.delay)
 }
 if(opened == 0 || openImg.width == objPreload.width)
 {
  if(dragImg)
  {
   get('view_img').style.paddingRight = get('view_img').style.paddingBottom = '10px';
   get('img_nav').style.display = 'none';
   new DragObject(openImg)
  }
  else
  {
   get('img_nav').style.width = objPreload.width+20+'px';
   get('img_nav').style.height = objPreload.height+10+'px';
   get('img_nav').style.display = 'block';
  }
  get('img_desc').style.width = ((dragImg)?900:objPreload.width)+'px';
  openImg.width = objPreload.width;
  imgBlock.className='opened_img';
  imgBlock.style.left = '50%';
  imgBlock.style.marginLeft = '-' + imgBlock.offsetWidth/2 + 'px';
  imgBlock.style.top = scrollPos().y + getClientHeight()/2 - imgBlock.offsetHeight/2 + 'px';
 }
}

(function(){
 imgCol = getElementsByClass('enlarge',get('col1wrap'),'A');
  for(var i = 0;i < imgCol.length;i++){
   addEvent(imgCol[i],'click',show_image_handler);
  }
})();
