function ImageGallery(array, int, subs){
	var picturesList = array;	
	var currentPicture = int;
	var numPictures = picturesList.length;
	
	var subtitles = subs;
	
	var background;
	
	var closeButtonArea;
	var closeButton;
	var singlePrev;
	var singleNext;
	
	var contentArea;
	var panelArea;
	var panelBG;
	var pictureArea;
	var subtitleArea;
	
	var loading;
	var picture;
	var leftArrow;
	var rightArrow;
	
	var MAX_PICTURES_PER_ROW = 7;
	var maxRows = Math.ceil(numPictures / MAX_PICTURES_PER_ROW) -1;
	var currentRow = 0;
	
	var closeWindow = function(){	
		removeElement(background);
	};
	
	var removeElement = function(element){
		if(typeof(element) != "undefined"){
			var parent = element.parentNode;
			parent.removeChild(element);
		}
	};
	
	var loadPicture = function(index){
		picture = document.createElement("img");
		picture.src = "imagens/" + picturesList[index] + "?" + getRandomNumber();
		picture.className = "im_picture";
		picture.onload = displayPicture;
	};
	
	var loadPicture2 = function(evt){
		var target = getEventTarget(evt);
		
		removeElement(picture);
			
		loading = document.createElement("img");
		loading.className = "im_loading";
		loading.src = "images/assets/carregando.png";
		
		pictureArea.appendChild(loading);
		
		picture = document.createElement("img");
		picture.src = "imagens/" + picturesList[target.id] + "?" + getRandomNumber();
		picture.className = "im_picture";
		picture.onload = displayPicture;
	};
	
	var displayPicture = function(){
		removeElement(loading);
		pictureArea.appendChild(picture);
		
		picture.className = "im_picture";
		
		
		removeElement(subtitleArea);
		if(subtitles[currentPicture] != "" && typeof(subtitles[currentPicture]) != "undefined"){
			subtitleArea = document.createElement("div");
			subtitleArea.className = "im_subtitleArea";
			subtitleArea.innerHTML = subtitles[currentPicture];
			pictureArea.appendChild(subtitleArea);
		}
	};
	
	var nextRow = function(){
		if(currentRow < maxRows){
			cleanElement(thumbArea);
			
			currentRow++;
			addjustButtonsOpacity();
			
			fetchThumbnails();
		}
	};
	
	var prevRow = function(){
		if(currentRow > 0){
			cleanElement(thumbArea);
			
			currentRow--;
			addjustButtonsOpacity();
			
			fetchThumbnails();
		}
	};
	
	var nextPicture = function(){
		if(currentPicture < (numPictures - 1)){
			removeElement(picture);
				
			loading = document.createElement("img");
			loading.className = "im_loading";
			loading.src = "images/assets/carregando.png";
			
			pictureArea.appendChild(loading);
			
			picture = document.createElement("img");
			picture.src = "imagens/" + picturesList[++currentPicture] + "?" + getRandomNumber();
			picture.className = "im_picture";
			picture.onload = displayPicture;
			
			addjustButtonsOpacity();
		}
	}
	
	var prevPicture = function(){
		if(currentPicture > 0){
			removeElement(picture);
				
			loading = document.createElement("img");
			loading.className = "im_loading";
			loading.src = "images/assets/carregando.png";
			
			pictureArea.appendChild(loading);
			
			picture = document.createElement("img");
			picture.src = "imagens/" + picturesList[--currentPicture] + "?" + getRandomNumber();
			picture.className = "im_picture";
			picture.onload = displayPicture;
			
			addjustButtonsOpacity();
		}
	}
	
	var getRandomNumber = function (){
		var date = new Date(); 
		return date.getTime(); 
	};
	
	var addjustButtonsOpacity = function(){
		if(maxRows > 0){
			if(currentRow > 0){
				leftArrow.src = "images/assets/prev_btn.png";
			}else{
				leftArrow.src = "images/assets/prev30_btn.png";
			}
				
			if(currentRow == maxRows){
				rightArrow.src = "images/assets/next30_btn.png";
			}else{
				rightArrow.src = "images/assets/next_btn.png";
			}
		}
		//
		if(currentPicture == 0){
			singlePrev.src = "images/assets/singlePrev30_btn.png";
		}else{
			singlePrev.src = "images/assets/singlePrev_btn.png";
		}
		
		if(currentPicture == (numPictures - 1)){
			singleNext.src = "images/assets/singleNext30_btn.png";
		}else{
			singleNext.src = "images/assets/singleNext_btn.png";
		}
	};
	
	var fetchThumbnails = function (){
		var startIndex = MAX_PICTURES_PER_ROW * currentRow;
		
		
		for(var i = startIndex; i < (startIndex + 7); i++){
			var thumb = document.createElement("img");
			thumb.src = "imagens/thumb_" + picturesList[i] + "?" + getRandomNumber();
			thumb.id = i;
			thumb.className = "im_panelThumbArea";
			
			thumb.onclick = loadPicture2;
			
			if(i == 0){
				thumb.style.marginLeft = "0px";
			}
			
			thumbArea.appendChild(thumb);
			
			if(!(picturesList[i + 1])){
				break;
			}
			
		}
		addjustButtonsOpacity();
	};
	
	var init = function(){
		background = document.createElement("div");
		background.align = "center";
		background.className = "im_background";
		//
		closeButtonArea = document.createElement("div");
		closeButtonArea.align = "right";
		closeButtonArea.className = "im_closeButtonArea";
		//
		closeButton = document.createElement("img");
		closeButton.src = "images/assets/close_btn.png";
		closeButton.className = "simpleButton";
		closeButton.onclick = closeWindow;
		//
		contentArea = document.createElement("div");
		contentArea.align = "center";
		contentArea.className = "im_contentArea";
		//
		pictureArea = document.createElement("div");
		pictureArea.className = "im_pictureArea";
		pictureArea.align = "center";
		//
		loading = document.createElement("img");
		loading.className = "im_loading";
		loading.src = "images/assets/carregando.png";
		//
		document.body.appendChild(background);
		background.appendChild(closeButtonArea);
		background.appendChild(contentArea);
		contentArea.appendChild(pictureArea);
		pictureArea.appendChild(loading);
		closeButtonArea.appendChild(closeButton);
		//
		singlePrev = document.createElement("img");
		singlePrev.src = "images/assets/singlePrev_btn.png";
		singlePrev.className = "im_singlePrev";
		singlePrev.onclick = prevPicture;
		background.appendChild(singlePrev);
		
		singleNext = document.createElement("img");
		singleNext.src = "images/assets/singleNext_btn.png";
		singleNext.className = "im_singleNext";
		singleNext.onclick = nextPicture;
		background.appendChild(singleNext);
		
		//
		if(numPictures > 1){
			panelArea = document.createElement("div");
			panelArea.id = "panelArea";
			panelArea.align = "center";
			panelArea.className = "im_panelArea";
			//
			panelBG = document.createElement("div");
			panelBG.align = "center";
			panelBG.className = "im_panelBG";
			//
			thumbArea = document.createElement("div");
			//
			background.appendChild(panelArea);
			panelArea.appendChild(panelBG);
			panelBG.appendChild(thumbArea);
			
			//Setas Navegadoras
			if(maxRows > 0){
				leftArrow = document.createElement("img");
				leftArrow.className = "im_leftArrowArea";
				leftArrow.src = "images/assets/prev_btn.png";
				leftArrow.onclick = prevRow;
				panelBG.appendChild(leftArrow);
				
				rightArrow = document.createElement("img");
				rightArrow.className = "im_rightArrowArea";
				rightArrow.src = "images/assets/next_btn.png";
				rightArrow.onclick = nextRow;
				panelBG.appendChild(rightArrow);
			}
			
			fetchThumbnails();
		}

		loadPicture(currentPicture);
	}();
}
