function fileQueueError(file, errorCode, message){
    try{
        var errorMessage = "";
        switch(errorCode){
            case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
                errorMessage = "You have attempted to queue too many files. Please try again.";
                break;
            case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
                errorMessage = "The file you're trying to upload is empty. Please try again.";
                break;
            case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
                errorMessage = "The file you're trying to upload is too large. Photos must be 5MB or less in file size. Please try again.";
                break;
            case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
                errorMessage = "The file you're trying to upload is invalid. Photos must be in JPG, GIF or PNG format. Please try again.";
                break;
            default:
                errorMessage = message;
                break;
        }
        alert(errorMessage);
    }
    catch(ex){
        this.debug(ex);
    }
}

function fileDialogComplete(numFilesSelected, numFilesQueued){
    try{
        if(numFilesQueued==1){
            this.startUpload();
        }
    }
    catch(ex){
        this.debug(ex);
    }
}

function uploadProgress(file, bytesLoaded){
    try{
        var percent = Math.ceil((bytesLoaded / file.size) * 100);
        var progress = new FileProgress(file,  this.customSettings.upload_target);
        progress.setProgress(percent);
        if(percent===100){
            progress.setStatus("Creating photo thumbnail...");
            progress.toggleCancel(false, this);
        }
        else{
            progress.setStatus("Uploading...");
            progress.toggleCancel(true, this);
        }
    }
    catch(ex){
        this.debug(ex);
    }
}

var swfUploadError = false;

function uploadSuccess(file, serverData){
    try{
        var progress = new FileProgress(file, this.customSettings.upload_target);
        if(serverData=="error"){
            progress.setStatus("Error uploading photo. Please try again.");
            progress.toggleCancel(false);
            swfUploadError = true;
        }
        else if(serverData != ""){
            // Store photo filename in hidden input
            jQuery("#send_photo_filename").val(serverData);
            // Display photo thumbnail
            jQuery("#uploaded-photo-thumb").html('<img src="/uploads/customer_photos_thumbs/' + serverData + '">');
            jQuery("#uploaded-photo").addClass('expanded');
            jQuery("#send_photo_cropping_notes").get(0).focus();
            
            progress.setStatus("Photo successfully uploaded.");
            progress.toggleCancel(false);
        }
    }
    catch(ex){
        this.debug(ex);
    }
}

function uploadComplete(file){
    try{
        var progress = new FileProgress(file, this.customSettings.upload_target);
        if(!swfUploadError){
            progress.setComplete();
        }
        else{
            progress.setError();
        }
        progress.toggleCancel(false);
        swfUploadError = false;
    }
    catch(ex){
        this.debug(ex);
    }
}

function uploadError(file, errorCode, message){
    var progress;
    try{
        switch(errorCode){
                case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
                try{
                    progress = new FileProgress(file, this.customSettings.upload_target);
                    progress.setCancelled();
                    progress.setStatus("Cancelled");
                    progress.toggleCancel(false);
                }
                catch(ex1){
                    this.debug(ex1);
                }
            break;
            case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
                try{
                    progress = new FileProgress(file, this.customSettings.upload_target);
                    progress.setCancelled();
                    progress.setStatus("Stopped");
                    progress.toggleCancel(true);
                }
                catch(ex2){
                    this.debug(ex2);
                }
                break;
            case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
            default:
                progress = new FileProgress(file, this.customSettings.upload_target);
                progress.setCancelled();
                progress.setStatus("Upload error");
                break;
        }
    }
    catch(ex3){
        this.debug(ex3);
    }
}

function fadeIn(element, opacity){
    var reduceOpacityBy = 5;
    var rate = 30;	// 15 fps
    if(opacity < 100){
        opacity += reduceOpacityBy;
        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);
    }
}

/* ******************************************
 *	FileProgress Object
 *	Control object for displaying file info
 * ****************************************** */

function FileProgress(file, targetID){
	this.fileProgressID = "divFileProgress";

	this.fileProgressWrapper = document.getElementById(this.fileProgressID);
	if (!this.fileProgressWrapper){
		this.fileProgressWrapper = document.createElement("div");
		this.fileProgressWrapper.className = "progressWrapper";
		this.fileProgressWrapper.id = this.fileProgressID;

		this.fileProgressElement = document.createElement("div");
		this.fileProgressElement.className = "progressContainer";
		
		/*
        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(file.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.fileProgressWrapper.appendChild(this.fileProgressElement);

		document.getElementById(targetID).appendChild(this.fileProgressWrapper);
		fadeIn(this.fileProgressWrapper, 0);

	} else {
		this.fileProgressElement = this.fileProgressWrapper.firstChild;
		this.fileProgressElement.childNodes[1].firstChild.nodeValue = file.name;
	}
	
	jQuery("#" + this.fileProgressID).show();

	this.height = this.fileProgressWrapper.offsetHeight;

}
FileProgress.prototype.setProgress = function (percentage){
	this.fileProgressElement.className = "progressContainer green";
	this.fileProgressElement.childNodes[2].className = "progressBarInProgress";
	this.fileProgressElement.childNodes[2].style.width = percentage + "%";
};
FileProgress.prototype.setComplete = function (){
	this.fileProgressElement.className = "progressContainer blue";
	this.fileProgressElement.childNodes[2].className = "progressBarComplete";
	this.fileProgressElement.childNodes[2].style.width = "";

};
FileProgress.prototype.setError = function (){
	this.fileProgressElement.className = "progressContainer red";
	this.fileProgressElement.childNodes[2].className = "progressBarError";
	this.fileProgressElement.childNodes[2].style.width = "";

};
FileProgress.prototype.setCancelled = function (){
	this.fileProgressElement.className = "progressContainer";
	this.fileProgressElement.childNodes[2].className = "progressBarError";
	this.fileProgressElement.childNodes[2].style.width = "";

};
FileProgress.prototype.setStatus = function (status){
	this.fileProgressElement.childNodes[1].innerHTML = status;
};

FileProgress.prototype.toggleCancel = function (show, swfuploadInstance){
    /*
	this.fileProgressElement.childNodes[0].style.visibility = show ? "visible" : "hidden";
	if (swfuploadInstance){
		var fileID = this.fileProgressID;
		this.fileProgressElement.childNodes[0].onclick = function (){
			swfuploadInstance.cancelUpload(fileID);
			return false;
		};
	}
	*/
};