/*good zoom script by dotorg, 2010*/
var _SrcArray = [],
	_CurrentIndex = [],
	_Galleries = [],
	_TargetLink = '',
	_larrImage = '<img src="/jslibrary/zoom/larr.gif" width="19" height="14" />', 
	_rarrImage = '<img src="/jslibrary/zoom/rarr.gif" width="19" height="14" />'
	_shuffle = {};
function initZoom()
{
	var links = document.getElementsByTagName('a');

	if(links.length != 0)
	{
		for(var i = 0, l = links.length; i < l; i++)
		{
			if(links[i].className && /dotorg-zoom/.test(links[i].className))
			{
				links[i].id = 'dz-'+i;
				_evt.on(links[i],'click',addZoom,{ link:links[i]}, true);
				_SrcArray.push([links[i].className,links[i].getAttribute('href'),links[i].getAttribute('title'),links[i].id]);
			}
		}
		for(var i = 0, l = _SrcArray.length; i < l; i++)
		{
			if(/\[/.test(_SrcArray[i][0]))
			{
				if(_Galleries[_SrcArray[i][0]]) _Galleries[_SrcArray[i][0]].push(_SrcArray[i]);
				else _Galleries[_SrcArray[i][0]] = [_SrcArray[i]];
			}
		}
	}
	createTempImage();
}

function createTempImage()
{
	var tmpImg = document.createElement('img'), tmpImgContainer = document.createElement('div');
	tmpImgContainer.id = 'xxx-tmp-c';
	tmpImg.id = 'xxx-tmp-image';
	document.getElementsByTagName('body')[0].appendChild(tmpImgContainer);
	tmpImgContainer.appendChild(tmpImg);
}

function addZoom(e)
{
	_evt.stopPropagation(e);
	_evt.preventDefault(e);
	var cn = this.link.className, s = this.link.getAttribute('href'), t = this.link.getAttribute('title') ? this.link.getAttribute('title') : false;
	_TargetLink = this.link;
	zoomIt(cn,s,t);
}


function zoomIt(cn, src, desc)
{
	_utils.loadingPanelShow('Загрузка...', '#fff', '#c00', '', 100);
	if(!_dom.get('xxx-image')) createZoomHtml(desc);
	var imageContainer = _dom.get('xxx-image'),
		img = _dom.get('xxx-image-pic'),
		descBclock = _dom.get('xxx-image-desc'),
		closer = _dom.get('xxx-image-close'),
		mask = _dom.get('xxx-image-mask');
	
	mask.style.display = '';
	mask.style.visibility = 'visible';
	
	img.onload = function()
	{ 
		if(_Galleries[cn] && (_Galleries[cn].length > 1))
		{
			initShuffle(_Galleries[cn],cn,src,descBclock);
		}
		if(desc) _dom.get('xxx-image-desc-text').innerHTML = desc;
		resizeZoomImage(this,src);
		_utils.loadingPanelHide('', '', '', '', 10);
		_evt.on(closer, 'click', closeZoom);
	}
	img.src = src;
}

function closeZoom()
{
	if(_dom.get('xxx-image'))
	{
		_dom.get('xxx-image').style.visibility = 'hidden';
		_dom.get('xxx-image-mask').style.visibility = 'hidden';
		_dom.get('xxx-image').style.display = 'none';
		_dom.get('xxx-image-mask').style.display = 'none';
		_dom.get('xxx-image-pic').src = '';
	}
}

function createZoomHtml(desc)
{
	var imageContainer = document.createElement('div'),
		img = document.createElement('img'),
		descBclock = document.createElement('div'),
		closer = document.createElement('div'),
		body = document.getElementsByTagName('body')[0],
		mask = document.createElement('div'),
		html = document.documentElement,
		scrollFix = html.scrollHeight - html.clientHeight,
		wh = html.clientHeight + scrollFix;
	imageContainer.style.visibility = 'hidden';
	imageContainer.id = 'xxx-image';
	img.id = 'xxx-image-pic';
	closer.id = 'xxx-image-close';
	mask.id = 'xxx-image-mask';
	mask.style.width = body.offsetWidth + 'px';
	mask.style.height = wh + 'px';
	descBclock.id = 'xxx-image-desc';
	body.appendChild(mask);
	body.appendChild(imageContainer);
	imageContainer.appendChild(img);
	imageContainer.appendChild(descBclock);
	imageContainer.appendChild(closer);
	img.style.verticalAlign = 'middle';
	if(desc)
	{
		var descText = document.createElement('div');
		descText.id = 'xxx-image-desc-text';
		descBclock.appendChild(descText);
		descText.appendChild(document.createTextNode(desc));
	}
}

function initShuffle(arr,cn,src,arrowContainer)
{
	if(!_shuffle[cn])
	{
		_shuffle[cn] = true;
		var larr = document.createElement('div'), rarr = document.createElement('div'), lside = document.createElement('div'), rside = document.createElement('div');
		arrowContainer.appendChild(larr);
		arrowContainer.appendChild(rarr);
		arrowContainer.parentNode.appendChild(lside);
		arrowContainer.parentNode.appendChild(rside);
		larr.id = 'xxx-image-left-arrow';
		rarr.id = 'xxx-image-right-arrow';
		lside.id = 'xxx-image-left-side';
		rside.id = 'xxx-image-right-side';
		larr.innerHTML = _larrImage;
		rarr.innerHTML = _rarrImage;
		_evt.on(larr,'click', shiftPic, {key:'back', srcArr:arr, cName : cn}, true);
		_evt.on(rarr,'click', shiftPic, {key:'fwd', srcArr:arr, cName : cn}, true);
		_evt.on(lside,'click', shiftPic, {key:'back', srcArr:arr, cName : cn}, true);
		_evt.on(rside,'click', shiftPic, {key:'fwd', srcArr:arr, cName : cn}, true);
	}
	_CurrentIndex[cn] = getSrcArrayIndex(arr);
	toggleArrowsStatus(_CurrentIndex[cn],cn,arr);
}

function getSrcArrayIndex(arr){for(var i = 0, len = arr.length; i < len; i++){	if(arr[i][3] == _TargetLink.id) return i;}}

function toggleArrowsStatus(indx,cn,arr)
{
	var larr = _dom.get('xxx-image-left-arrow'), rarr = _dom.get('xxx-image-right-arrow'), lside = _dom.get('xxx-image-left-side'), rside = _dom.get('xxx-image-right-side');
	larr.style.display = lside.style.display = (indx == 0) ? 'none' : '';
	rarr.style.display = rside.style.display = (indx == (arr.length-1)) ? 'none' : '';
}

function shiftPic(e)
{
	_evt.stopPropagation(e);
	var img = _dom.get('xxx-image-pic'), imgParent = img.parentNode, text = _dom.get('xxx-image-desc-text'), arr = this.srcArr, cn = this.cName;
	img.style.visibility = 'hidden';
	if(text) text.style.visibility = 'hidden';
	switch(this.key)
	{
		case 'fwd' : _CurrentIndex[cn]++
		break;
		case 'back' : _CurrentIndex[cn]--
		break;
	}
	toggleArrowsStatus(_CurrentIndex[cn],cn,arr);
	img.onload = function()
	{
		resizeZoomImage(this,arr[_CurrentIndex[cn]][1]);
		if(text)
		{
			text.innerHTML = arr[_CurrentIndex[cn]][2];
			text.style.visibility = 'visible';
		}
	}
	img.src = arr[_CurrentIndex[cn]][1];
}

function resizeZoomImage(img,newSrc)
{
	var clientWidth = document.documentElement.clientWidth - 80, clientHeight = document.documentElement.clientHeight - 130, coeff = 1, iw, ih, tempImg = _dom.get('xxx-tmp-image');
	//alert('clientWidth = '+clientWidth);alert('clientHeight = '+clientHeight);
	img.style.visibility = 'hidden';
	tempImg.onload = function()
	{
		iw = tempImg.offsetWidth;
		ih = tempImg.offsetHeight;

		if(iw > clientWidth)
		{
			ih = ih*clientWidth/iw;
			iw = clientWidth;
			
		}
		if(ih > clientHeight)
		{
			iw = iw*clientHeight/ih;
			ih = clientHeight;
		}
		
		img.style.width = iw.toFixed() + 'px';
		img.style.height = ih.toFixed() + 'px';
		img.parentNode.style.width = iw.toFixed() + 'px';
		img.style.visibility = 'visible';
		centerZoomImageContainer(img.parentNode);
		tempImg.src = '';
		if(_dom.get('xxx-image-left-side') && _dom.get('xxx-image-right-side'))
		{
			var lside = _dom.get('xxx-image-left-side'),
				rside = _dom.get('xxx-image-right-side');
			lside.style.width = Math.floor(iw.toFixed()/2) + 'px';	
			lside.style.height = ih.toFixed() + 'px';
			rside.style.width = Math.floor(iw.toFixed()/2) + 'px';	
			rside.style.height = ih.toFixed() + 'px';
		}
	}
	tempImg.src = newSrc;
}


function centerZoomImageContainer(div)
{
	var body = document.getElementsByTagName('body')[0], 
		html = document.documentElement,
		scrollHeightFix, scrollWidthFix;
	div.style.visibility = 'hidden';
	div.style.display = '';
	scrollHeightFix = (YAHOO.env.ua.webkit) ? body.scrollTop : html.scrollTop;
	scrollWidthFix = (YAHOO.env.ua.webkit) ? body.scrollLeft : html.scrollLeft;
	div.style.top = Math.abs(Math.round((html.clientHeight - div.offsetHeight)/2)) + scrollHeightFix + 'px';
	div.style.left = Math.round((html.clientWidth - div.offsetWidth)/2) + scrollWidthFix + 'px';
	div.style.visibility = 'visible';
}

