if(jQuery)(
	function(jQuery){
		jQuery.extend(jQuery.fn,{
			uploadify:function(options) {
				jQuery(this).each(function(){
					settings = jQuery.extend({
					id             : jQuery(this).attr('id'), // The ID of the object being Uploadified
					uploader       : 'Lib/Upload/Scripts/browse.swf', // The path to the uploadify swf file
					script         : 'Lib/Upload/Scripts/do.php', // The path to the uploadify backend upload script
					expressInstall : null, // The path to the express install swf file
					folder         : '', // The path to the upload folder
					height         : 30, // The height of the flash button
					width          : 240, // The width of the flash button
					cancelImg      : 'Images/Icons/cross.png', // The path to the cancel image for the default file queue item container
					wmode          : 'opaque', // The wmode of the flash file
					scriptAccess   : 'sameDomain', // Set to "always" to allow script access across domains
					fileDataName   : 'Filedata', // The name of the file collection object in the backend upload script
					method         : 'HET', // The method for sending variables to the backend upload script
					queueSizeLimit : 999, // The maximum size of the file queue
					queueSize      : ((4*1024)*1000), // The maximum size of the file queue
					simUploadLimit : 1, // The number of simultaneous uploads allowed
                    overAllSize    : 0,
					queueID        : false, // The optional ID of the queue container
					displayData    : 'percentage', // Set to "speed" to show the upload speed in the default queue item
					onInit         : function() {}, // Function to run when uploadify is initialized
					onSelect       : function() {}, // Function to run when a file is selected
					onQueueFull    : function() {}, // Function to run when the queue reaches capacity
					onCheck        : function() {}, // Function to run when script checks for duplicate files on the server
					onCancel       : function() {}, // Function to run when an item is cleared from the queue
					onError        : function() {}, // Function to run when an upload item returns an error
					onProgress     : function() {}, // Function to run each time the upload progress is updated
					onComplete     : function() {}, // Function to run when an upload is completed
					onAllComplete  : function() {}  // Functino to run when all uploads are completed
				}, options);

				var pagePath = location.pathname;
				pagePath = pagePath.split('/');
				pagePath.pop();
				pagePath = pagePath.join('/') + '/';
				var data = {};
				data.uploadifyID = settings.id;
				data.pagepath = pagePath;
				data.buttonImg = escape('Images/browse.png');
				if (settings.buttonText) data.buttonText = escape(settings.buttonText);
				if (settings.rollover) data.rollover = true;
				data.script = settings.script;
				data.folder = escape(settings.folder);
				if (settings.scriptData) {
					var scriptDataString = '';
					for (var name in settings.scriptData) {
						scriptDataString += '&' + name + '=' + settings.scriptData[name];
					}
					data.scriptData = escape(scriptDataString.substr(1));
				}
				data.width          = settings.width;
				data.height         = settings.height;
				data.wmode          = settings.wmode;
				data.method         = settings.method;
				data.queueSizeLimit = settings.queueSizeLimit;
				data.simUploadLimit = settings.simUploadLimit;
				if (settings.hideButton)   data.hideButton   = true;
				if (settings.fileDesc)     data.fileDesc     = settings.fileDesc;
				if (settings.fileExt)      data.fileExt      = settings.fileExt;
				if (settings.multi)        data.multi        = true;
				if (settings.auto)         data.auto         = false;
				if (settings.checkScript)  data.checkScript  = settings.checkScript;
				if (settings.fileDataName) data.fileDataName = settings.fileDataName;
				if (settings.queueID)      data.queueID      = settings.queueID;
				if (settings.onInit() !== false) {
					jQuery(this).css('display','none');
					jQuery(this).after('<div id="' + jQuery(this).attr('id') + 'Uploader"></div>');
					swfobject.embedSWF(settings.uploader, settings.id + 'Uploader', settings.width, settings.height, '9.0.24', settings.expressInstall, data, {'quality':'high','wmode':settings.wmode,'allowScriptAccess':settings.scriptAccess});
					if (settings.queueID == false) {
						jQuery("#" + jQuery(this).attr('id') + "Uploader").after('<div id="' + jQuery(this).attr('id') + 'Queue" class="uploadifyQueue"></div>');
					}
				}
                
				if (typeof(settings.onOpen) == 'function') {
					jQuery(this).bind("uploadifyOpen", settings.onOpen);
				}
                
				jQuery(this).bind("uploadifySelect", {'action': settings.onSelect, 'queueID': settings.queueID}, function(event, ID, fileObj) {
                    settings.overAllSize = Math.round(settings.overAllSize + ((fileObj.size / 1024) * 1000));
                
					if (event.data.action(event, ID, fileObj) !== false) {
						var byteSize = Math.round(fileObj.size / 1024 * 100) * .01;
						var suffix = ' KB';
						if (byteSize > 1000) {
							byteSize = Math.round(byteSize *.001 * 100) * .01;
							suffix = ' MB';
						}
						var sizeParts = byteSize.toString().split('.');
						if (sizeParts.length > 1) {
							byteSize = sizeParts[0] + '.' + sizeParts[1].substr(0,2);
						} else {
							byteSize = sizeParts[0];
						}
						if (fileObj.name.length > 20) {
							fileName = fileObj.name.substr(0,60);
						} else {
							fileName = fileObj.name;
						}
						queue = '#' + jQuery(this).attr('id') + 'Queue';
						if (event.data.queueID) {
							queue = '#' + event.data.queueID;
						}
						jQuery(queue).append('<div id="' + jQuery(this).attr('id') + ID + '" class="uploadifyQueueItem" style="width:230px;margin-bottom:12px;">\
								<div class="cancel">\
									<a href="javascript:jQuery(\'#' + jQuery(this).attr('id') + '\').uploadifyCancel(\'' + ID + '\')"><img src="' + settings.cancelImg + '" border="0" title="Cancel" /></a>\
								</div>\
								<span class="fileName">' + fileName + '<div><b>Size:</b> (' + byteSize + suffix + ') <span class="percentage"></span></div></span>\
								<div class="uploadifyProgress">\
									<div id="' + jQuery(this).attr('id') + ID + 'ProgressBar" class="uploadifyProgressBar" style="height:10px;background-color:#ff9900;"><!--Progress Bar--></div>\
								</div>\
							</div>');
                            
					}
				});
                
                
				if (typeof(settings.onSelectOnce) == 'function') {

                    
					jQuery(this).bind("uploadifySelectOnce", settings.onSelectOnce, function(){
                        if(settings.overAllSize >= settings.queueSize)
                        {
                            $("#messageDiv").slideUp("fast", function(){
                                $("#messageDiv").html('');
                                $.get("TPL/error.php?b=" + settings.overAllSize, function(data){
                                
                                    $("#messageDiv").html(data);
                                    $("#messageDiv").slideDown("fast", function(){
                                    
                                        if(settings.overAllSize <= settings.queueSize)
                                        {
                                            $("#messageDiv").slideUp("fast", function(){
                                                $("#messageDiv").html('');
                                            });
                                        }
                                    
                                    });
                                });
                                
                                var queueId  = $("#queueId").val();
                                var queueAry = queueId.split(";");

                                for(x = 0; x < queueAry.length; x++)
                                {
                                    $("#uploadify" + queueAry[x]).addClass("uploadifyError");
                                }
                            
                            });
                        }
                    });                    
				}
                
                
				jQuery(this).bind("uploadifyQueueFull", {'action': settings.onQueueFull}, function(event, queueSizeLimit) {
					if (event.data.action(event, queueSizeLimit) !== false) {
                        alert("Note: Queue was limited to \"" + settings.queueSizeLimit + "\" files");
					}
				});
                
                
				jQuery(this).bind("uploadifyCheckExist", {'action': settings.onCheck}, function(event, checkScript, fileQueueObj, folder, single) {
					var postData = new Object();
					postData = fileQueueObj;
					postData.folder = pagePath + folder;
					if (single) {
						for (var ID in fileQueueObj) {
							var singleFileID = ID;
						}
					}
					jQuery.post(checkScript, postData, function(data) {
                        for(var key in data) {
                            if (event.data.action(event, checkScript, fileQueueObj, folder, single) !== false) {
                                var replaceFile = confirm("Do you want to replace the file " + data[key] + "?");
                                if (!replaceFile) {
                                    document.getElementById(jQuery(event.target).attr('id') + 'Uploader').cancelFileUpload(key, true,true);
                                }
                            }
                        }
                        if (single) {
                            document.getElementById(jQuery(event.target).attr('id') + 'Uploader').startFileUpload(singleFileID, true);
                        } else {
                            document.getElementById(jQuery(event.target).attr('id') + 'Uploader').startFileUpload(null, true);
                        }
					}, "json");
				});
                
                
				jQuery(this).bind("uploadifyCancel", {'action': settings.onCancel}, function(event, ID, fileObj, data, clearFast) {
                                   
                    if(clearFast == false)
                    {
                        settings.overAllSize = Math.round(settings.overAllSize - ((fileObj.size / 1024) * 1000));
                    }
                    else
                    {
                        settings.overAllSize = 0;
                    }
                    
                    if(settings.overAllSize >= settings.queueSize)
                    {
                        $("#messageDiv").slideUp("fast", function(){
                            $("#messageDiv").html('');
                            $.get("TPL/error.php?b=" + settings.overAllSize, function(data){
                                $("#messageDiv").html(data);
                                $("#messageDiv").slideDown("fast", function(){
                                
                                    if(settings.overAllSize <= settings.queueSize)
                                    {
                                        $("#messageDiv").slideUp("fast", function(){
                                            $("#messageDiv").html('');
                                        });
                                    }
                                
                                });
                            });
                            
                            var queueId  = $("#queueId").val();
                            var queueAry = queueId.split(";");

                            for(x = 0; x < queueAry.length; x++)
                            {
                                $("#uploadify" + queueAry[x]).addClass("uploadifyError");
                            }
                        });
                    }
                    else
                    {
                        $("#messageDiv").slideUp("fast", function(){
                            $("#messageDiv").html('');
                        });
                        
                            
                        var queueId  = $("#queueId").val();
                        var queueAry = queueId.split(";");

                        for(x = 0; x < queueAry.length; x++)
                        {
                            $("#uploadify" + queueAry[x]).removeClass("uploadifyError");
                        }
                    }
                    
					if (event.data.action(event, ID, fileObj, data, clearFast) !== false) {
						var fadeSpeed = (clearFast == true) ? 0 : 250;
						jQuery("#" + jQuery(this).attr('id') + ID).fadeOut(fadeSpeed, function() { jQuery(this).remove() });
					}
                    
				});
                
                
				if (typeof(settings.onClearQueue) == 'function') {
					jQuery(this).bind("uploadifyClearQueue", settings.onClearQueue);
				}
                
                
				var errorArray = [];
				jQuery(this).bind("uploadifyError", {'action': settings.onError}, function(event, ID, fileObj, errorObj) {
					if (event.data.action(event, ID, fileObj, errorObj) !== false) {
						var fileArray = new Array(ID, fileObj, errorObj);
						errorArray.push(fileArray);
						jQuery("#" + jQuery(this).attr('id') + ID + " .percentage").text(" - " + errorObj.type + " Error");
						jQuery("#" + jQuery(this).attr('id') + ID).addClass('uploadifyError');
					}
				});
                
                
				jQuery(this).bind("uploadifyProgress", {'action': settings.onProgress, 'toDisplay': settings.displayData}, function(event, ID, fileObj, data) {
					if (event.data.action(event, ID, fileObj, data) !== false) {
						jQuery("#" + jQuery(this).attr('id') + ID + "ProgressBar").css('width', data.percentage + '%');
						if (event.data.toDisplay == 'percentage') displayData = ' - ' + data.percentage + '%';
						if (event.data.toDisplay == 'speed') displayData = ' - ' + data.speed + 'KB/s';
						if (event.data.toDisplay == null) displayData = ' ';
						jQuery("#" + jQuery(this).attr('id') + ID + " .percentage").text(displayData);
					}
				});
                
                
				jQuery(this).bind("uploadifyComplete", {'action': settings.onComplete}, function(event, ID, fileObj, response, data) {
					if (event.data.action(event, ID, fileObj, unescape(response), data) !== false) {
						jQuery("#" + jQuery(this).attr('id') + ID + " .percentage").text(' - Completed');
						jQuery("#" + jQuery(this).attr('id') + ID).fadeOut(250, function() { jQuery(this).remove()});
                        settings.overAllSize = Math.round(settings.overAllSize - ((fileObj.size / 1024) * 1000));
					}
				});
                
                
				if (typeof(settings.onAllComplete) == 'function') {
					jQuery(this).bind("uploadifyAllComplete", {'action': settings.onAllComplete}, function(event, uploadObj) {
						if (event.data.action(event, uploadObj) !== false) {
							errorArray = [];
						}
					});
				}
			});
		},
        
        
		uploadifySettings:function(settingName, settingValue, resetObject) {
			var returnValue = false;
			jQuery(this).each(function() {
				if (settingName == 'scriptData' && settingValue != null) {
					if (resetObject) {
						var scriptData = settingValue;
					} else {
						var scriptData = jQuery.extend(settings.scriptData, settingValue);
					}
					var scriptDataString = '';
					for (var name in scriptData) {
						scriptDataString += '&' + name + '=' + escape(scriptData[name]);
					}
					settingValue = scriptDataString.substr(1);
				}
				returnValue = document.getElementById(jQuery(this).attr('id') + 'Uploader').updateSettings(settingName, settingValue);
			});
			if (settingValue == null) {
				if (settingName == 'scriptData') {
					var returnSplit = unescape(returnValue).split('&');
					var returnObj   = new Object();
					for (var i = 0; i < returnSplit.length; i++) {
						var iSplit = returnSplit[i].split('=');
						returnObj[iSplit[0]] = iSplit[1];
					}
					returnValue = returnObj;
				}
				return returnValue;
			}
		},
        
		uploadifyUpload:function(ID) {
            
			jQuery(this).each(function() {
            
                queueSize = settings.queueSize;
                
                var obj = jQuery(this).attr('id');
                var pass = $("#AuthPass").val();
                var r = ($("#checkRemember:checked").val() == 'on' ? 1 : 0);

                $("#messageDiv").slideUp("fast", function(){
                    $.get("Lib/checkSize.php?s=" + settings.overAllSize, function(data){
                    
                        var queueId  = $("#queueId").val();
                        var queueAry = queueId.split(";");
                    
                        if(data != 'overall' && data != 'space')
                        {                        
                            for(x = 0; x < queueAry.length; x++)
                            {       
                                $("#uploadify" + queueAry[x]).removeClass("uploadifyError");                            
                                
                                if(x == (queueAry.length)-1)
                                {
                                    document.getElementById(obj + 'Uploader').startFileUpload(ID, false);       
                                }
                            }
                        }
                        else
                        {
                            $.get("TPL/error.php?" + (data == 'space' ? 's' : 'b') + "=" + settings.overAllSize , function(data){
                                $("#messageDiv").html(data);
                                $("#messageDiv").slideDown("fast");

                                for(x = 0; x < queueAry.length; x++)
                                {
                                    $("#uploadify" + queueAry[x]).addClass("uploadifyError");
                                }
                                
                            });
                        }
                    });                
                });                

			});
		},
        
		uploadifyCancel:function(ID) {
			jQuery(this).each(function() {
				document.getElementById(jQuery(this).attr('id') + 'Uploader').cancelFileUpload(ID, true, false);
			});
		},
        
		uploadifyClearQueue:function() {
			jQuery(this).each(function() {
				document.getElementById(jQuery(this).attr('id') + 'Uploader').clearFileUploadQueue(false);
			});
		}
	})
})(jQuery);