function hideWithTimeout(album_id)
{
	getPhotosCount(swfu_config.album_id);
    getHilightPhoto(swfu_config.album_id);
    
	clearTimeout(upload_timer);

	// upload_timer = setTimeout(
	// 	function(){
	// 	    	
	// 	    $('#thumbnails' + album_id).hide(700,
	// 	    function (){
	// 	        $('#thumbnails' + album_id).html(' ');
	// 	        $('#thumbnails' + album_id).show();
	// 	    
	// 	    });
	// 	        
	// 	}
	// 	, 5000);
	
	
	//
	
}


// Queues, percenage...

function Queues()
{ 
	this.queues_finished = 0;
	this.queue_count = 0;

	this.totalUploadFinished = function()
	{

	    this.queues_finished =0;
	    this.queue_count = 0;
	}
         
	this.oneQueueFinished = function()
	{
	   this.queues_finished++;
	}

	this.getFinishedQueueCount = function()
	{
	    return this.queues_finished;
	}

	this.getTotalPercentage = function()
	{
		finished = this.getFinishedQueueCount();
		total = this.getQueuedCount();
		
		return (finished / total * 100);
	}
           
	this.getQueuedCount = function()
	{
		return this.queue_count;  
	}

	this.setQueuedCount = function(value)
	{
		this.queue_count = value;
	}
}

Queue = new Queues;

function fileQueued()
{
	Queue.setQueuedCount(Queue.getQueuedCount() + 1);
}


function fileQueueError(fileObj, error_code, message) {
	try {
		var error_name = "";
		switch(error_code) {
			case SWFUpload.ERROR_CODE_QUEUE_LIMIT_EXCEEDED:
				error_name = "You have attempted to queue too many files.";
			break;
		}

		if (error_name !== "") {
			alert(error_name);
			return;
		}

		switch(error_code) {
			case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
				image_name = "zerobyte.gif";
			break;
			case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
				//image_name = "toobig.gif";
                alert('File size should not exceed 20 MB!');
			break;
			case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			default:
				alert(message);
				image_name = "error.gif";
			break;
		}

	} catch (ex) { this.debug(ex); }

}

function fileDialogComplete(num_files_queued) {

    swfu_config.final_caption = "All images received.";
    
	try {
		if (num_files_queued > 0) {
		    
			Queue.setQueuedCount(num_files_queued);
			
			Queue.queues_finished = 0;
			$('#total').css('width', '0px');
			this.startUpload();
		}
	} catch (ex) {
		this.debug(ex);
	}
	
}

function uploadProgress(fileObj, bytesLoaded) {

	try {
		var percent = Math.ceil((bytesLoaded / fileObj.size) * 100)

		var progress = new FileProgress(fileObj,  this.customSettings.upload_target);
		progress.SetProgress(percent);
		if (percent === 100) {
			progress.SetStatus("Creating thumbnail...");
			progress.ToggleCancel(false);
			progress.ToggleCancel(true, this, fileObj.id);
		} else {
			progress.SetStatus("Uploading...");
			progress.ToggleCancel(true, this, fileObj.id);
		}
	} catch (ex) { this.debug(ex); }
}

function uploadSuccess(fileObj, server_data) {   

	try {
		// upload.php returns the thumbnail id in the server_data, use that to retrieve the thumbnail for display
		
		if (swfu_config.upload_type == 'avatar')
		{
			AddImage(BASE_URL + "public/avatars/" + uid + '.jpg?rnd=' + Math.random() + Math.random());
		}
		else if (swfu_config.upload_type == 'photos')
		{
            
            if (server_data.search(/;/) == -1) // if not contain ; - local path
            {
                
                
//                test = eval(server_data);
//                alert(test);
                eval(server_data);
                swfu_config.final_caption = "Creating thumbnails. Please, wait...";
                uploadFromLocalDir(server_data.local_dir, server_data.album_num);
            }
            else
            {
                images = server_data.split(';');
                for (i in images){
                    if (images[i])
                    {
                        AddImage(images[i]);
                    }
                }
                hideWithTimeout(swfu_config.album_id);
            }

        }

        var progress = new FileProgress(fileObj,  this.customSettings.upload_target);

		progress.SetStatus("Thumbnail Created.");
		progress.ToggleCancel(false);


	} catch (ex) { this.debug(ex); }
	


}

