String.prototype.toQueryParams = String.prototype.toQueryParams.wrap(function(B, A) {
    return B(A || /[&;]/)
});
Form.Element.Serializers.button = function(A) {
    return [A.name, A.value]
};
Element.addMethods("button", Form.Element.Methods);
Position.getViewPortBounds = function() {
    var D;
    var C;
    var B;
    var A;
    if (UserAgent.OPERA || UserAgent.WEBKIT) {
        D = self.pageXOffset;
        C = self.pageYOffset;
        B = window.innerWidth;
        A = window.innerHeight
    } else {
        if (document.documentElement && document.documentElement.clientHeight) {
            D = document.documentElement.scrollLeft;
            C = document.documentElement.scrollTop;
            B = document.documentElement.clientWidth;
            A = document.documentElement.clientHeight
        } else {
            if (document.body) {
                D = document.body.scrollLeft;
                C = document.body.scrollTop;
                B = document.body.clientWidth;
                A = document.body.clientHeight
            }
        }
    }
    return {
        left: D,
        top: C,
        width: B,
        height: A
    }
};
Class.subclass = function(D, B, A) {
    function C() {}
    C.prototype = B.prototype;
    D.prototype = new C();
    if (A) {
        for (property in A) {
            D.prototype[property] = A[property]
        }
    }
};
var UserAgent = {
    WEBKIT: Prototype.Browser.WebKit,
    OPERA: Prototype.Browser.Opera,
    KHTML: (navigator.userAgent.indexOf("KHTML") != -1),
    GECKO: Prototype.Browser.Gecko,
    MSIE: Prototype.Browser.IE
};
if (UserAgent.MSIE) {
    if (window.XMLHttpRequest) {
        UserAgent.VERSION = 7
    } else {
        UserAgent.VERSION = 6
    }
}
if (UserAgent.Opera) {
    UserAgent.VERSION = navigator.userAgent.match(/Opera.(\d)/)[1]
}
Event.mapMacKeypressKeyCode = function(A) {
    var B;
    switch (A) {
    case 63232:
        B = Event.KEY_UP;
        break;
    case 63233:
        B = Event.KEY_DOWN;
        break;
    case 63276:
        B = Event.KEY_PAGEUP;
        break;
    case 63277:
        B = Event.KEY_PAGEDOWN;
        break;
    case 63273:
        B = Event.KEY_HOME;
        break;
    case 63275:
        B = Event.KEY_END;
        break;
    default:
        B = A
    }
    return B
};
Form.Element.value = function(A) {
    A = $(A);
    var B;
    if (!UserAgent.MSIE) {
        B = A.value
    } else {
        B = A.value.replace(/\r\n/g, "\n")
    }
    return B
};
Form.Element.setSelectionRange = function(C, D, A) {
    C = $(C);
    if (C.setSelectionRange) {
        C.focus();
        C.setSelectionRange(D, A)
    } else {
        if (C.createTextRange) {
            var B = C.createTextRange();
            B.collapse(true);
            B.moveEnd("character", D);
            B.moveStart("character", A);
            B.select()
        }
    }
};
Form.Element.selectionStart = function(A) {
    A = $(A);
    if (A.selectionStart != undefined) {
        return A.selectionStart
    } else {
        if (document.selection && A.createTextRange) {
            var B = document.selection.createRange();
            var C = A.createTextRange();
            var D;
            if (UserAgent.MSIE && UserAgent.VERSION >= 7) {
                D = B.getBookmark().charCodeAt(2) - 3
            } else {
                D = B.getBookmark().charCodeAt(2) - 2
            }
            return D
        } else {
            return A.value.length
        }
    }
};
Form.Element.getCaretPosition = function(A) {
    A = $(A);
    if (A.selectionStart != undefined) {
        return A.selectionStart
    } else {
        if (document.selection && A.createTextRange) {
            var B = document.selection.createRange();
            var C = 0 - B.moveStart("character", -100000);
            return C
        } else {
            return A.value.length
        }
    }
};
Form.Element.selectionEnd = function(A) {
    A = $(A);
    if (A.selectionEnd != undefined) {
        return A.selectionEnd
    } else {
        if (document.selection && A.createTextRange) {
            var B = document.selection.createRange();
            var C = A.createTextRange();
            var D;
            if (UserAgent.MSIE && UserAgent.VERSION >= 7) {
                D = B.getBookmark().charCodeAt(2) - 3
            } else {
                D = B.getBookmark().charCodeAt(2) - 2
            }
            return D + B.text.length
        } else {
            return A.value.length
        }
    }
};
Form.Element.setCaretToStart = function(B) {
    B = $(B);
    if (B.setSelectionRange) {
        B.setSelectionRange(0, 0)
    } else {
        if (B.createTextRange) {
            var A = B.createTextRange();
            A.collapse(true);
            A.select()
        }
    }
};
Form.Element.setCaretToEnd = function(B) {
    B = $(B);
    if (B.setSelectionRange) {
        var C = B.value.length;
        B.setSelectionRange(C, C)
    } else {
        if (B.createTextRange) {
            var A = B.createTextRange();
            A.collapse(false);
            A.select()
        }
    }
};
Form.Element.scrollToEnd = function(A) {
    A = $(A);
    if (A.scrollTop != undefined && A.scrollHeight != undefined) {
        A.scrollTop = A.scrollHeight - A.clientHeight
    }
};
Form.Element.getRangeBounds = function(F, P, C) {
    F = $(F);
    var M = Form.Element.value(F);
    var H = M.substr(0, P);
    var G = M.slice(P, C);
    var O = M.substr(C);
    var I, B, N, Q;
    var A;
    if (F.createTextRange && (A = F.createTextRange()).offsetLeft != undefined) {
        A.moveStart("character", H.length);
        A.moveEnd("character", -O.length);
        I = A.offsetLeft + 2;
        B = A.offsetTop - 2;
        N = A.boundingWidth;
        Q = A.boundingHeight + 4
    }
    if (I == undefined) {
        var K;
        var E;
        var J;
        var D;
        if (!Form.Element.tfs) {
            K = document.createElement("div");
            K.style.position = "absolute";
            K.style.left = "0px";
            K.style.top = "0px";
            K.style.visibility = "hidden";
            K.style.overflow = "auto";
            K.style.border = "solid black	1px";
            K.style.padding = F.style.padding;
            K.style.background = "red";
            document.body.appendChild(K);
            E = document.createElement("span");
            J = document.createElement("span");
            J.style.background = "green";
            D = document.createElement("span");
            K.appendChild(E);
            K.appendChild(J);
            K.appendChild(D);
            Form.Element.tfs = K;
            Form.Element.tfs_prefix = E;
            Form.Element.tfs_range = J;
            Form.Element.tfs_postfix = D
        } else {
            K = Form.Element.tfs;
            E = Form.Element.tfs_prefix;
            J = Form.Element.tfs_range;
            D = Form.Element.tfs_postfix
        }
        K.style.display = "";
        if (G.replace(/\s*/, "") == "") {
            G += "|"
        }
        var L = Element.getDimensions(F);
        K.style.width = (L.width - 4) + "px";
        K.style.height = (L.height - 2) + "px";
        K.style.fontSize = Element.getStyle(F, "font-size");
        K.style.fontFamily = Element.getStyle(F, "font-family");
        K.style.whiteSpace = "pre";
        K.style.textAlign = Element.getStyle(F, "text-align") || "left";
        E.innerHTML = H.replace(/\n/g, "<br/>");
        J.innerHTML = G.replace(/\n/g, "<br/>");
        D.innerHTML = O.replace(/\r\n/g, "<br />");
        K.scrollLeft = F.scrollLeft;
        K.scrollTop = F.scrollTop;
        I = (J.offsetLeft - K.scrollLeft) + 4;
        if (I > L.width) {
            I = L.width - (J.offsetWidth + 4)
        }
        B = J.offsetTop - K.scrollTop;
        N = J.offsetWidth;
        Q = J.offsetHeight + 4;
        K.style.display = "none"
    }
    return {
        left: I,
        top: B,
        width: N,
        height: Q
    }
};
var Overlay = {
    start: function(A) {
        this.options = A || {};
        if (UserAgent.MSIE) {
            var B = document.getElementsByTagName("select");
            for (i = 0; i < B.length; i++) {
                B[i].style.visibility = "hidden"
            }
        }
        if (!this.overlay) {
            this.refreshDisplayEL = this.refreshDisplay.bind(this);
            this.overlay = document.createElement("div");
            this.overlay.id = "overlay-background";
            this.overlay.className = "overlay-background";
            document.body.appendChild(this.overlay)
        }
        Element.setStyle(this.overlay, {
            visibility: "hidden",
            width: "0",
            height: "0",
            display: ""
        });
        this.refreshDisplay();
        Element.setStyle(this.overlay, {
            visibility: ""
        });
        Event.observe(window, "resize", this.refreshDisplayEL);
        Event.observe(window, "scroll", this.refreshDisplayEL)
    },
    stop: function() {
        Event.stopObserving(window, "resize", this.refreshDisplayEL);
        Event.stopObserving(window, "scroll", this.refreshDisplayEL);
        Element.hide(this.overlay);
        if (UserAgent.MSIE) {
            var A = document.getElementsByTagName("select");
            for (i = 0; i < A.length; i++) {
                A[i].style.visibility = ""
            }
        }
    },
    refreshDisplay: function() {
        var A = Position.getViewPortBounds();
        Element.setStyle(this.overlay, {
            width: (A.left + A.width) + "px",
            height: (A.top + A.height) + "px"
        });
        if (this.options.dialog) {
            var C = (A.left + ((A.width - this.options.dialog.offsetWidth) / 2));
            var B = (A.top + ((A.height - this.options.dialog.offsetHeight) / 2));
            if (C < 0) {
                C = 0
            }
            if (B < 0) {
                B = 0
            }
            Element.setStyle(this.options.dialog, {
                left: C + "px",
                top: B + "px"
            })
        }
    }
};
var OverlayWindowConfirm;
function OverlayWindow(I) {
    if (!I.id) {
        if (!cool_confirm.initalized) {
            cool_confirm.initalized = true;
            cool_confirm.okLabel = document.getElementById("overlay-window:ok_label").innerHTML;
            cool_confirm.cancelLabel = document.getElementById("overlay-window:cancel_label").innerHTML
        } else {
            document.getElementById("overlay-window:title").innerHTML = "";
            document.getElementById("overlay-window:text").innerHTML = "";
            document.getElementById("overlay-window:ok_label").innerHTML = cool_confirm.okLabel;
            document.getElementById("overlay-window:cancel_label").innerHTML = cool_confirm.cancelLabel
        }
    }
    var C = I.id || "overlay-window";
    var G = I.element;
    var H = I.op;
    var B = I.href;
    var K = I.callback;
    OverlayWindowConfirm = D;
    var F = document.getElementById(C);
    F.className = I.className || "overlay-window";
    Element.setStyle(F, {
        visibility: "hidden",
        position: "absolute",
        left: "0",
        top: "0",
        display: ""
    });
    if (F.parentNode != document.body) {
        document.body.appendChild(F)
    }
    if (I.icon) {
        var A = document.getElementById(C + ":title");
        if (A) {
            A.style.backgroundImage = "url(" + I.icon + ")"
        }
    }
    for (var E in {
        title: true,
        text: true,
        ok_label: true,
        cancel_label: true
    }) {
        if (I[E]) {
            var A = document.getElementById(C + ":" + E);
            if (A) {
                A.innerHTML = I[E]
            }
        }
    }
    Overlay.start({
        dialog: F
    });
    Element.setStyle(F, {
        visibility: ""
    });
    var J = F.getElementsByTagName("button")[0];
    if (J) {
        J.focus()
    }
    return false;
    function D(N) {
        Element.hide(F);
        Overlay.stop();
        if (N) {
            if (K) {
                K(N)
            } else {
                if (G) {
                    if (G.tagName == "A") {
                        var L;
                        var M = F.getElementsByTagName("form")[0];
                        if (M) {
                            L = Form.serialize(M)
                        } else {
                            L = ""
                        }
                        location.href = G.href + "&" + L
                    } else {
                        if (G.tagName == "BUTTON" || G.tagName == "INPUT") {
                            if (G.type == "submit") {
                                if (H) {
                                    G.form.op.value = H
                                }
                                G.form.submit()
                            } else {
                                if (G.type == "button" && B) {
                                    location.href = B
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}