/*
Uploadify v2.1.0
Release Date: August 24, 2009
Copyright (c) 2009 Ronnie Garcia, Travis Nickels
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
if (jQuery)
{
    (function (a)
    {
        a.extend(a.fn, 
        {
            uploadify : function (b)
            {
                a(this).each(function ()
                {
                    settings = a.extend(
                    {
                        id : a(this).attr("id"), uploader : "uploadify.swf", script : "uploadify.php", 
                        expressInstall : null, folder : "", height : 30, width : 110, cancelImg : "cancel.png", 
                        wmode : "opaque", scriptAccess : "sameDomain", fileDataName : "Filedata", method : "POST", 
                        queueSizeLimit : 999, simUploadLimit : 1, queueID : false, displayData : "percentage", 
                        onInit : function () {}, onSelect : function () {}, onQueueFull : function () {},
                        onCheck : function () {}, onCancel : function () {}, onError : function () {},
                        onProgress : function () {}, onComplete : function () {},
                        onAllComplete : function () {}
                    }, b);
                    var e = location.pathname;
                    e = e.split("/");
                    e.pop();
                    e = e.join("/") + "/";
                    var f = {};
                    f.uploadifyID = settings.id;
                    f.pagepath = e;
                    if (settings.buttonImg) {
                        f.buttonImg = escape(settings.buttonImg)
                    }
                    if (settings.buttonText) {
                        f.buttonText = escape(settings.buttonText)
                    }
                    if (settings.rollover) {
                        f.rollover = true
                    }
                    f.script = settings.script;
                    f.folder = escape(settings.folder);
                    if (settings.scriptData)
                    {
                        var g = "";
                        for (var d in settings.scriptData) {
                            g += "&" + d + "=" + settings.scriptData[d]
                        }
                        f.scriptData = escape(g.substr(1))
                    }
                    f.width = settings.width;
                    f.height = settings.height;
                    f.wmode = settings.wmode;
                    f.method = settings.method;
                    f.queueSizeLimit = settings.queueSizeLimit;
                    f.simUploadLimit = settings.simUploadLimit;
                    if (settings.hideButton) {
                        f.hideButton = true
                    }
                    if (settings.fileDesc) {
                        f.fileDesc = settings.fileDesc
                    }
                    if (settings.fileExt) {
                        f.fileExt = settings.fileExt
                    }
                    if (settings.multi) {
                        f.multi = true
                    }
                    if (settings.auto) {
                        f.auto = true
                    }
                    if (settings.sizeLimit) {
                        f.sizeLimit = settings.sizeLimit
                    }
                    if (settings.checkScript) {
                        f.checkScript = settings.checkScript
                    }
                    if (settings.fileDataName) {
                        f.fileDataName = settings.fileDataName
                    }
                    if (settings.queueID) {
                        f.queueID = settings.queueID
                    }
                    if (settings.onInit() !== false)
                    {
                        a(this).css("display", "none");
                        a(this).after('<div id="' + a(this).attr("id") + 'Uploader"></div>');
                        swfobject.embedSWF(settings.uploader, settings.id + "Uploader", settings.width, 
                        settings.height, "9.0.24", settings.expressInstall, f, {
                            quality : "high", wmode : settings.wmode, allowScriptAccess : settings.scriptAccess
                        });
                        if (settings.queueID == false)
                        {
                            a("#" + a(this).attr("id") + "Uploader").after('<div id="' + a(this).attr("id") + 'Queue" class="uploadifyQueue"></div>')
                        }
                    }
                    if (typeof (settings.onOpen) == "function")
                    {
                        a(this).bind("uploadifyOpen", settings.onOpen)
                    }
                    a(this).bind("uploadifySelect", {
                        action : settings.onSelect, queueID : settings.queueID
                    },
                    function (j, h, i)
                    {
                        if (j.data.action(j, h, i) !== false)
                        {
                            var k = Math.round(i.size / 1024 * 100) * 0.01;
                            var l = "KB";
                            if (k > 1000) {
                                k = Math.round(k * 0.001 * 100) * 0.01;
                                l = "MB"
                            }
                            var m = k.toString().split(".");
                            if (m.length > 1) {
                                k = m[0] + "." + m[1].substr(0, 2)
                            }
                            else {
                                k = m[0]
                            }
                            if (i.name.length > 20) {
                                fileName = i.name.substr(0, 20) + "..."
                            }
                            else {
                                fileName = i.name
                            }
                            queue = "#" + a(this).attr("id") + "Queue";
                            if (j.data.queueID) {
                                queue = "#" + j.data.queueID
                            }
                            a(queue).append('<div id="' + a(this).attr("id") + h + '" class="uploadifyQueueItem"><div class="cancel"><a href="javascript:jQuery(\'#' + a(this).attr("id") + "').uploadifyCancel('" + h + '\')"><img src="' + settings.cancelImg + '" border="0" /></a></div><span class="fileName">' + fileName + " (" + k + l + ')</span><span class="percentage"></span><div class="uploadifyProgress"><div id="' + a(this).attr("id") + h + 'ProgressBar" class="uploadifyProgressBar"><!--Progress Bar--></div></div></div>');
                        }
                    });
                    if (typeof (settings.onSelectOnce) == "function")
                    {
                        a(this).bind("uploadifySelectOnce", settings.onSelectOnce)
                    }
                    a(this).bind("uploadifyQueueFull", {
                        action : settings.onQueueFull
                    },
                    function (h, i)
                    {
                        if (h.data.action(h, i) !== false) {
                            alert("The queue is full.  The max size is " + i + ".")
                        }
                    });
                    a(this).bind("uploadifyCheckExist", {
                        action : settings.onCheck
                    },
                    function (m, l, k, j, o)
                    {
                        var i = new Object();
                        i = k;
                        i.folder = e + j;
                        if (o) {
                            for (var h in k) {
                                var n = h;
                            }
                        }
                        a.post(l, i, function (r)
                        {
                            for (var p in r)
                            {
                                if (m.data.action(m, l, k, j, o) !== false)
                                {
                                    var q = confirm("Do you want to replace the file " + r[p] + "?");
                                    if (!q)
                                    {
                                        document.getElementById(a(m.target).attr("id") + "Uploader").cancelFileUpload(p, 
                                        true, true)
                                    }
                                }
                            }
                            if (o)
                            {
                                document.getElementById(a(m.target).attr("id") + "Uploader").startFileUpload(n, 
                                true)
                            }
                            else
                            {
                                document.getElementById(a(m.target).attr("id") + "Uploader").startFileUpload(null, 
                                true)
                            }
                        },
                        "json")
                    });
                    a(this).bind("uploadifyCancel", {
                        action : settings.onCancel
                    },
                    function (l, h, k, m, j)
                    {
                        if (l.data.action(l, h, k, m, j) !== false)
                        {
                            var i = (j == true) ? 0 : 250;
                            a("#" + a(this).attr("id") + h).fadeOut(i, function ()
                            {
                                a(this).remove()
                            })
                        }
                    });
                    if (typeof (settings.onClearQueue) == "function")
                    {
                        a(this).bind("uploadifyClearQueue", settings.onClearQueue)
                    }
                    var c = [];
                    a(this).bind("uploadifyError", {
                        action : settings.onError
                    },
                    function (l, h, k, j)
                    {
                        if (l.data.action(l, h, k, j) !== false)
                        {
                            var i = new Array(h, k, j);
                            c.push(i);
                            a("#" + a(this).attr("id") + h + " .percentage").text(" - " + j.type + " Error");
                            a("#" + a(this).attr("id") + h).addClass("uploadifyError")
                        }
                    });
                    a(this).bind("uploadifyProgress", {
                        action : settings.onProgress, toDisplay : settings.displayData
                    },
                    function (j, h, i, k)
                    {
                        if (j.data.action(j, h, i, k) !== false)
                        {
                            a("#" + a(this).attr("id") + h + "ProgressBar").css("width", k.percentage + "%");
                            if (j.data.toDisplay == "percentage") {
                                displayData = " - " + k.percentage + "%"
                            }
                            if (j.data.toDisplay == "speed") {
                                displayData = " - " + k.speed + "KB/s"
                            }
                            if (j.data.toDisplay == null) {
                                displayData = " "
                            }
                            a("#" + a(this).attr("id") + h + " .percentage").text(displayData);
                        }
                    });
                    a(this).bind("uploadifyComplete", {
                        action : settings.onComplete
                    },
                    function (k, h, j, i, l)
                    {
                        if (k.data.action(k, h, j, unescape(i), l) !== false)
                        {
                            a("#" + a(this).attr("id") + h + " .percentage").text(" - Completed");
                            a("#" + a(this).attr("id") + h).fadeOut(250, function ()
                            {
                                a(this).remove()
                            })
                        }
                    });
                    if (typeof (settings.onAllComplete) == "function")
                    {
                        a(this).bind("uploadifyAllComplete", {
                            action : settings.onAllComplete
                        },
                        function (h, i)
                        {
                            if (h.data.action(h, i) !== false) {
                                c = [];
                            }
                        })
                    }
                })
            },
            uploadifySettings : function (f, j, c)
            {
                var g = false;
                a(this).each(function ()
                {
                    if (f == "scriptData" && j != null)
                    {
                        if (c) {
                            var i = j
                        }
                        else {
                            var i = a.extend(settings.scriptData, j)
                        }
                        var l = "";
                        for (var k in i) {
                            l += "&" + k + "=" + escape(i[k])
                        }
                        j = l.substr(1)
                    }
                    g = document.getElementById(a(this).attr("id") + "Uploader").updateSettings(f, j);
                });
                if (j == null)
                {
                    if (f == "scriptData")
                    {
                        var b = unescape(g).split("&");
                        var e = new Object();
                        for (var d = 0; d < b.length; d++) {
                            var h = b[d].split("=");
                            e[h[0]] = h[1]
                        }
                        g = e
                    }
                    return g;
                }
            },
            uploadifyUpload : function (b)
            {
                a(this).each(function ()
                {
                    document.getElementById(a(this).attr("id") + "Uploader").startFileUpload(b, false)
                })
            },
            uploadifyCancel : function (b)
            {
                a(this).each(function ()
                {
                    document.getElementById(a(this).attr("id") + "Uploader").cancelFileUpload(b, true, 
                    false)
                })
            },
            uploadifyClearQueue : function ()
            {
                a(this).each(function ()
                {
                    document.getElementById(a(this).attr("id") + "Uploader").clearFileUploadQueue(false)
                })
            }
        })
    })(jQuery)
};
