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


var galleryClass = function(){
	
	var shadowDiv, biggestHeight, objects = [];
	var whiteDiv, bigImage;
	
	var borderSize = 40;
	
	var imageObj, imageSrc, imageWidth, imageHeight, imageAlt;
	
	this.show = function(getObj, getSrc, getWidth, getHeight, getAlt){
		
		imageObj = getObj;
		imageSrc = getSrc;
		imageWidth = parseInt(getWidth);
		imageHeight = parseInt(getHeight);
		imageAlt = getAlt;
		
		this.objects(1);
		this.shadow(1);
		
		
	}
	
	
	this.objectImage = function(action){
		
		if(bigImage){
			bigImage.parentNode.removeChild(bigImage);
		}
		
		bigImage = document.createElement("img");
		bigImage.id = "bigImage";
		bigImage.border = '0';
		bigImage.style.display = 'none';
		
		bigImage.style.backgroundColor = '#FFFFFF';
		bigImage.style.backgroundImage = "url(/scripts/loading.gif)";
		bigImage.style.backgroundPosition = "center center";
		bigImage.style.backgroundRepeat = "no-repeat";
		
		bigImage.style.position = 'absolute';
		bigImage.style.left = 0;
		bigImage.style.top = 0;
		bigImage.style.zIndex = 27;
		document.body.appendChild(bigImage);
		
		
		if(action=="set"){
			
			var objectData = layer();
			objectData.object = whiteDiv;
			
			bigImage.src = imageSrc;
			
			bigImage.style.width = (whiteDiv.clientWidth-borderSize)+'px';
			bigImage.style.height = (whiteDiv.clientHeight-borderSize)+'px';
			bigImage.style.left = (objectData.getAbsoluteLeft()+borderSize/2)+'px';
			bigImage.style.top = (objectData.getAbsoluteTop()+borderSize/2)+'px';
			
			bigImage.style.display = '';
			
			bigImage.onclick = function(){
				gallery.objectImage();
			}
			
			gallery.setOpacity(bigImage, 0);
			
			for(var i=1;i<=10;i++){
				var timeoutAction = "gallery.setOpacity(document.getElementById('bigImage'), "+(i*10)+");";
				setTimeout(timeoutAction, i*20);
			}
			
		}else{
			
			for(var i=1;i<=10;i++){
				var timeoutAction = "gallery.setOpacity(document.getElementById('bigImage'), "+(100 - i*10)+");";
				
				if(i==10){
					timeoutAction += "document.getElementById('bigImage').style.display = 'none';setTimeout('gallery.objectBackground();', 100);";
				}
				
				setTimeout(timeoutAction, i*20);
			}
			
		}
		
		
		
	}
	
	
	this.objectBackground = function(action){
		
		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;
			shadowDiv.style.color = '#000000';
			document.body.appendChild(whiteDiv);
		}
		
		if(action=="set"){
			
			var objectData = layer();
			objectData.object = imageObj;
			
			var objectLeftOneStep = ((getDocumentWidth() / 2) - ((imageWidth + borderSize) / 2) - objectData.getAbsoluteLeft()) / 10;
			var objectTopOneStep = (getScrollY() + ((getWindowHeight() / 2) - ((imageHeight) / 2) - objectData.getAbsoluteTop())) / 10;
			
			var objectWidthOneStep = ((imageWidth + borderSize) - imageObj.clientWidth) / 10;
			var objectHeightOneStep = ((imageHeight + borderSize) - imageObj.clientHeight) / 10;
			
			whiteDiv.style.width = imageObj.clientWidth+'px';
			whiteDiv.style.height = imageObj.clientHeight+'px';
			whiteDiv.style.left = objectData.getAbsoluteLeft()+'px';
			whiteDiv.style.top = objectData.getAbsoluteTop()+'px';
			whiteDiv.style.display = '';
			
			whiteDiv.onclick = function(){
				gallery.objectImage();
			}
			
			gallery.setOpacity(whiteDiv, 0);
			
			for(var i=1;i<=10;i++){
				
				var timeoutAction = "gallery.setOpacity(document.getElementById('whiteDiv'), "+(i*10)+");";
				
				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 = \""+(imageObj.clientWidth+(i*objectWidthOneStep))+"px\";";
				timeoutAction += "document.getElementById('whiteDiv').style.height = \""+(imageObj.clientHeight+(i*objectHeightOneStep))+"px\";";
				
				if(i==10){
					timeoutAction += "gallery.objectImage('set');";
				}
				
				setTimeout(timeoutAction, i*20);
				
			}
			
			
		}else{
			
			var objectData = layer();
			objectData.object = whiteDiv;
			
			var object2Data = layer();
			object2Data.object = imageObj;
			
			var objectLeftOneStep = (object2Data.getAbsoluteLeft() - objectData.getAbsoluteLeft()) / 10;
			var objectTopOneStep = ((object2Data.getAbsoluteTop() - objectData.getAbsoluteTop())) / 10;
			
			var objectWidthOneStep = (imageWidth - imageObj.clientWidth) / 10;
			var objectHeightOneStep = (imageHeight - imageObj.clientHeight) / 10;
			
			for(var i=1;i<=10;i++){
				var timeoutAction = "gallery.setOpacity(document.getElementById('whiteDiv'), "+(100 - i*10)+");";
				
				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 = \""+(whiteDiv.clientWidth-(i*objectWidthOneStep))+"px\";";
				timeoutAction += "document.getElementById('whiteDiv').style.height = \""+(whiteDiv.clientHeight-(i*objectHeightOneStep))+"px\";";
				
				if(i==10){
					timeoutAction += "document.getElementById('whiteDiv').style.display = 'none';setTimeout('gallery.shadow();', 100);";
				}
				
				setTimeout(timeoutAction, i*20);
			}
			
		}
		
		
	}
	
	
	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){
			
			this.setOpacity(shadowDiv, 0);
			
			//shadowDiv.style.width = '100%';
			shadowDiv.style.width = getDocumentWidth()+'px';
			shadowDiv.style.height = gallery.getPageSize()+'px';
			shadowDiv.style.display = '';
			
			for(var i=1;i<=7;i++){
				var timeoutAction = "gallery.setOpacity(document.getElementById('shadowDiv'), "+(i*10)+");";
				
				if(i==7){
					timeoutAction += "gallery.objectBackground('set');";
				}
				
				setTimeout(timeoutAction, i*20);
			}
			
			shadowDiv.onclick = function(){
				gallery.objectImage();
			}
			
		}else{
			
			for(var i=1;i<=7;i++){
				var timeoutAction = "gallery.setOpacity(document.getElementById('shadowDiv'), "+(70 - i*10)+");";
				
				if(i==7){
					timeoutAction += "document.getElementById('shadowDiv').style.display = 'none';setTimeout('gallery.objects();', 100);";
				}
				
				setTimeout(timeoutAction, i*20);
			}
			
			shadowDiv.onclick = function(){}
			
		}
		
		
	}
	
	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';
				}
			}
			
		}else{
			
			for(var i in objects){
				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();
