
//------------ Info -------------/
//
//		Gallery Class v 1.2
//		Writed by Kirill Bugvin
//		Used: KLayers
//
//------------ Info -------------/

var loadedImages = [];

var galleryClass = function(){
	
	var shadowDiv, biggestHeight, objects = [];
	var whiteDiv, bigImage, loadingImage;
	
	var borderSize = 40;
	
	var imageObj, imageSrc, imageWidth, imageHeight, imageAlt;
	var imagesArray = false;
	var closeButton, enlargeButton, backButton, forwardButton, commentPlace;
	var changingImage;
	
	this.show = function(getObj, getSrc, getWidth, getHeight, getAlt){
		
		changingImage = false;
		
		imageObj = getObj;
		imageSrc = getSrc;
		imageWidth = parseInt(getWidth);
		imageHeight = parseInt(getHeight);
		imageAlt = getAlt;
		
		this.objects(1);
		this.loadingEffect('set');
		
		if(bigImage){
			document.body.removeChild(bigImage);
		}
		
		bigImage = document.createElement("img");
		bigImage.id = "bigImage";
		bigImage.border = '0';
		
		if(loadedImages[bigImage.src]){
			setTimeout(function(){gallery.loadingEffect();}, 10);
		}else{
			bigImage.onload = function(){gallery.loadingEffect();}
		}
		
		bigImage.style.display = 'none';
		
		bigImage.style.position = 'absolute';
		bigImage.style.left = 0;
		bigImage.style.top = 0;
		bigImage.style.zIndex = 27;
		
		bigImage.src = imageSrc;
		
		document.body.appendChild(bigImage);
		
	}
	
	
	this.change = function(getSrc, getWidth, getHeight, getAlt){
		
		changingImage = true;
		
		closeButton.style.display = 'none';
		enlargeButton.style.display = 'none';
		backButton.style.display = 'none';
		commentPlace.style.display = 'none';
		forwardButton.style.display = 'none';
		
		imageSrc = getSrc;
		imageWidth = parseInt(getWidth);
		imageHeight = parseInt(getHeight);
		imageAlt = getAlt;
		
		if(bigImage){
			bigImage.parentNode.removeChild(bigImage);
		}
		
		bigImage = document.createElement("img");
		bigImage.id = "bigImage";
		bigImage.border = '0';
		bigImage.src = imageSrc;
		
		if(loadedImages[bigImage.src]){
			setTimeout(function(){gallery.loadingEffect();}, 10);
		}else{
			bigImage.onload = function(){gallery.loadingEffect();}
		}
		
		bigImage.style.display = 'none';
		bigImage.style.background = "url('/scripts/loading.gif') center center no-repeat";
		
		bigImage.style.position = 'absolute';
		bigImage.style.left = 0;
		bigImage.style.top = 0;
		bigImage.style.zIndex = 27;
		document.body.appendChild(bigImage);
		
	}
	
	
	this.loadingEffect = function(action){
		
		if(!loadingImage){
			
			loadingImage = document.createElement("img");
			loadingImage.src = "/scripts/loading.gif";
			loadingImage.width = 20;
			loadingImage.height = 20;
			loadingImage.style.position = "absolute";
			loadingImage.style.zIndex = "3";
			document.body.appendChild(loadingImage);
			
		}
		
		var objectData = layer();
		objectData.object = imageObj;
		
		if(action=="set"){
			loadingImage.style.left = parseInt(objectData.getAbsoluteLeft()+(imageObj.clientWidth/2)-(loadingImage.width/2))+'px';
			loadingImage.style.top = parseInt(objectData.getAbsoluteTop()+(imageObj.clientHeight/2)-(loadingImage.height/2))+'px';
			this.setOpacity(imageObj, 30);
			loadingImage.style.display = '';
		}else{
			this.setOpacity(imageObj, 100);
			loadingImage.style.display = 'none';
			this.zoomImage();
		}
		
	}
	
	
	this.zoomImage = function(){
		
		loadedImages[bigImage.src] = true;
		
		if(changingImage){
			
			bigImage.style.width = imageWidth+'px';
			bigImage.style.height = imageHeight+'px';
			
			bigImage.style.left = ((getDocumentWidth() / 2) - ((imageWidth) / 2))+'px';
			bigImage.style.top = (getScrollY() + ((getWindowHeight() / 2) - ((imageHeight+50) / 2)))+'px';
			
			bigImage.style.display = '';
			
			this.setOpacity(bigImage, 0);
			
			gallery.objectBackground();
			
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 10)", 50);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 20)", 75);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 30)", 100);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 40)", 125);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 50)", 150);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 60)", 175);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 70)", 200);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 80)", 225);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 90)", 250);
			setTimeout("gallery.setOpacity(document.getElementById('bigImage'), 100)", 275);
			
		}else{
			
			var objectData = layer();
			objectData.object = imageObj;
			
			var objectLeftOneStep = ((getDocumentWidth() / 2) - ((imageWidth) / 2) - objectData.getAbsoluteLeft()) / 10;
			var objectTopOneStep = (getScrollY() + ((getWindowHeight() / 2) - ((imageHeight+50) / 2) - objectData.getAbsoluteTop())) / 10;
			
			var objectWidthOneStep = ((imageWidth) - imageObj.clientWidth) / 10;
			var objectHeightOneStep = ((imageHeight) - imageObj.clientHeight) / 10;
			
			bigImage.style.width = imageObj.clientWidth+'px';
			bigImage.style.height = imageObj.clientHeight+'px';
			bigImage.style.left = objectData.getAbsoluteLeft()+'px';
			bigImage.style.top = objectData.getAbsoluteTop()+'px';
			bigImage.style.display = '';
			
			for(var i=1;i<=10;i++){
				
				var timeoutAction = "";
				
				timeoutAction += "document.getElementById('bigImage').style.left = \""+(objectData.getAbsoluteLeft()+(i*objectLeftOneStep))+"px\";";
				timeoutAction += "document.getElementById('bigImage').style.top = \""+(objectData.getAbsoluteTop()+(i*objectTopOneStep))+"px\";";
				timeoutAction += "document.getElementById('bigImage').style.width = \""+(imageObj.clientWidth+(i*objectWidthOneStep))+"px\";";
				timeoutAction += "document.getElementById('bigImage').style.height = \""+(imageObj.clientHeight+(i*objectHeightOneStep))+"px\";";
				
				if(i==10){
					timeoutAction += "gallery.objectBackground();";
				}
				
				setTimeout(timeoutAction, i*20);
				
			}
			
		}
		
	}
	
	
	this.objectBackground = function(){
		
		if(!whiteDiv){
			whiteDiv = document.createElement("div");
			whiteDiv.id = "whiteDiv";
			whiteDiv.style.display = 'none';
			whiteDiv.style.backgroundColor = '#FFFFFF';
			whiteDiv.style.position = 'absolute';
			whiteDiv.style.left = 0;
			whiteDiv.style.top = 0;
			whiteDiv.style.zIndex = 26;
			document.body.appendChild(whiteDiv);
		}
		
		if(changingImage){
			
			var objectData = layer();
			objectData.object = whiteDiv;
			
			var objectLeftOneStep = ((getDocumentWidth() / 2) - ((imageWidth + borderSize) / 2) - objectData.getAbsoluteLeft()) / 10;
			var objectTopOneStep = (getScrollY() - (borderSize/2) + ((getWindowHeight() / 2) - ((imageHeight+50) / 2) - objectData.getAbsoluteTop())) / 10;
			
			var objectWidthOneStep = ((imageWidth + borderSize) - objectData.getWidth()) / 10;
			var objectHeightOneStep = ((imageHeight + borderSize + 60) - objectData.getHeight()) / 10;
			
			for(var i=1;i<=10;i++){
				
				var timeoutAction = "";
				
				timeoutAction += "document.getElementById('whiteDiv').style.left = \""+(objectData.getAbsoluteLeft()+(i*objectLeftOneStep))+"px\";";
				timeoutAction += "document.getElementById('whiteDiv').style.top = \""+(objectData.getAbsoluteTop()+(i*objectTopOneStep))+"px\";";
				timeoutAction += "document.getElementById('whiteDiv').style.width = \""+(objectData.getWidth()+(i*objectWidthOneStep))+"px\";";
				timeoutAction += "document.getElementById('whiteDiv').style.height = \""+(objectData.getHeight()+(i*objectHeightOneStep))+"px\";";
				
				if(i==10){
					timeoutAction += "gallery.actionButtons(1);";
				}
				
				setTimeout(timeoutAction, i*20);
				
			}
			
			
		}else{
			
			var objectData = layer();
			objectData.object = bigImage;
			
			var objectLeftOneStep = ((getDocumentWidth() / 2) - ((imageWidth + borderSize) / 2) - objectData.getAbsoluteLeft()) / 10;
			var objectTopOneStep = (getScrollY() - (borderSize/2) + ((getWindowHeight() / 2) - ((imageHeight+50) / 2) - objectData.getAbsoluteTop())) / 10;
			
			var objectWidthOneStep = ((imageWidth + borderSize) - bigImage.clientWidth) / 10;
			var objectHeightOneStep = ((imageHeight + borderSize + 60) - bigImage.clientHeight) / 10;
			
			whiteDiv.style.width = bigImage.clientWidth+'px';
			whiteDiv.style.height = bigImage.clientHeight+'px';
			whiteDiv.style.left = objectData.getAbsoluteLeft()+'px';
			whiteDiv.style.top = objectData.getAbsoluteTop()+'px';
			whiteDiv.style.display = '';
			
			for(var i=1;i<=10;i++){
				
				var timeoutAction = "";
				
				timeoutAction += "document.getElementById('whiteDiv').style.left = \""+(objectData.getAbsoluteLeft()+(i*objectLeftOneStep))+"px\";";
				timeoutAction += "document.getElementById('whiteDiv').style.top = \""+(objectData.getAbsoluteTop()+(i*objectTopOneStep))+"px\";";
				timeoutAction += "document.getElementById('whiteDiv').style.width = \""+(bigImage.clientWidth+(i*objectWidthOneStep))+"px\";";
				timeoutAction += "document.getElementById('whiteDiv').style.height = \""+(bigImage.clientHeight+(i*objectHeightOneStep))+"px\";";
				
				if(i==1){
					timeoutAction += "gallery.shadow(1);";
				}
				
				setTimeout(timeoutAction, i*20);
				
			}
			
		}
		
	}
	
	
	this.actionButtons = function(showButtons){
		
		if(!imagesArray){
			
			imagesArray = [];
			
			var img = document.getElementsByTagName("img");
			
			for(var i in img){
				
				if(img[i] && img[i].parentNode && img[i].parentNode.nodeName=="A" && img[i].parentNode.onclick){
					
					var tmp = document.createElement("textarea");
					tmp.value = img[i].parentNode.onclick;
					
					var sep = tmp.value.split('this.childNodes[0], ');
					
					if(!sep[1]){continue;}
					sep = sep[1].substr(0, 1);
					
					tmp = tmp.value.split(sep);
					if(tmp[1] && tmp[3] && tmp[5]){
						imagesArray[imagesArray.length] = {"src": tmp[1], "width": tmp[3], "height": tmp[5], "alt": img[i].alt};
					}
					
				}
				
			}
			
		}
		
		if(!closeButton){
			closeButton = document.createElement("img");
			closeButton.src = "/scripts/close.gif";
			closeButton.id = "closeButton";
			closeButton.width = "21";
			closeButton.height = "21";
			closeButton.style.position = "absolute";
			closeButton.style.display = "none";
			closeButton.style.cursor = "pointer";
			
			closeButton.onclick = function(){
				
				gallery.objects(0);
				
				closeButton.style.display = 'none';
				enlargeButton.style.display = 'none';
				
				whiteDiv.style.display = 'none';
				shadowDiv.style.display = 'none';
				
				backButton.style.display = 'none';
				commentPlace.style.display = 'none';
				forwardButton.style.display = 'none';
				
				bigImage.style.display = 'none';
				
			}
			
			closeButton.style.zIndex = 28;
			document.body.appendChild(closeButton);
		}
		
		
		if(!enlargeButton){
			enlargeButton = document.createElement("img");
			enlargeButton.src = "/scripts/enlarge.gif";
			enlargeButton.id = "enlargeButton";
			enlargeButton.width = "21";
			enlargeButton.height = "23";
			enlargeButton.style.position = "absolute";
			enlargeButton.style.display = "none";
			enlargeButton.style.cursor = "pointer";
			enlargeButton.style.zIndex = 28;
			enlargeButton.style.visibility = 'hidden';
			document.body.appendChild(enlargeButton);
		}
		
		if(!backButton){
			backButton = document.createElement("div");
			backButton.id = "backButton";
			backButton.style.cssText = "display:block;position:absolute;background: url('/scripts/back.gif') left 98.5% no-repeat;cursor: pointer;";
			backButton.style.zIndex = 28;
			document.body.appendChild(backButton);
		}
		
		if(!forwardButton){
			forwardButton = document.createElement("div");
			forwardButton.id = "forwardButton";
			forwardButton.style.cssText = "display:block;position:absolute;background: url('/scripts/forward.gif') right 98.5% no-repeat;cursor: pointer;";
			forwardButton.style.zIndex = 29;
			document.body.appendChild(forwardButton);
		}
		
		
		if(!commentPlace){
			commentPlace = document.createElement("table");
			commentPlace.style.cssText = "display:none;position:absolute;background: #fff;border-collapse: collapse;";
			commentPlace.style.zIndex = 29;
				
				row = commentPlace.insertRow(-1);
				cell = row.insertCell(-1);
				cell.style.verticalAlign = "middle";
				
			document.body.appendChild(commentPlace);
		}
		
		
		if(showButtons){
			
			var objectData = layer();
			objectData.object = bigImage;
			
			
			//--- Close button ---/
				
				closeButton.style.top = objectData.getAbsoluteTop()+(borderSize/2)+"px";
				closeButton.style.left = (objectData.getAbsoluteLeft()+bigImage.width)-(borderSize/2)-closeButton.width+"px";
				closeButton.style.display = '';
				
			
			
			//--- Enlarge button ---/
				
				enlargeButton.style.top = objectData.getAbsoluteTop()+(borderSize/2)+"px";
				enlargeButton.style.left = (objectData.getAbsoluteLeft())+(borderSize/2)+"px";
				enlargeButton.style.display = '';
				
				var tmpSrc = imageSrc.split("/");
				var largeSrc = "";
				for(var i in tmpSrc){
					if(i==tmpSrc.length-2){continue;}
					if(tmpSrc[i]){
						largeSrc += "/"+tmpSrc[i];
					}
				}
				
				enlargeButton.setAttribute("largeSrc", largeSrc);
				enlargeButton.onclick = function(){location.href = this.getAttribute("largeSrc");}
				
			
			
			//----- Getting current image position ------|
				
				var currentIndex = 0;
				
				for(var i in imagesArray){
					if(imagesArray[i]['src']==imageSrc){
						currentIndex = i;
						break;
					}
				}
				
			
			
			//--- Comment place ---|	
				
				if(imagesArray[currentIndex] && imagesArray[currentIndex]['alt']){
					
					commentPlace.style.top = (objectData.getAbsoluteTop()+imageHeight+15)+"px";
					commentPlace.style.left = (objectData.getAbsoluteLeft()+borderSize*2)+"px";
					
					commentPlace.style.width = (imageWidth-borderSize*4)+"px";
					commentPlace.style.height = "50px";
					
					commentPlace.rows[0].cells[0].innerHTML = imagesArray[currentIndex]['alt'];
					commentPlace.style.display = "";
					
				}else{
					commentPlace.style.display = "none";
				}
				
			
			
			//--- Back button ---/
				
				if(imagesArray[parseInt(currentIndex)-1]){
					
					backButton.style.display = 'block';
					
					backButton.style.top = (objectData.getAbsoluteTop()+borderSize+enlargeButton.height)+"px";
					backButton.style.left = objectData.getAbsoluteLeft()+"px";
					backButton.style.width = (bigImage.width/2)+"px";
					backButton.style.height = (bigImage.height)-(borderSize+enlargeButton.height)+60+"px";
					
					backButton.setAttribute("bigSrc", imagesArray[parseInt(currentIndex)-1]['src']);
					backButton.setAttribute("bigWidth", imagesArray[parseInt(currentIndex)-1]['width']);
					backButton.setAttribute("bigHeight", imagesArray[parseInt(currentIndex)-1]['height']);
					backButton.setAttribute("bigAlt", imagesArray[parseInt(currentIndex)-1]['alt']);
					
					var imagePreloader = new Image(imagesArray[parseInt(currentIndex)-1]['width'], imagesArray[parseInt(currentIndex)-1]['height']);
					imagePreloader.src = imagesArray[parseInt(currentIndex)-1]['src'];
					
					imagePreloader.onload = function(){loadedImages[this.src] = true;}
					
					backButton.onclick = function(){
						gallery.change(this.getAttribute("bigSrc"), this.getAttribute("bigWidth"), this.getAttribute("bigHeight"), this.getAttribute("bigAlt"));
						this.onclick = function(){return false;}
						return false;
					}
					
				}else{
					
					backButton.style.display = 'none';
					
				}
				
			
			
			//--- Forward button ---/
				
				if(imagesArray[parseInt(currentIndex)+1]){
					
					forwardButton.style.display = 'block';
					
					forwardButton.style.top = (objectData.getAbsoluteTop()+borderSize+enlargeButton.height)+"px";
					forwardButton.style.left = ((bigImage.width/2)+objectData.getAbsoluteLeft())+"px";
					
					forwardButton.style.width = (bigImage.width/2)+"px";
					forwardButton.style.height = (bigImage.height)-(borderSize+enlargeButton.height)+60+"px";
					
					forwardButton.setAttribute("bigSrc", imagesArray[parseInt(currentIndex)+1]['src']);
					forwardButton.setAttribute("bigWidth", imagesArray[parseInt(currentIndex)+1]['width']);
					forwardButton.setAttribute("bigHeight", imagesArray[parseInt(currentIndex)+1]['height']);
					forwardButton.setAttribute("bigAlt", imagesArray[parseInt(currentIndex)+1]['alt']);
					
					var imagePreloader = new Image(imagesArray[parseInt(currentIndex)+1]['width'], imagesArray[parseInt(currentIndex)+1]['height']);
					imagePreloader.src = imagesArray[parseInt(currentIndex)+1]['src'];
					
					imagePreloader.onload = function(){loadedImages[this.src] = true;}
					
					forwardButton.onclick = function(){
						gallery.change(this.getAttribute("bigSrc"), this.getAttribute("bigWidth"), this.getAttribute("bigHeight"), this.getAttribute("bigAlt"));
						this.onclick = function(){return false;}
						return false;
					}
					
				}else{
					
					forwardButton.style.display = 'none';
					
				}
				
			
		}
		
		
	}
	
	
	this.getPageSize = function(){
		var xScroll, yScroll;
		if(window.innerHeight && window.scrollMaxY){        
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		}else if(document.body.scrollHeight > document.body.offsetHeight){
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		}else{ 
		xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		var windowWidth, windowHeight;
		if(self.innerHeight){        
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		}else if(document.documentElement && document.documentElement.clientHeight){ 
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		}else if(document.body){
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}        
		if(yScroll < windowHeight){
			 pageHeight = windowHeight;
		}else{ 
			pageHeight = yScroll;
		}
		return pageHeight;
	}

	
	this.shadow = function(showShadow){
		
		if(!shadowDiv){
			shadowDiv = document.createElement("div");
			shadowDiv.id = 'shadowDiv';
			shadowDiv.style.display = 'none';
			shadowDiv.style.backgroundColor = '#000000';
			shadowDiv.style.position = 'absolute';
			shadowDiv.style.left = 0;
			shadowDiv.style.top = 0;
			shadowDiv.style.zIndex = 25;
			shadowDiv.style.color = '#FFFFFF';
			document.body.appendChild(shadowDiv);
		}
		
		if(showShadow && !changingImage){
			
			this.setOpacity(shadowDiv, 70);
			
			shadowDiv.style.width = getDocumentWidth()+'px';
			shadowDiv.style.height = gallery.getPageSize()+'px';
			shadowDiv.style.display = '';
			
			this.setOpacity(shadowDiv, 0);
			
			setTimeout("gallery.setOpacity(document.getElementById('shadowDiv'), 10)", 50);
			setTimeout("gallery.setOpacity(document.getElementById('shadowDiv'), 20)", 75);
			setTimeout("gallery.setOpacity(document.getElementById('shadowDiv'), 30)", 100);
			setTimeout("gallery.setOpacity(document.getElementById('shadowDiv'), 40)", 125);
			setTimeout("gallery.setOpacity(document.getElementById('shadowDiv'), 50)", 150);
			setTimeout("gallery.setOpacity(document.getElementById('shadowDiv'), 60)", 200);
			setTimeout("gallery.actionButtons(1);", 250);
			
		}else if(showShadow && changingImage){
			
			gallery.actionButtons(1);
			
		}else if(!showShadow){
			
			this.setOpacity(shadowDiv, 0);
			document.getElementById('shadowDiv').style.display = 'none';
			
		}
		
	}
	
	this.objects = function(hide){
		
		
		if(hide){
			
			objects = [];
			
			var selector = document.getElementsByTagName('select');
			for(var i=0;i<selector.length;i++){
				if(selector[i].style.visibility!="hidden"){
					objects[objects.length] = selector[i];
					selector[i].style.visibility = 'hidden';
				}
			}
			
			var object = document.getElementsByTagName('object');
			for(var i=0;i<object.length;i++){
				if(object[i].style.visibility!="hidden"){
					objects[objects.length] = object[i];
					object[i].style.visibility = 'hidden';
				}
			}
			
			var embed = document.getElementsByTagName('embed');
			for(var i=0;i<embed.length;i++){
				if(embed[i].style.visibility!="hidden"){
					objects[objects.length] = embed[i];
					embed[i].style.visibility = 'hidden';
				}
			}
			
			var iframe = document.getElementsByTagName('iframe');
			for(var i=0;i<iframe.length;i++){
				if(iframe[i].style.visibility!="hidden"){
					objects[objects.length] = iframe[i];
					iframe[i].style.visibility = 'hidden';
				}
			}
			
		}else{
			
			for(var i in objects){
				if(i && objects && objects[i] && objects[i].style){
					objects[i].style.visibility = 'visible';
				}
			}
			
		}
		
		
	}
	
	this.setOpacity = function(obj, opacity){
		obj.style.opacity = opacity/100;
		obj.style.filter = 'alpha(opacity='+opacity+')';
	}
	
}

var gallery = new galleryClass();