var img=new Array();
var imgCount=0;
var imgCode='';
var imgNum=0;
var imgUrl='';
// показать вьювер
function showViewer(id,code,opened){
	var i=0;
	// массив изображений по коду code
	if(code){
		if(imgCode!=code){
			imgCount=0;
			for(i=0; i<document.links.length; i++){
				if(document.links[i].id.substr(0,code.length)==code){
					img[imgCount]=document.links[i].id;
					imgCount++;
				}
			}
		}
	}else{
		img[0]=id;
		imgCount=1;
	}
	imgCode=(code?code:'');
	// текущее изображение
	for(i=0; i<imgCount; i++)
		if(img[i]==id)
			imgNum=i;
	imgUrl=document.getElementById(id).href;
	// покрытие
	var coverDiv=document.getElementById('viewer_cover_div');
	if(!coverDiv){
		coverDiv=document.createElement('DIV');
		coverDiv.id='viewer_cover_div';
		coverDiv.className='viewer_cover';
		coverDiv.onclick=function(){ hideViewer(); }
		document.body.appendChild(coverDiv);
	}
	// окружение вьювера
	var viewerDiv=document.getElementById('viewer_div');
	if(!viewerDiv){
		viewerDiv=document.createElement('DIV');
		viewerDiv.id='viewer_div';
		viewerDiv.className='viewer';
		// клик на вьювере
		viewerDiv.onclick=function(e){
			if (!e) var e=window.event;
			var element=e.target||e.srcElement;
			if (element.id=='viewer_div')
				hideViewer();
		}
		document.body.appendChild(viewerDiv);
	}
	// вьювер
	var imageDiv=document.getElementById('viewer_image_div');
	if(!imageDiv){
		imageDiv=document.createElement('DIV');
		imageDiv.id='viewer_image_div';
		imageDiv.className='viewer_image';
		viewerDiv.appendChild(imageDiv);
	}
	// изображение загрузки
	var imageLoading=document.getElementById('viewer_image_loading');
	if(!imageLoading){
		imageLoading=document.createElement('IMG');
		imageLoading.id='viewer_image_loading';
		imageLoading.src='sait/images/loading.gif';
		imageLoading.className='loading';
		imageDiv.appendChild(imageLoading);
	}
	// изображение
	var imageImg=document.getElementById('viewer_image_img');
	if(!imageImg){
		imageImg=document.createElement('IMG');
		imageImg.id='viewer_image_img';
		imageDiv.appendChild(imageImg);
	}
	// при загрузке изображения (основные действия)
	imageImg.onload=function(){
		if(imageImg.width||imageImg.offsetWidth){
			var addHor=30;
			var addVer=60;
			var w=(imageImg.width?imageImg.width:imageImg.offsetWidth);
			var h=(imageImg.height?imageImg.height:imageImg.offsetHeight);
			coverDiv.style.display='none';
			var pageSize=getPageSize();
			if(pageSize[0]<(w+addHor)) pageSize[0]=w+addHor;
			if(pageSize[1]<(h+addVer+50)) pageSize[1]=h+addVer+50;
			coverDiv.style.width=pageSize[0]+'px';
			coverDiv.style.height=pageSize[1]+'px';
			coverDiv.style.display='block';
			hideLoading();
			effResize('viewer_image_div',w+addHor,h+addVer,null,function(){ showImage(); });
			imageImg.onload=function(){};
		}else{
			setTimeout(function(){ imageImg.onload(); },1);
		}
	}
	// показ изображения
	hideImage();
	showLoading();
	if(!opened){
		imageDiv.style.width='150px';
		imageDiv.style.height='150px';
	}
	coverDiv.style.display='block';
	viewerDiv.style.display='block';
	imageDiv.style.top=((document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop)+50)+'px';
	if(imageImg.src==imgUrl){
		viewerDiv.style.display='block';
		imageImg.onload();
	}else{
		viewerDiv.style.display='block';
		imageImg.src=imgUrl;
	}
	// ссылки вперед, назад, закрыть
	var linkCloseDiv=document.getElementById('viewer_link_close_div');
	if(!linkCloseDiv){
		linkCloseDiv=document.createElement('DIV');
		linkCloseDiv.id='viewer_link_close_div';
		linkCloseDiv.className='close';
		linkCloseDiv.innerHTML='<img src="sait/images/viewer_close.gif" alt="Закрыть" onclick="hideViewer();">';
		imageDiv.appendChild(linkCloseDiv);
	}
	var linkPrevDiv=document.getElementById('viewer_link_prev_div');
	if(!linkPrevDiv){
		linkPrevDiv=document.createElement('DIV');
		linkPrevDiv.id='viewer_link_prev_div';
		linkPrevDiv.className='prev';
		imageDiv.appendChild(linkPrevDiv);
	}
	var linkNextDiv=document.getElementById('viewer_link_next_div');
	if(!linkNextDiv){
		linkNextDiv=document.createElement('DIV');
		linkNextDiv.id='viewer_link_next_div';
		linkNextDiv.className='next';
		imageDiv.appendChild(linkNextDiv);
	}
	linkPrevDiv.innerHTML='';
	linkNextDiv.innerHTML='';
	if(imgCount>1){
		if(imgNum>0) linkPrevDiv.innerHTML='<img src="sait/images/viewer_prev.gif" alt="Предыдущее изображение" onclick="showViewer(\''+img[imgNum-1]+'\',\''+imgCode+'\',true);">';
		else linkPrevDiv.innerHTML='<img src="sait/images/viewer_prev_dis.gif">';
		if(imgNum<imgCount-1) linkNextDiv.innerHTML+='<img src="sait/images/viewer_next.gif" alt="Следующее изображение" onclick="showViewer(\''+img[imgNum+1]+'\',\''+imgCode+'\',true);">';
		else linkNextDiv.innerHTML+='<img src="sait/images/viewer_next_dis.gif">';
	}
	// управление с помощью клавиш
	document.onkeydown=function(e){
		if(e==null){ // ie
			keycode=event.keyCode;
			escapeKey=27;
		}else{ // mozilla
			keycode=e.keyCode;
			escapeKey=(e.DOM_VK_ESCAPE?e.DOM_VK_ESCAPE:27);
		}
		key=String.fromCharCode(keycode).toLowerCase();
		if((key=='x')||(key=='c')||(keycode==escapeKey)){ // close viewer
			hideViewer();
		}else if((key=='p')||(keycode==37)){ // display previous image
			if(imgNum>0)
				showViewer(img[imgNum-1],imgCode,true);
		}else if((key=='n')||(keycode==39)){ // display next image
			if(imgNum<imgCount-1)
				showViewer(img[imgNum+1],imgCode,true);
		}
	}
}
// спрятать вьювер
function hideViewer(){
	document.getElementById('viewer_cover_div').style.display='none';
	document.getElementById('viewer_div').style.display='none';
}
// показать изображение
function showImage(){
	document.getElementById('viewer_image_img').style.visibility='visible';
	document.getElementById('viewer_image_img').style.position='static';
}
// спрятать изображение
function hideImage(){
	document.getElementById('viewer_image_img').style.visibility='hidden';
	document.getElementById('viewer_image_img').style.position='absolute';
}
function showLoading(){
	document.getElementById('viewer_image_loading').style.display='block';
}
function hideLoading(){
	document.getElementById('viewer_image_loading').style.display='none';
}
// размеры окна и страницы (в стиле у BODY нельзя указывать ширину)
function getPageSize(){
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	var windowWidth, windowHeight;
//	console.log(self.innerWidth);
//	console.log(document.documentElement.clientWidth);
	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}
//	console.log("xScroll " + xScroll)
//	console.log("windowWidth " + windowWidth)
	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
//	console.log("pageWidth " + pageWidth)
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}