function uploadComplete(fileObj) {

    
	try {
		/*  I want the next upload to continue automatically so I'll call startUpload here */
		if (this.getStats().files_queued > 0) {
			this.startUpload();
		} else {
			var progress = new FileProgress(fileObj,  this.customSettings.upload_target);
			progress.SetComplete();
			progress.SetStatus(swfu_config.final_caption);
			
			progress.ToggleCancel(false);
			
			if (swfu_config.upload_type == 'photos'){ 
				                                                                             
//				setTimeout(
//			    function(){
//			        document.getElementById(swfu_config.progress_div + swfu_config.album_id).innerHTML = '';
//			    }
//			    , 2000);
				
			}
		}
	} catch (ex) { this.debug(ex); }
	
	
	
	Queue.oneQueueFinished();   
	var percentage = Queue.getTotalPercentage();                                                                       
	$('#total').animate({width:percentage  + '%'}, 1500);
    
	function hideThumbnails(){
		$('#thumbnails' + swfu_config.album_id).hide(700,
	    function (){
	        $('#thumbnails' + swfu_config.album_id).html(' ');
	        $('#thumbnails' + swfu_config.album_id).show();
    
	    });
	}
 
	if (percentage == 100){
		setTimeout(function(){
			document.getElementById(swfu_config.progress_div + swfu_config.album_id).innerHTML = '';
			hideThumbnails();
		}, 
		3000);
		
		
	}
	

	if (Queue.getFinishedQueueCount() > 9 && ! (Queue.getFinishedQueueCount() % 10)){
		hideThumbnails();
	}
	
	                     
}



function uploadError(fileObj, error_code, message) {
	var image_name =  "error.gif";
	try {
		switch(error_code) {
			case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
				try {
					var progress = new FileProgress(fileObj,  this.customSettings.upload_target);
					progress.SetCancelled();
					progress.SetStatus("Stopped");
					progress.ToggleCancel(true, this, fileObj.id);
				}
				catch (ex) { this.debug(ex); }
			case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
				image_name = "uploadlimit.gif";
			break;
			default:
				alert(message);
			break;
		}

	} catch (ex) { this.debug(ex); }

}


/* ******************************************
 *	FileProgress Object
 *	Control object for displaying file info
 * ****************************************** */


