function fanPicGallery(){
	var _self = this;
	this.gallery_pics = Array();
	this.gallery_index_rel = Array();
	this.gallery_current_pic = false;
	
	fanPicGallery.init = function(){
		if(fanPicGallery.initiated){
			return;
		}
		
		fanPicGallery.imgElement = false;
		fanPicGallery.loadingImage = false;
		fanPicGallery.maxWidthImages = Array();
		
		fanPicGallery.picturePlaceholderDiv = document.createElement('div');
		fanPicGallery.picturePlaceholderDiv.id = 'fan_picturePlaceholderDiv';
		fanPicGallery.picturePlaceholderDiv.align = 'center';
		
		var table_layout = document.createElement('table');
		table_layout.height = '100%';
		table_layout.setAttribute('height', '100%');
		fanPicGallery.picturePlaceholderDiv.appendChild(table_layout);
		
		var tbody_layout = document.createElement('tbody');
		table_layout.appendChild(tbody_layout);
		
		var tr_layout = document.createElement('tr');
		tbody_layout.appendChild(tr_layout);
		
		var td_layout = document.createElement('td');
		tr_layout.appendChild(td_layout);
		td_layout.valign = "middle";
		td_layout.align = "center";
		
		fanPicGallery.picturePlaceholder = document.createElement('div');
		fanPicGallery.picturePlaceholder.id = "fan_picturePlaceholder";
		td_layout.appendChild(fanPicGallery.picturePlaceholder);
	
		var temp_elem = fanPicGallery.picturePlaceholderDiv;
		jQuery(document.body).ready(function(){document.body.appendChild(temp_elem);});
		
		fanPicGallery.loadingImage = new Image();
		fanPicGallery.loadingImage.src = fan_server_url+"/images/wait.gif";
		fanPicGallery.loadingImage.loop = -1;
		fanPicGallery.initiated = true;
	}
	
	this.set_gallery_pics = function(pic_url_array){
		for(var i in pic_url_array){
			var temp_index = _self.gallery_pics.push(pic_url_array[i]) - 1;
			_self.gallery_index_rel[i] = temp_index;
		}
	}
	
	this.show_gallery_pic = function(pic_index, internal_index){
		if(typeof(internal_index)!='number'){
			internal_index = _self.gallery_index_rel[pic_index];
		}
		_self.gallery_current_pic = internal_index;
		_self.showPicture(_self.gallery_pics[internal_index]);
	}
	
	this.show_next_prev = function(){
		var pictureNavContainer = document.createElement('div');
		pictureNavContainer.id = 'fan_pictureNavContainer';
		
		fanPicGallery.picturePlaceholder.appendChild(pictureNavContainer);
		
		//prev button
		if(_self.gallery_current_pic>0){
			var prev_btn = document.createElement('a');
			prev_btn.className = 'fan_gallery_prev';
			prev_btn.href = '#';
			prev_btn.innerHTML = 'prev';
			pictureNavContainer.appendChild(prev_btn);
			prev_btn.onclick = function(){
				_self.show_gallery_pic(null, _self.gallery_current_pic-1);
				return false;
			}
		}
		
		//next button
		if(_self.gallery_current_pic < (_self.gallery_pics.length - 1)){
			var next_btn = document.createElement('a');
			next_btn.className = 'fan_gallery_next';
			next_btn.href = '#';
			next_btn.innerHTML = 'next';
			pictureNavContainer.appendChild(next_btn);
			next_btn.onclick = function(){
				_self.show_gallery_pic(null, _self.gallery_current_pic+1);
				return false;
			}
		}
	}
	
	this.showPicture = function (url){
		if(!url){
			return false;
		}
		
		fan_makeScrollingBody();
		fan_show_transparent_bg();
		fanPicGallery.picturePlaceholderDiv.style.display='block';
		fanPicGallery.picturePlaceholderDiv.style.visibility='visible';
		
		fanPicGallery.picturePlaceholder.innerHTML = '';
	
		var image = document.createElement('img');
		image.style.border = '2px solid #000000';
		image.style.cursor = 'pointer';
		image.onclick = function(){hidePicture();};
		image.title = 'click to close';
		
		fanPicGallery.picturePlaceholder.appendChild(fanPicGallery.loadingImage);
		fanPicGallery.imgElement = image;
		
		$(image).load(function(){
			_self.resizeImg(url);
			_self.show_next_prev();
		});
		
		image.setAttribute('src',url); // must be after onload is set
		
		return true;
	}
	
	this.hidePicture = function(){
		fan_hide_transparent_bg();
		fanPicGallery.picturePlaceholderDiv.style.display='none';
		fanPicGallery.picturePlaceholderDiv.style.visibility='hidden';
		fan_makeUnScrollingBody();
	}
	
	this.resizeImg = function(isrc) {
		fanPicGallery.picturePlaceholder.innerHTML = '';
	
		var clientHeight;
		var clientWidth;
		
		if(ie4){
			clientHeight = fan_strict_mode?document.documentElement.clientHeight:document.body.clientHeight;
			clientWidth = fan_strict_mode?document.documentElement.clientWidth:document.body.clientWidth;
		}
		else{
			clientHeight = window.innerHeight;
			clientWidth = window.innerWidth;
		}
	
		var oImg = fanPicGallery.imgElement;
		var xRatio = oImg.width/clientWidth;
		var yRatio = oImg.height/clientHeight;
		var ratio = Math.max(xRatio, yRatio);
		if(ratio > 0.9){
			fanPicGallery.imgElement.width = parseInt(oImg.width / ratio * 0.9);
			fanPicGallery.imgElement.height = parseInt(oImg.height / ratio * 0.9);
		}
		
		fanPicGallery.picturePlaceholder.appendChild(fanPicGallery.imgElement);
	}
}

fanPicGallery();
fanPicGallery.init();