function FileProgress(fileObj, target_id) {
	
	this.file_progress_id = "divFileProgress";
	

	this.fileProgressWrapper = document.getElementById(this.file_progress_id);
	if (!this.fileProgressWrapper) {
		this.fileProgressWrapper = document.createElement("div");
		this.fileProgressWrapper.className = "progressWrapper";
		this.fileProgressWrapper.id = this.file_progress_id;
		
		
		if (swfu_config.upload_type == 'avatar') this.fileProgressWrapper.style.width = '200px';
		
		this.fileProgressElement = document.createElement("div");
		this.fileProgressElement.className = "progressContainer"; 
        if (swfu_config.upload_type == 'avatar') this.fileProgressElement.style.width = '180px';
                         
		var totalProgress = document.createElement("div");
		totalProgress.className = "progressBarInProgress";
		totalProgress.style.background = "#0505aa";
		totalProgress.style.height = "4px";
		totalProgress.id = "total";

		
		var progressCancel = document.createElement("a");
		progressCancel.className = "progressCancel";
		progressCancel.href = "#";
		progressCancel.style.visibility = "hidden";
		progressCancel.appendChild(document.createTextNode(" "));

		var progressText = document.createElement("div");
		progressText.className = "progressName"; 
		progressText.appendChild(document.createTextNode(/*fileObj.name*/''));

		var progressBar = document.createElement("div");
		progressBar.className = "progressBarInProgress";

		var progressStatus = document.createElement("div");
		progressStatus.className = "progressBarStatus";
		progressStatus.innerHTML = "&nbsp;";

		this.fileProgressElement.appendChild(progressCancel);
		
		this.fileProgressElement.appendChild(progressText);
		this.fileProgressElement.appendChild(progressStatus);
		this.fileProgressElement.appendChild(progressBar);
		this.fileProgressElement.appendChild(totalProgress); 

		this.fileProgressWrapper.appendChild(this.fileProgressElement);

		document.getElementById(target_id).appendChild(this.fileProgressWrapper);
		FadeIn(this.fileProgressWrapper, 0);

	} else {
		this.fileProgressElement = this.fileProgressWrapper.firstChild;
		this.fileProgressElement.childNodes[1].firstChild.nodeValue = fileObj.name;
	}

	this.height = this.fileProgressWrapper.offsetHeight;
                                       
}
FileProgress.prototype.SetProgress = function(percentage) {
	this.fileProgressElement.className = "progressContainer green";
	this.fileProgressElement.childNodes[3].className = "progressBarInProgress";
	this.fileProgressElement.childNodes[3].style.width = percentage + "%";
}
FileProgress.prototype.SetComplete = function() {
	this.fileProgressElement.className = "progressContainer blue";
	this.fileProgressElement.childNodes[3].className = "progressBarComplete";
	this.fileProgressElement.childNodes[3].style.width = "";

}
FileProgress.prototype.SetError = function() {
	this.fileProgressElement.className = "progressContainer red";
	this.fileProgressElement.childNodes[3].className = "progressBarError";
	this.fileProgressElement.childNodes[3].style.width = "";
                     
}
FileProgress.prototype.SetCancelled = function() {
	this.fileProgressElement.className = "progressContainer";
	this.fileProgressElement.childNodes[3].className = "progressBarError";
	this.fileProgressElement.childNodes[3].style.width = "";

}
FileProgress.prototype.SetStatus = function(status) {
	this.fileProgressElement.childNodes[2].innerHTML = '<span style="color: black !important;">' + status + '</span>';
}

FileProgress.prototype.ToggleCancel = function(show, upload_obj, file_id) {
	this.fileProgressElement.childNodes[0].style.visibility = show ? "visible" : "hidden";
	if (upload_obj) {
		this.fileProgressElement.childNodes[0].onclick = function() { upload_obj.cancelUpload(); return false; };
	}
}

function AddImage(src) {
	var new_img = document.createElement("img");
	new_img.style.margin = "3px";

	if (swfu_config.upload_type == 'avatar') 
	{
		document.getElementById("thumbnails" + swfu_config.album_id).innerHTML = '';
	} 
	
	
	document.getElementById("thumbnails"+swfu_config.album_id).appendChild(new_img);
	
	if (new_img.filters) {
		try {
			new_img.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 0;
		} catch (e) {
			// If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
			new_img.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + 0 + ')';
		}
	} else {
		new_img.style.opacity = 0;
	}

	new_img.onload = function () { FadeIn(new_img, 0); };
	new_img.src = src;
}

function FadeIn(element, opacity) {
	var reduce_opacity_by = 15;
	var rate = 30;	// 15 fps


	if (opacity < 100) {
		opacity += reduce_opacity_by;
		if (opacity > 100) opacity = 100;

		if (element.filters) {
			try {
				element.filters.item("DXImageTransform.Microsoft.Alpha").opacity = opacity;
			} catch (e) {
				// If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
				element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')';
			}
		} else {
			element.style.opacity = opacity / 100;
		}
	}

	if (opacity < 100) {
		setTimeout(function() { FadeIn(element, opacity); }, rate);
	}
}
