/**
 * Interface Elements for jQuery
 * 
 * http://interface.eyecon.ro
 * 
 * Copyright (c) 2006 Stefan Petre
 * Dual licensed under the MIT (MIT-LICENSE.txt) 
 * and GPL (GPL-LICENSE.txt) licenses.
 *   
 *
 */
jQuery.iAccordion = {
    build: function (options) {
        return this.each(function () {
            if (!options.headerSelector || !options.panelSelector) {
                return;
            }
            var el = this;
            el.accordionCfg = {
                panelHeight: options.panelHeight || 300,
                headerSelector: options.headerSelector,
                panelSelector: options.panelSelector,
                activeClass: options.activeClass || "fakeAccordionClass",
                hoverClass: options.hoverClass || "fakeAccordionClass",
                onShow: options.onShow && typeof options.onShow == "function" ? options.onShow : false,
                onHide: options.onShow && typeof options.onHide == "function" ? options.onHide : false,
                onClick: options.onClick && typeof options.onClick == "function" ? options.onClick : false,
                headers: jQuery(options.headerSelector, this),
                panels: jQuery(options.panelSelector, this),
                speed: options.speed || 400,
                currentPanel: options.currentPanel || 0
            };
            el.accordionCfg.panels.hide().css("height", "1px").eq(0).css({
                height: el.accordionCfg.panelHeight + "px",
                display: "block"
            }).end();
            el.accordionCfg.headers.each(function (nr) {
                this.accordionPos = nr;
            }).hover(function () {
                jQuery(this).addClass(el.accordionCfg.hoverClass);
            }, function () {
                jQuery(this).removeClass(el.accordionCfg.hoverClass);
            }).bind("click", function (e) {
                if (el.accordionCfg.currentPanel == this.accordionPos) {
                    return;
                }
                el.accordionCfg.headers.eq(el.accordionCfg.currentPanel).removeClass(el.accordionCfg.activeClass).end().eq(this.accordionPos).addClass(el.accordionCfg.activeClass).end();
                el.accordionCfg.panels.eq(el.accordionCfg.currentPanel).animate({
                    height: 0
                }, el.accordionCfg.speed, function () {
                    this.style.display = "none";
                    if (el.accordionCfg.onHide) {
                        el.accordionCfg.onHide.apply(el, [this]);
                    }
                }).end().eq(this.accordionPos).show().animate({
                    height: el.accordionCfg.panelHeight
                }, el.accordionCfg.speed, function () {
                    this.style.display = "block";
                    if (el.accordionCfg.onShow) {
                        el.accordionCfg.onShow.apply(el, [this]);
                    }
                }).end();
                if (el.accordionCfg.onClick) {
                    el.accordionCfg.onClick.apply(el, [this, el.accordionCfg.panels.get(this.accordionPos), el.accordionCfg.headers.get(el.accordionCfg.currentPanel), el.accordionCfg.panels.get(el.accordionCfg.currentPanel)]);
                }
                el.accordionCfg.currentPanel = this.accordionPos;
            }).eq(0).addClass(el.accordionCfg.activeClass).end();
            jQuery(this).css("height", jQuery(this).css("height")).css("overflow", "hidden");
        });
    }
};
jQuery.fn.Accordion = jQuery.iAccordion.build;
jQuery.iCarousel = {
    build: function (options) {
        return this.each(function () {
            var el = this;
            var increment = 2 * Math.PI / 360;
            var maxRotation = 2 * Math.PI;
            if (jQuery(el).css("position") != "relative" && jQuery(el).css("position") != "absolute") {
                jQuery(el).css("position", "relative");
            }
            el.carouselCfg = {
                items: jQuery(options.items, this),
                itemWidth: options.itemWidth,
                itemHeight: options.itemHeight,
                itemMinWidth: options.itemMinWidth,
                maxRotation: maxRotation,
                size: jQuery.iUtil.getSize(this),
                position: jQuery.iUtil.getPosition(this),
                start: Math.PI / 2,
                rotationSpeed: options.rotationSpeed,
                reflectionSize: options.reflections,
                reflections: [],
                protectRotation: false,
                increment: 2 * Math.PI / 360
            };
            el.carouselCfg.radiusX = (el.carouselCfg.size.w - el.carouselCfg.itemWidth) / 2;
            el.carouselCfg.radiusY = (el.carouselCfg.size.h - el.carouselCfg.itemHeight - el.carouselCfg.itemHeight * el.carouselCfg.reflectionSize) / 2;
            el.carouselCfg.step = 2 * Math.PI / el.carouselCfg.items.size();
            el.carouselCfg.paddingX = el.carouselCfg.size.w / 2;
            el.carouselCfg.paddingY = el.carouselCfg.size.h / 2 - el.carouselCfg.itemHeight * el.carouselCfg.reflectionSize;
            var reflexions = document.createElement("div");
            jQuery(reflexions).css({
                position: "absolute",
                zIndex: 1,
                top: 0,
                left: 0
            });
            jQuery(el).append(reflexions);
            el.carouselCfg.items.each(function (nr) {
                image = jQuery("img", this).get(0);
                height = parseInt(el.carouselCfg.itemHeight * el.carouselCfg.reflectionSize);
                if (jQuery.browser.msie) {
                    canvas = document.createElement("img");
                    jQuery(canvas).css("position", "absolute");
                    canvas.src = image.src;
                    canvas.style.filter = "flipv progid:DXImageTransform.Microsoft.Alpha(opacity=60, style=1, finishOpacity=0, startx=0, starty=0, finishx=0)";
                } else {
                    canvas = document.createElement("canvas");
                    if (canvas.getContext) {
                        context = canvas.getContext("2d");
                        canvas.style.position = "absolute";
                        canvas.style.height = height + "px";
                        canvas.style.width = el.carouselCfg.itemWidth + "px";
                        canvas.height = height;
                        canvas.width = el.carouselCfg.itemWidth;
                        context.save();
                        context.translate(0, height);
                        context.scale(1, -1);
                        context.drawImage(image, 0, 0, el.carouselCfg.itemWidth, height);
                        context.restore();
                        context.globalCompositeOperation = "destination-out";
                        var gradient = context.createLinearGradient(0, 0, 0, height);
                        gradient.addColorStop(1, "rgba(255, 255, 255, 1)");
                        gradient.addColorStop(0, "rgba(255, 255, 255, 0.6)");
                        context.fillStyle = gradient;
                        if (navigator.appVersion.indexOf("WebKit") != -1) {
                            context.fill();
                        } else {
                            context.fillRect(0, 0, el.carouselCfg.itemWidth, height);
                        }
                    }
                }
                el.carouselCfg.reflections[nr] = canvas;
                jQuery(reflexions).append(canvas);
            }).bind("mouseover", function (e) {
                el.carouselCfg.protectRotation = true;
                el.carouselCfg.speed = el.carouselCfg.increment * 0.1 * el.carouselCfg.speed / Math.abs(el.carouselCfg.speed);
                return false;
            }).bind("mouseout", function (e) {
                el.carouselCfg.protectRotation = false;
                return false;
            });
            jQuery.iCarousel.positionItems(el);
            el.carouselCfg.speed = el.carouselCfg.increment * 0.2;
            el.carouselCfg.rotationTimer = window.setInterval(function () {
                el.carouselCfg.start += el.carouselCfg.speed;
                if (el.carouselCfg.start > maxRotation) {
                    el.carouselCfg.start = 0;
                }
                jQuery.iCarousel.positionItems(el);
            }, 20);
            jQuery(el).bind("mouseout", function () {
                el.carouselCfg.speed = el.carouselCfg.increment * 0.2 * el.carouselCfg.speed / Math.abs(el.carouselCfg.speed);
            }).bind("mousemove", function (e) {
                if (el.carouselCfg.protectRotation == false) {
                    pointer = jQuery.iUtil.getPointer(e);
                    mousex = el.carouselCfg.size.w - pointer.x + el.carouselCfg.position.x;
                    el.carouselCfg.speed = el.carouselCfg.rotationSpeed * el.carouselCfg.increment * (el.carouselCfg.size.w / 2 - mousex) / (el.carouselCfg.size.w / 2);
                }
            });
        });
    },
    positionItems: function (el) {
        el.carouselCfg.items.each(function (nr) {
            angle = el.carouselCfg.start + nr * el.carouselCfg.step;
            x = el.carouselCfg.radiusX * Math.cos(angle);
            y = el.carouselCfg.radiusY * Math.sin(angle);
            itemZIndex = parseInt(100 * (el.carouselCfg.radiusY + y) / (2 * el.carouselCfg.radiusY));
            parte = (el.carouselCfg.radiusY + y) / (2 * el.carouselCfg.radiusY);
            width = parseInt((el.carouselCfg.itemWidth - el.carouselCfg.itemMinWidth) * parte + el.carouselCfg.itemMinWidth);
            height = parseInt(width * el.carouselCfg.itemHeight / el.carouselCfg.itemWidth);
            this.style.top = el.carouselCfg.paddingY + y - height / 2 + "px";
            this.style.left = el.carouselCfg.paddingX + x - width / 2 + "px";
            this.style.width = width + "px";
            this.style.height = height + "px";
            this.style.zIndex = itemZIndex;
            el.carouselCfg.reflections[nr].style.top = parseInt(el.carouselCfg.paddingY + y + height - 1 - height / 2) + "px";
            el.carouselCfg.reflections[nr].style.left = parseInt(el.carouselCfg.paddingX + x - width / 2) + "px";
            el.carouselCfg.reflections[nr].style.width = width + "px";
            el.carouselCfg.reflections[nr].style.height = parseInt(height * el.carouselCfg.reflectionSize) + "px";
        });
    }
};
jQuery.fn.Carousel = jQuery.iCarousel.build;
jQuery.extend({
    easing: {
        linear: function (p, n, firstNum, delta, duration) {
            return (-Math.cos(p * Math.PI) / 2 + 0.5) * delta + firstNum;
        },
        easein: function (p, n, firstNum, delta, duration) {
            return delta * (n /= duration) * n * n + firstNum;
        },
        easeout: function (p, n, firstNum, delta, duration) {
            return -delta * ((n = n / duration - 1) * n * n * n - 1) + firstNum;
        },
        easeboth: function (p, n, firstNum, delta, duration) {
            if ((n /= duration / 2) < 1) {
                return delta / 2 * n * n * n * n + firstNum;
            }
            return -delta / 2 * ((n -= 2) * n * n * n - 2) + firstNum;
        },
        bounceout: function (p, n, firstNum, delta, duration) {
            if ((n /= duration) < 0.36363636363636365) {
                return delta * (7.5625 * n * n) + firstNum;
            } else if (n < 0.7272727272727273) {
                return delta * (7.5625 * (n -= 0.5454545454545454) * n + 0.75) + firstNum;
            } else if (n < 0.9090909090909091) {
                return delta * (7.5625 * (n -= 0.8181818181818182) * n + 0.9375) + firstNum;
            } else {
                return delta * (7.5625 * (n -= 0.9545454545454546) * n + 0.984375) + firstNum;
            }
        },
        bouncein: function (p, n, firstNum, delta, duration) {
            if (jQuery.easing.bounceout) {
                return delta - jQuery.easing.bounceout(p, duration - n, 0, delta, duration) + firstNum;
            }
            return firstNum + delta;
        },
        bounceboth: function (p, n, firstNum, delta, duration) {
            if (jQuery.easing.bouncein && jQuery.easing.bounceout) {
                if (n < duration / 2) {
                    return jQuery.easing.bouncein(p, n * 2, 0, delta, duration) * 0.5 + firstNum;
                }
            }
            return jQuery.easing.bounceout(p, n * 2 - duration, 0, delta, duration) * 0.5 + delta * 0.5 + firstNum;
            return firstNum + delta;
        },
        elasticin: function (p, n, firstNum, delta, duration) {
            var a, s;
            if (n == 0) {
                return firstNum;
            }
            if ((n /= duration) == 1) {
                return firstNum + delta;
            }
            a = delta * 0.3;
            p = duration * 0.3;
            if (a < Math.abs(delta)) {
                a = delta;
                s = p / 4;
            } else {
                s = p / (2 * Math.PI) * Math.asin(delta / a);
            }
            return -(a * Math.pow(2, 10 * (n -= 1)) * Math.sin((n * duration - s) * (2 * Math.PI) / p)) + firstNum;
        },
        elasticout: function (p, n, firstNum, delta, duration) {
            var a, s;
            if (n == 0) {
                return firstNum;
            }
            if ((n /= duration / 2) == 2) {
                return firstNum + delta;
            }
            a = delta * 0.3;
            p = duration * 0.3;
            if (a < Math.abs(delta)) {
                a = delta;
                s = p / 4;
            } else {
                s = p / (2 * Math.PI) * Math.asin(delta / a);
            }
            return a * Math.pow(2, -10 * n) * Math.sin((n * duration - s) * (2 * Math.PI) / p) + delta + firstNum;
        },
        elasticboth: function (p, n, firstNum, delta, duration) {
            var a, s;
            if (n == 0) {
                return firstNum;
            }
            if ((n /= duration / 2) == 2) {
                return firstNum + delta;
            }
            a = delta * 0.3;
            p = duration * 0.3;
            if (a < Math.abs(delta)) {
                a = delta;
                s = p / 4;
            } else {
                s = p / (2 * Math.PI) * Math.asin(delta / a);
            }
            if (n < 1) {
                return -0.5 * (a * Math.pow(2, 10 * (n -= 1)) * Math.sin((n * duration - s) * (2 * Math.PI) / p)) + firstNum;
            }
            return a * Math.pow(2, -10 * (n -= 1)) * Math.sin((n * duration - s) * (2 * Math.PI) / p) * 0.5 + delta + firstNum;
        }
    }
});
jQuery.iFisheye = {
    build: function (options) {
        return this.each(function () {
            var el = this;
            el.fisheyeCfg = {
                items: jQuery(options.items, this),
                container: jQuery(options.container, this),
                pos: jQuery.iUtil.getPosition(this),
                itemWidth: options.itemWidth,
                itemsText: options.itemsText,
                proximity: options.proximity,
                valign: options.valign,
                halign: options.halign,
                maxWidth: options.maxWidth
            };
            jQuery.iFisheye.positionContainer(el, 0);
            jQuery(window).bind("resize", function () {
                el.fisheyeCfg.pos = jQuery.iUtil.getPosition(el);
                jQuery.iFisheye.positionContainer(el, 0);
                jQuery.iFisheye.positionItems(el);
            });
            jQuery.iFisheye.positionItems(el);
            el.fisheyeCfg.items.bind("mouseover", function () {
                jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = "block";
            }).bind("mouseout", function () {
                jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = "none";
            });
            jQuery(document).bind("mousemove", function (e) {
                var pointer = jQuery.iUtil.getPointer(e);
                var toAdd = 0;
                if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == "center") {
                    var posx = pointer.x - el.fisheyeCfg.pos.x - (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) / 2 - el.fisheyeCfg.itemWidth / 2;
                } else if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == "right") {
                    var posx = pointer.x - el.fisheyeCfg.pos.x - el.offsetWidth + el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size();
                } else {
                    var posx = pointer.x - el.fisheyeCfg.pos.x;
                }
                var posy = Math.pow(pointer.y - el.fisheyeCfg.pos.y - el.offsetHeight / 2, 2);
                el.fisheyeCfg.items.each(function (nr) {
                    distance = Math.sqrt(Math.pow(posx - nr * el.fisheyeCfg.itemWidth, 2) + posy);
                    distance -= el.fisheyeCfg.itemWidth / 2;
                    distance = distance < 0 ? 0 : distance;
                    distance = distance > el.fisheyeCfg.proximity ? el.fisheyeCfg.proximity : distance;
                    distance = el.fisheyeCfg.proximity - distance;
                    extraWidth = el.fisheyeCfg.maxWidth * distance / el.fisheyeCfg.proximity;
                    this.style.width = el.fisheyeCfg.itemWidth + extraWidth + ("px");
                    this.style.left = el.fisheyeCfg.itemWidth * nr + toAdd + ("px");
                    toAdd += extraWidth;
                });
                jQuery.iFisheye.positionContainer(el, toAdd);
            });
        });
    },
    positionContainer: function (el, toAdd) {
        if (el.fisheyeCfg.halign) {
            if (el.fisheyeCfg.halign == "center") {
                el.fisheyeCfg.container.get(0).style.left = (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) / 2 - toAdd / 2 + "px";
            } else if (el.fisheyeCfg.halign == "left") {
                el.fisheyeCfg.container.get(0).style.left = -toAdd / el.fisheyeCfg.items.size() + "px";
            } else if (el.fisheyeCfg.halign == "right") {
                el.fisheyeCfg.container.get(0).style.left = el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size() - toAdd / 2 + "px";
            }
        }
        el.fisheyeCfg.container.get(0).style.width = el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size() + toAdd + ("px");
    },
    positionItems: function (el) {
        el.fisheyeCfg.items.each(function (nr) {
            this.style.width = el.fisheyeCfg.itemWidth + "px";
            this.style.left = el.fisheyeCfg.itemWidth * nr + "px";
        });
    }
};
jQuery.fn.Fisheye = jQuery.iFisheye.build;
jQuery.iAuto = {
    helper: null,
    content: null,
    iframe: null,
    timer: null,
    lastValue: null,
    currentValue: null,
    subject: null,
    selectedItem: null,
    items: null,
    empty: function () {
        jQuery.iAuto.content.empty();
        if (jQuery.iAuto.iframe) {
            jQuery.iAuto.iframe.hide();
        }
    },
    clear: function () {
        jQuery.iAuto.items = null;
        jQuery.iAuto.selectedItem = null;
        jQuery.iAuto.lastValue = jQuery.iAuto.subject.value;
        if (jQuery.iAuto.helper.css("display") == "block") {
            if (jQuery.iAuto.subject.autoCFG.fx) {
                switch (jQuery.iAuto.subject.autoCFG.fx.type) {
                case "fade":
                    jQuery.iAuto.helper.fadeOut(jQuery.iAuto.subject.autoCFG.fx.duration, jQuery.iAuto.empty);
                    break;
                case "slide":
                    jQuery.iAuto.helper.SlideOutUp(jQuery.iAuto.subject.autoCFG.fx.duration, jQuery.iAuto.empty);
                    break;
                case "blind":
                    jQuery.iAuto.helper.BlindUp(jQuery.iAuto.subject.autoCFG.fx.duration, jQuery.iAuto.empty);
                    break;
                default:
                    ;
                }
            } else {
                jQuery.iAuto.helper.hide();
            }
            if (jQuery.iAuto.subject.autoCFG.onHide) {
                jQuery.iAuto.subject.autoCFG.onHide.apply(jQuery.iAuto.subject, [jQuery.iAuto.helper, jQuery.iAuto.iframe]);
            }
        } else {
            jQuery.iAuto.empty();
        }
        window.clearTimeout(jQuery.iAuto.timer);
    },
    update: function () {
        var subject = jQuery.iAuto.subject;
        var subjectValue = jQuery.iAuto.getFieldValues(subject);
        if (subject && subjectValue.item != jQuery.iAuto.lastValue && subjectValue.item.length >= subject.autoCFG.minchars) {
            jQuery.iAuto.lastValue = subjectValue.item;
            jQuery.iAuto.currentValue = subjectValue.item;
            data = {
                field: jQuery(subject).attr("name") || "field",
                value: subjectValue.item
            };
            jQuery.ajax({
                type: "POST",
                data: jQuery.param(data),
                success: function (xml) {
                    subject.autoCFG.lastSuggestion = jQuery("item", xml);
                    size = subject.autoCFG.lastSuggestion.size();
                    if (size > 0) {
                        var toWrite = "";
                        subject.autoCFG.lastSuggestion.each(function (nr) {
                            toWrite += "<li rel=\"" + jQuery("value", this).text() + "\" dir=\"" + nr + "\" style=\"cursor: default;\">" + jQuery("text", this).text() + "</li>";
                        });
                        if (subject.autoCFG.autofill) {
                            var valueToAdd = jQuery("value", subject.autoCFG.lastSuggestion.get(0)).text();
                            subject.value = subjectValue.pre + valueToAdd + subject.autoCFG.multipleSeparator + subjectValue.post;
                            jQuery.iAuto.selection(subject, subjectValue.item.length != valueToAdd.length ? subjectValue.pre.length + subjectValue.item.length : valueToAdd.length, subjectValue.item.length != valueToAdd.length ? subjectValue.pre.length + valueToAdd.length : valueToAdd.length);
                        }
                        if (size > 0) {
                            jQuery.iAuto.writeItems(subject, toWrite);
                        } else {
                            jQuery.iAuto.clear();
                        }
                    } else {
                        jQuery.iAuto.clear();
                    }
                },
                url: subject.autoCFG.source
            });
        }
    },
    writeItems: function (subject, toWrite) {
        jQuery.iAuto.content.html(toWrite);
        jQuery.iAuto.items = jQuery("li", jQuery.iAuto.content.get(0));
        jQuery.iAuto.items.mouseover(jQuery.iAuto.hoverItem).bind("click", jQuery.iAuto.clickItem);
        var position = jQuery.iUtil.getPosition(subject);
        var size = jQuery.iUtil.getSize(subject);
        jQuery.iAuto.helper.css("top", position.y + size.hb + ("px")).css("left", position.x + "px").addClass(subject.autoCFG.helperClass);
        if (jQuery.iAuto.iframe) {
            jQuery.iAuto.iframe.css("display", "block").css("top", position.y + size.hb + ("px")).css("left", position.x + "px").css("width", jQuery.iAuto.helper.css("width")).css("height", jQuery.iAuto.helper.css("height"));
        }
        jQuery.iAuto.selectedItem = 0;
        jQuery.iAuto.items.get(0).className = subject.autoCFG.selectClass;
        jQuery.iAuto.applyOn(subject, subject.autoCFG.lastSuggestion.get(0), "onHighlight");
        if (jQuery.iAuto.helper.css("display") == "none") {
            if (subject.autoCFG.inputWidth) {
                var borders = jQuery.iUtil.getPadding(subject, true);
                var paddings = jQuery.iUtil.getBorder(subject, true);
                jQuery.iAuto.helper.css("width", subject.offsetWidth - (jQuery.boxModel ? borders.l + borders.r + paddings.l + paddings.r : 0) + "px");
            }
            if (subject.autoCFG.fx) {
                switch (subject.autoCFG.fx.type) {
                case "fade":
                    jQuery.iAuto.helper.fadeIn(subject.autoCFG.fx.duration);
                    break;
                case "slide":
                    jQuery.iAuto.helper.SlideInUp(subject.autoCFG.fx.duration);
                    break;
                case "blind":
                    jQuery.iAuto.helper.BlindDown(subject.autoCFG.fx.duration);
                    break;
                default:
                    ;
                }
            } else {
                jQuery.iAuto.helper.show();
            }
            if (jQuery.iAuto.subject.autoCFG.onShow) {
                jQuery.iAuto.subject.autoCFG.onShow.apply(jQuery.iAuto.subject, [jQuery.iAuto.helper, jQuery.iAuto.iframe]);
            }
        }
    },
    checkCache: function () {
        var subject = this;
        if (subject.autoCFG.lastSuggestion) {
            jQuery.iAuto.lastValue = subject.value;
            jQuery.iAuto.currentValue = subject.value;
            var toWrite = "";
            subject.autoCFG.lastSuggestion.each(function (nr) {
                value = jQuery("value", this).text().toLowerCase();
                inputValue = subject.value.toLowerCase();
                if (value.indexOf(inputValue) == 0) {
                    toWrite += "<li rel=\"" + jQuery("value", this).text() + "\" dir=\"" + nr + "\" style=\"cursor: default;\">" + jQuery("text", this).text() + "</li>";
                }
            });
            if (toWrite != "") {
                jQuery.iAuto.writeItems(subject, toWrite);
                this.autoCFG.inCache = true;
                return;
            }
        }
        subject.autoCFG.lastSuggestion = null;
        this.autoCFG.inCache = false;
    },
    selection: function (field, start, end) {
        if (field.createTextRange) {
            var selRange = field.createTextRange();
            selRange.collapse(true);
            selRange.moveStart("character", start);
            selRange.moveEnd("character", -end + start);
            selRange.select();
        } else if (field.setSelectionRange) {
            field.setSelectionRange(start, end);
        } else {
            if (field.selectionStart) {
                field.selectionStart = start;
                field.selectionEnd = end;
            }
        }
        field.focus();
    },
    getSelectionStart: function (field) {
        if (field.selectionStart) {
            return field.selectionStart;
        } else if (field.createTextRange) {
            var selRange = document.selection.createRange();
            var selRange2 = selRange.duplicate();
            return 0 - selRange2.moveStart("character", -100000);
        }
    },
    getFieldValues: function (field) {
        var fieldData = {
            value: field.value,
            pre: "",
            post: "",
            item: ""
        };
        if (field.autoCFG.multiple) {
            var finishedPre = false;
            var selectionStart = jQuery.iAuto.getSelectionStart(field) || 0;
            var chunks = fieldData.value.split(field.autoCFG.multipleSeparator);
            for (var i = 0; i < chunks.length; i++) {
                if ((fieldData.pre.length + chunks[i].length >= selectionStart || selectionStart == 0) && !finishedPre) {
                    if (fieldData.pre.length <= selectionStart) {
                        fieldData.item = chunks[i];
                    } else {
                        fieldData.post += chunks[i] + (chunks[i] != "" ? field.autoCFG.multipleSeparator : "");
                    }
                    finishedPre = true;
                } else if (finishedPre) {
                    fieldData.post += chunks[i] + (chunks[i] != "" ? field.autoCFG.multipleSeparator : "");
                }
                if (!finishedPre) {
                    fieldData.pre += chunks[i] + (chunks.length > 1 ? field.autoCFG.multipleSeparator : "");
                }
            }
        } else {
            fieldData.item = fieldData.value;
        }
        return fieldData;
    },
    autocomplete: function (e) {
        window.clearTimeout(jQuery.iAuto.timer);
        var subject = jQuery.iAuto.getFieldValues(this);
        var pressedKey = e.charCode || e.keyCode || -1;
        if (/13|27|35|36|38|40|9/.test(pressedKey) && jQuery.iAuto.items) {
            if (window.event) {
                window.event.cancelBubble = true;
                window.event.returnValue = false;
            } else {
                e.preventDefault();
                e.stopPropagation();
            }
            if (jQuery.iAuto.selectedItem != null) {
                jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0).className = "";
            } else {
                jQuery.iAuto.selectedItem = -1;
            }
            switch (pressedKey) {
            case 9:
            case 13:
                if (jQuery.iAuto.selectedItem == -1) {
                    jQuery.iAuto.selectedItem = 0;
                }
                var selectedItem = jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0);
                var valueToAdd = selectedItem.getAttribute("rel");
                this.value = subject.pre + valueToAdd + this.autoCFG.multipleSeparator + subject.post;
                jQuery.iAuto.lastValue = subject.item;
                jQuery.iAuto.selection(this, subject.pre.length + valueToAdd.length + this.autoCFG.multipleSeparator.length, subject.pre.length + valueToAdd.length + this.autoCFG.multipleSeparator.length);
                jQuery.iAuto.clear();
                if (this.autoCFG.onSelect) {
                    iteration = parseInt(selectedItem.getAttribute("dir")) || 0;
                    jQuery.iAuto.applyOn(this, this.autoCFG.lastSuggestion.get(iteration), "onSelect");
                }
                if (this.scrollIntoView) {
                    this.scrollIntoView(false);
                }
                return pressedKey != 13;
                break;
            case 27:
                this.value = subject.pre + jQuery.iAuto.lastValue + this.autoCFG.multipleSeparator + subject.post;
                this.autoCFG.lastSuggestion = null;
                jQuery.iAuto.clear();
                if (this.scrollIntoView) {
                    this.scrollIntoView(false);
                }
                return false;
                break;
            case 35:
                jQuery.iAuto.selectedItem = jQuery.iAuto.items.size() - 1;
                break;
            case 36:
                jQuery.iAuto.selectedItem = 0;
                break;
            case 38:
                jQuery.iAuto.selectedItem--;
                if (jQuery.iAuto.selectedItem < 0) {
                    jQuery.iAuto.selectedItem = jQuery.iAuto.items.size() - 1;
                }
                break;
            case 40:
                jQuery.iAuto.selectedItem++;
                if (jQuery.iAuto.selectedItem == jQuery.iAuto.items.size()) {
                    jQuery.iAuto.selectedItem = 0;
                }
                break;
            default:
                ;
            }
            jQuery.iAuto.applyOn(this, this.autoCFG.lastSuggestion.get(jQuery.iAuto.selectedItem || 0), "onHighlight");
            jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0).className = this.autoCFG.selectClass;
            if (jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0).scrollIntoView) {
                jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0).scrollIntoView(false);
            }
            if (this.autoCFG.autofill) {
                var valToAdd = jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0).getAttribute("rel");
                this.value = subject.pre + valToAdd + this.autoCFG.multipleSeparator + subject.post;
                if (jQuery.iAuto.lastValue.length != valToAdd.length) {
                    jQuery.iAuto.selection(this, subject.pre.length + jQuery.iAuto.lastValue.length, subject.pre.length + valToAdd.length);
                }
            }
            return false;
        }
        jQuery.iAuto.checkCache.apply(this);
        if (this.autoCFG.inCache == false) {
            if (subject.item != jQuery.iAuto.lastValue && subject.item.length >= this.autoCFG.minchars) {
                jQuery.iAuto.timer = window.setTimeout(jQuery.iAuto.update, this.autoCFG.delay);
            }
            if (jQuery.iAuto.items) {
                jQuery.iAuto.clear();
            }
        }
        return true;
    },
    applyOn: function (field, item, type) {
        if (field.autoCFG[type]) {
            var data = {};
            childs = item.getElementsByTagName("*");
            for (i = 0; i < childs.length; i++) {
                data[childs[i].tagName] = childs[i].firstChild.nodeValue;
            }
            field.autoCFG[type].apply(field, [data]);
        }
    },
    hoverItem: function (e) {
        if (jQuery.iAuto.items) {
            if (jQuery.iAuto.selectedItem != null) {
                jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0).className = "";
            }
            jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0).className = "";
            jQuery.iAuto.selectedItem = parseInt(this.getAttribute("dir")) || 0;
            jQuery.iAuto.items.get(jQuery.iAuto.selectedItem || 0).className = jQuery.iAuto.subject.autoCFG.selectClass;
        }
    },
    clickItem: function (event) {
        window.clearTimeout(jQuery.iAuto.timer);
        event = event || jQuery.event.fix(window.event);
        event.preventDefault();
        event.stopPropagation();
        var subject = jQuery.iAuto.getFieldValues(jQuery.iAuto.subject);
        var valueToAdd = this.getAttribute("rel");
        jQuery.iAuto.subject.value = subject.pre + valueToAdd + jQuery.iAuto.subject.autoCFG.multipleSeparator + subject.post;
        jQuery.iAuto.lastValue = this.getAttribute("rel");
        jQuery.iAuto.selection(jQuery.iAuto.subject, subject.pre.length + valueToAdd.length + jQuery.iAuto.subject.autoCFG.multipleSeparator.length, subject.pre.length + valueToAdd.length + jQuery.iAuto.subject.autoCFG.multipleSeparator.length);
        jQuery.iAuto.clear();
        if (jQuery.iAuto.subject.autoCFG.onSelect) {
            iteration = parseInt(this.getAttribute("dir")) || 0;
            jQuery.iAuto.applyOn(jQuery.iAuto.subject, jQuery.iAuto.subject.autoCFG.lastSuggestion.get(iteration), "onSelect");
        }
        return false;
    },
    protect: function (e) {
        pressedKey = e.charCode || e.keyCode || -1;
        if (/13|27|35|36|38|40/.test(pressedKey) && jQuery.iAuto.items) {
            if (window.event) {
                window.event.cancelBubble = true;
                window.event.returnValue = false;
            } else {
                e.preventDefault();
                e.stopPropagation();
            }
            return false;
        }
    },
    build: function (options) {
        if (!options.source || !jQuery.iUtil) {
            return;
        }
        if (!jQuery.iAuto.helper) {
            if (jQuery.browser.msie) {
                jQuery("body", document).append("<iframe style=\"display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);\" id=\"autocompleteIframe\" src=\"javascript:false;\" frameborder=\"0\" scrolling=\"no\"></iframe>");
                jQuery.iAuto.iframe = jQuery("#autocompleteIframe");
            }
            jQuery("body", document).append("<div id=\"autocompleteHelper\" style=\"position: absolute; top: 0; left: 0; z-index: 30001; display: none;\"><ul style=\"margin: 0;padding: 0; list-style: none; z-index: 30002;\">&nbsp;</ul></div>");
            jQuery.iAuto.helper = jQuery("#autocompleteHelper");
            jQuery.iAuto.content = jQuery("ul", jQuery.iAuto.helper);
        }
        return this.each(function () {
            if (this.tagName != "INPUT" && this.getAttribute("type") != "text") {
                return;
            }
            this.autoCFG = {};
            this.autoCFG.source = options.source;
            this.autoCFG.minchars = Math.abs(parseInt(options.minchars) || 1);
            this.autoCFG.helperClass = options.helperClass ? options.helperClass : "";
            this.autoCFG.selectClass = options.selectClass ? options.selectClass : "";
            this.autoCFG.onSelect = options.onSelect && options.onSelect.constructor == Function ? options.onSelect : null;
            this.autoCFG.onShow = options.onShow && options.onShow.constructor == Function ? options.onShow : null;
            this.autoCFG.onHide = options.onHide && options.onHide.constructor == Function ? options.onHide : null;
            this.autoCFG.onHighlight = options.onHighlight && options.onHighlight.constructor == Function ? options.onHighlight : null;
            this.autoCFG.inputWidth = options.inputWidth || false;
            this.autoCFG.multiple = options.multiple || false;
            this.autoCFG.multipleSeparator = this.autoCFG.multiple ? options.multipleSeparator || ", " : "";
            this.autoCFG.autofill = options.autofill ? true : false;
            this.autoCFG.delay = Math.abs(parseInt(options.delay) || 1000);
            if (options.fx && options.fx.constructor == Object) {
                if (!options.fx.type || !/fade|slide|blind/.test(options.fx.type)) {
                    options.fx.type = "slide";
                }
                if (options.fx.type == "slide" && !jQuery.fx.slide) {
                    return;
                }
                if (options.fx.type == "blind" && !jQuery.fx.BlindDirection) {
                    return;
                }
                options.fx.duration = Math.abs(parseInt(options.fx.duration) || 400);
                if (options.fx.duration > this.autoCFG.delay) {
                    options.fx.duration = this.autoCFG.delay - 100;
                }
                this.autoCFG.fx = options.fx;
            }
            this.autoCFG.lastSuggestion = null;
            this.autoCFG.inCache = false;
            jQuery(this).attr("autocomplete", "off").focus(function () {
                jQuery.iAuto.subject = this;
                jQuery.iAuto.lastValue = this.value;
            }).keypress(jQuery.iAuto.protect).keyup(jQuery.iAuto.autocomplete).blur(function () {
                jQuery.iAuto.timer = window.setTimeout(jQuery.iAuto.clear, 200);
            });
        });
    }
};
jQuery.fn.Autocomplete = jQuery.iAuto.build;
jQuery.iAutoscroller = {
    timer: null,
    elToScroll: null,
    elsToScroll: null,
    step: 10,
    start: function (el, els, step, interval) {
        jQuery.iAutoscroller.elToScroll = el;
        jQuery.iAutoscroller.elsToScroll = els;
        jQuery.iAutoscroller.step = parseInt(step) || 10;
        jQuery.iAutoscroller.timer = window.setInterval(jQuery.iAutoscroller.doScroll, parseInt(interval) || 40);
    },
    doScroll: function () {
        for (i = 0; i < jQuery.iAutoscroller.elsToScroll.length; i++) {
            if (!jQuery.iAutoscroller.elsToScroll[i].parentData) {
                jQuery.iAutoscroller.elsToScroll[i].parentData = jQuery.extend(jQuery.iUtil.getPositionLite(jQuery.iAutoscroller.elsToScroll[i]), jQuery.iUtil.getSizeLite(jQuery.iAutoscroller.elsToScroll[i]), jQuery.iUtil.getScroll(jQuery.iAutoscroller.elsToScroll[i]));
            } else {
                jQuery.iAutoscroller.elsToScroll[i].parentData.t = jQuery.iAutoscroller.elsToScroll[i].scrollTop;
                jQuery.iAutoscroller.elsToScroll[i].parentData.l = jQuery.iAutoscroller.elsToScroll[i].scrollLeft;
            }
            if (jQuery.iAutoscroller.elToScroll.dragCfg && jQuery.iAutoscroller.elToScroll.dragCfg.init == true) {
                elementData = {
                    x: jQuery.iAutoscroller.elToScroll.dragCfg.nx,
                    y: jQuery.iAutoscroller.elToScroll.dragCfg.ny,
                    wb: jQuery.iAutoscroller.elToScroll.dragCfg.oC.wb,
                    hb: jQuery.iAutoscroller.elToScroll.dragCfg.oC.hb
                };
            } else {
                elementData = jQuery.extend(jQuery.iUtil.getPositionLite(jQuery.iAutoscroller.elToScroll), jQuery.iUtil.getSizeLite(jQuery.iAutoscroller.elToScroll));
            }
            if (jQuery.iAutoscroller.elsToScroll[i].parentData.t > 0 && jQuery.iAutoscroller.elsToScroll[i].parentData.y + jQuery.iAutoscroller.elsToScroll[i].parentData.t > elementData.y) {
                jQuery.iAutoscroller.elsToScroll[i].scrollTop -= jQuery.iAutoscroller.step;
            } else if (jQuery.iAutoscroller.elsToScroll[i].parentData.t <= jQuery.iAutoscroller.elsToScroll[i].parentData.h && jQuery.iAutoscroller.elsToScroll[i].parentData.t + jQuery.iAutoscroller.elsToScroll[i].parentData.hb < elementData.y + elementData.hb) {
                jQuery.iAutoscroller.elsToScroll[i].scrollTop += jQuery.iAutoscroller.step;
            }
            if (jQuery.iAutoscroller.elsToScroll[i].parentData.l > 0 && jQuery.iAutoscroller.elsToScroll[i].parentData.x + jQuery.iAutoscroller.elsToScroll[i].parentData.l > elementData.x) {
                jQuery.iAutoscroller.elsToScroll[i].scrollLeft -= jQuery.iAutoscroller.step;
            } else if (jQuery.iAutoscroller.elsToScroll[i].parentData.l <= jQuery.iAutoscroller.elsToScroll[i].parentData.wh && jQuery.iAutoscroller.elsToScroll[i].parentData.l + jQuery.iAutoscroller.elsToScroll[i].parentData.wb < elementData.x + elementData.wb) {
                jQuery.iAutoscroller.elsToScroll[i].scrollLeft += jQuery.iAutoscroller.step;
            }
        }
    },
    stop: function () {
        window.clearInterval(jQuery.iAutoscroller.timer);
        jQuery.iAutoscroller.elToScroll = null;
        jQuery.iAutoscroller.elsToScroll = null;
        for (i in jQuery.iAutoscroller.elsToScroll) {
            jQuery.iAutoscroller.elsToScroll[i].parentData = null;
        }
    }
};
jQuery.iDrag = {
    helper: null,
    dragged: null,
    destroy: function () {
        return this.each(function () {
            if (this.isDraggable) {
                this.dragCfg.dhe.unbind("mousedown", jQuery.iDrag.draginit);
                this.dragCfg = null;
                this.isDraggable = false;
                if (jQuery.browser.msie) {
                    this.unselectable = "off";
                } else {
                    this.style.MozUserSelect = "";
                    this.style.KhtmlUserSelect = "";
                    this.style.userSelect = "";
                }
            }
        });
    },
    draginit: function (e) {
        if (jQuery.iDrag.dragged != null) {
            jQuery.iDrag.dragstop(e);
            return false;
        }
        var elm = this.dragElem;
        jQuery(document).bind("mousemove", jQuery.iDrag.dragmove).bind("mouseup", jQuery.iDrag.dragstop);
        elm.dragCfg.pointer = jQuery.iUtil.getPointer(e);
        elm.dragCfg.currentPointer = elm.dragCfg.pointer;
        elm.dragCfg.init = false;
        elm.dragCfg.fromHandler = this != this.dragElem;
        jQuery.iDrag.dragged = elm;
        if (elm.dragCfg.si && this != this.dragElem) {
            parentPos = jQuery.iUtil.getPosition(elm.parentNode);
            sliderSize = jQuery.iUtil.getSize(elm);
            sliderPos = {
                x: parseInt(jQuery.css(elm, "left")) || 0,
                y: parseInt(jQuery.css(elm, "top")) || 0
            };
            dx = elm.dragCfg.currentPointer.x - parentPos.x - sliderSize.wb / 2 - sliderPos.x;
            dy = elm.dragCfg.currentPointer.y - parentPos.y - sliderSize.hb / 2 - sliderPos.y;
            jQuery.iSlider.dragmoveBy(elm, [dx, dy]);
        }
        return jQuery.selectKeyHelper || false;
    },
    dragstart: function (e) {
        var elm = jQuery.iDrag.dragged;
        elm.dragCfg.init = true;
        var dEs = elm.style;
        elm.dragCfg.oD = jQuery.css(elm, "display");
        elm.dragCfg.oP = jQuery.css(elm, "position");
        if (!elm.dragCfg.initialPosition) {
            elm.dragCfg.initialPosition = elm.dragCfg.oP;
        }
        elm.dragCfg.oR = {
            x: parseInt(jQuery.css(elm, "left")) || 0,
            y: parseInt(jQuery.css(elm, "top")) || 0
        };
        elm.dragCfg.diffX = 0;
        elm.dragCfg.diffY = 0;
        if (jQuery.browser.msie) {
            var oldBorder = jQuery.iUtil.getBorder(elm, true);
            elm.dragCfg.diffX = oldBorder.l || 0;
            elm.dragCfg.diffY = oldBorder.t || 0;
        }
        elm.dragCfg.oC = jQuery.extend(jQuery.iUtil.getPosition(elm), jQuery.iUtil.getSize(elm));
        if (elm.dragCfg.oP != "relative" && elm.dragCfg.oP != "absolute") {
            dEs.position = "relative";
        }
        jQuery.iDrag.helper.empty();
        var clonedEl = elm.cloneNode(true);
        jQuery(clonedEl).css({
            display: "block",
            left: "0px",
            top: "0px"
        });
        clonedEl.style.marginTop = "0";
        clonedEl.style.marginRight = "0";
        clonedEl.style.marginBottom = "0";
        clonedEl.style.marginLeft = "0";
        jQuery.iDrag.helper.append(clonedEl);
        var dhs = jQuery.iDrag.helper.get(0).style;
        if (elm.dragCfg.autoSize) {
            dhs.width = "auto";
            dhs.height = "auto";
        } else {
            dhs.height = elm.dragCfg.oC.hb + "px";
            dhs.width = elm.dragCfg.oC.wb + "px";
        }
        dhs.display = "block";
        dhs.marginTop = "0px";
        dhs.marginRight = "0px";
        dhs.marginBottom = "0px";
        dhs.marginLeft = "0px";
        jQuery.extend(elm.dragCfg.oC, jQuery.iUtil.getSize(clonedEl));
        if (elm.dragCfg.cursorAt) {
            if (elm.dragCfg.cursorAt.left) {
                elm.dragCfg.oR.x += elm.dragCfg.pointer.x - elm.dragCfg.oC.x - elm.dragCfg.cursorAt.left;
                elm.dragCfg.oC.x = elm.dragCfg.pointer.x - elm.dragCfg.cursorAt.left;
            }
            if (elm.dragCfg.cursorAt.top) {
                elm.dragCfg.oR.y += elm.dragCfg.pointer.y - elm.dragCfg.oC.y - elm.dragCfg.cursorAt.top;
                elm.dragCfg.oC.y = elm.dragCfg.pointer.y - elm.dragCfg.cursorAt.top;
            }
            if (elm.dragCfg.cursorAt.right) {
                elm.dragCfg.oR.x += elm.dragCfg.pointer.x - elm.dragCfg.oC.x - elm.dragCfg.oC.hb + elm.dragCfg.cursorAt.right;
                elm.dragCfg.oC.x = elm.dragCfg.pointer.x - elm.dragCfg.oC.wb + elm.dragCfg.cursorAt.right;
            }
            if (elm.dragCfg.cursorAt.bottom) {
                elm.dragCfg.oR.y += elm.dragCfg.pointer.y - elm.dragCfg.oC.y - elm.dragCfg.oC.hb + elm.dragCfg.cursorAt.bottom;
                elm.dragCfg.oC.y = elm.dragCfg.pointer.y - elm.dragCfg.oC.hb + elm.dragCfg.cursorAt.bottom;
            }
        }
        elm.dragCfg.nx = elm.dragCfg.oR.x;
        elm.dragCfg.ny = elm.dragCfg.oR.y;
        if (elm.dragCfg.insideParent || elm.dragCfg.containment == "parent") {
            parentBorders = jQuery.iUtil.getBorder(elm.parentNode, true);
            elm.dragCfg.oC.x = elm.offsetLeft + (jQuery.browser.msie ? 0 : jQuery.browser.opera ? -parentBorders.l : parentBorders.l);
            elm.dragCfg.oC.y = elm.offsetTop + (jQuery.browser.msie ? 0 : jQuery.browser.opera ? -parentBorders.t : parentBorders.t);
            jQuery(elm.parentNode).append(jQuery.iDrag.helper.get(0));
        }
        if (elm.dragCfg.containment) {
            jQuery.iDrag.getContainment(elm);
            elm.dragCfg.onDragModifier.containment = jQuery.iDrag.fitToContainer;
        }
        if (elm.dragCfg.si) {
            jQuery.iSlider.modifyContainer(elm);
        }
        dhs.left = elm.dragCfg.oC.x - elm.dragCfg.diffX + "px";
        dhs.top = elm.dragCfg.oC.y - elm.dragCfg.diffY + "px";
        dhs.width = elm.dragCfg.oC.wb + "px";
        dhs.height = elm.dragCfg.oC.hb + "px";
        jQuery.iDrag.dragged.dragCfg.prot = false;
        if (elm.dragCfg.gx) {
            elm.dragCfg.onDragModifier.grid = jQuery.iDrag.snapToGrid;
        }
        if (elm.dragCfg.zIndex != false) {
            jQuery.iDrag.helper.css("zIndex", elm.dragCfg.zIndex);
        }
        if (elm.dragCfg.opacity) {
            jQuery.iDrag.helper.css("opacity", elm.dragCfg.opacity);
            if (window.ActiveXObject) {
                jQuery.iDrag.helper.css("filter", "alpha(opacity=" + elm.dragCfg.opacity * 100 + ")");
            }
        }
        if (elm.dragCfg.frameClass) {
            jQuery.iDrag.helper.addClass(elm.dragCfg.frameClass);
            jQuery.iDrag.helper.get(0).firstChild.style.display = "none";
        }
        if (elm.dragCfg.onStart) {
            elm.dragCfg.onStart.apply(elm, [clonedEl, elm.dragCfg.oR.x, elm.dragCfg.oR.y]);
        }
        if (jQuery.iDrop && jQuery.iDrop.count > 0) {
            jQuery.iDrop.highlight(elm);
        }
        if (elm.dragCfg.ghosting == false) {
            dEs.display = "none";
        }
        return false;
    },
    getContainment: function (elm) {
        if (elm.dragCfg.containment.constructor == String) {
            if (elm.dragCfg.containment == "parent") {
                elm.dragCfg.cont = jQuery.extend({
                    x: 0,
                    y: 0
                }, jQuery.iUtil.getSize(elm.parentNode));
                var contBorders = jQuery.iUtil.getBorder(elm.parentNode, true);
                elm.dragCfg.cont.w = elm.dragCfg.cont.wb - contBorders.l - contBorders.r;
                elm.dragCfg.cont.h = elm.dragCfg.cont.hb - contBorders.t - contBorders.b;
            } else if (elm.dragCfg.containment == "document") {
                var clnt = jQuery.iUtil.getClient();
                elm.dragCfg.cont = {
                    x: 0,
                    y: 0,
                    w: clnt.w,
                    h: clnt.h
                };
            }
        } else if (elm.dragCfg.containment.constructor == Array) {
            elm.dragCfg.cont = {
                x: parseInt(elm.dragCfg.containment[0]) || 0,
                y: parseInt(elm.dragCfg.containment[1]) || 0,
                w: parseInt(elm.dragCfg.containment[2]) || 0,
                h: parseInt(elm.dragCfg.containment[3]) || 0
            };
        }
        elm.dragCfg.cont.dx = elm.dragCfg.cont.x - elm.dragCfg.oC.x;
        elm.dragCfg.cont.dy = elm.dragCfg.cont.y - elm.dragCfg.oC.y;
    },
    hidehelper: function (dragged) {
        if (dragged.dragCfg.insideParent || dragged.dragCfg.containment == "parent") {
            jQuery("body", document).append(jQuery.iDrag.helper.get(0));
        }
        jQuery.iDrag.helper.empty().hide().css("opacity", 1);
        if (window.ActiveXObject) {
            jQuery.iDrag.helper.css("filter", "alpha(opacity=100)");
        }
    },
    dragstop: function (e) {
        jQuery(document).unbind("mousemove", jQuery.iDrag.dragmove).unbind("mouseup", jQuery.iDrag.dragstop);
        if (jQuery.iDrag.dragged == null) {
            return;
        }
        var dragged = jQuery.iDrag.dragged;
        jQuery.iDrag.dragged = null;
        if (dragged.dragCfg.init == false) {
            return false;
        }
        if (dragged.dragCfg.so == true) {
            jQuery(dragged).css("position", dragged.dragCfg.oP);
        }
        var dEs = dragged.style;
        if (dragged.si) {
            jQuery.iDrag.helper.css("cursor", "move");
        }
        if (dragged.dragCfg.frameClass) {
            jQuery.iDrag.helper.removeClass(dragged.dragCfg.frameClass);
        }
        if (dragged.dragCfg.revert == false) {
            if (dragged.dragCfg.fx > 0) {
                if (!dragged.dragCfg.axis || dragged.dragCfg.axis == "horizontally") {
                    var x = new(jQuery.fx)(dragged, {
                        duration: dragged.dragCfg.fx
                    }, "left");
                    x.custom(dragged.dragCfg.oR.x, dragged.dragCfg.nRx);
                }
                if (!dragged.dragCfg.axis || dragged.dragCfg.axis == "vertically") {
                    var y = new(jQuery.fx)(dragged, {
                        duration: dragged.dragCfg.fx
                    }, "top");
                    y.custom(dragged.dragCfg.oR.y, dragged.dragCfg.nRy);
                }
            } else {
                if (!dragged.dragCfg.axis || dragged.dragCfg.axis == "horizontally") {
                    dragged.style.left = dragged.dragCfg.nRx + "px";
                }
                if (!dragged.dragCfg.axis || dragged.dragCfg.axis == "vertically") {
                    dragged.style.top = dragged.dragCfg.nRy + "px";
                }
            }
            jQuery.iDrag.hidehelper(dragged);
            if (dragged.dragCfg.ghosting == false) {
                jQuery(dragged).css("display", dragged.dragCfg.oD);
            }
        } else if (dragged.dragCfg.fx > 0) {
            dragged.dragCfg.prot = true;
            var dh = false;
            if (jQuery.iDrop && jQuery.iSort && dragged.dragCfg.so) {
                dh = jQuery.iUtil.getPosition(jQuery.iSort.helper.get(0));
            }
            jQuery.iDrag.helper.animate({
                left: dh ? dh.x : dragged.dragCfg.oC.x,
                top: dh ? dh.y : dragged.dragCfg.oC.y
            }, dragged.dragCfg.fx, function () {
                dragged.dragCfg.prot = false;
                if (dragged.dragCfg.ghosting == false) {
                    dragged.style.display = dragged.dragCfg.oD;
                }
                jQuery.iDrag.hidehelper(dragged);
            });
        } else {
            jQuery.iDrag.hidehelper(dragged);
            if (dragged.dragCfg.ghosting == false) {
                jQuery(dragged).css("display", dragged.dragCfg.oD);
            }
        }
        if (jQuery.iDrop && jQuery.iDrop.count > 0) {
            jQuery.iDrop.checkdrop(dragged);
        }
        if (jQuery.iSort && dragged.dragCfg.so) {
            jQuery.iSort.check(dragged);
        }
        if (dragged.dragCfg.onChange && (dragged.dragCfg.nRx != dragged.dragCfg.oR.x || dragged.dragCfg.nRy != dragged.dragCfg.oR.y)) {
            dragged.dragCfg.onChange.apply(dragged, dragged.dragCfg.lastSi || [0, 0, dragged.dragCfg.nRx, dragged.dragCfg.nRy]);
        }
        if (dragged.dragCfg.onStop) {
            dragged.dragCfg.onStop.apply(dragged);
        }
        return false;
    },
    snapToGrid: function (x, y, dx, dy) {
        if (dx != 0) {
            dx = parseInt((dx + this.dragCfg.gx * dx / Math.abs(dx) / 2) / this.dragCfg.gx) * this.dragCfg.gx;
        }
        if (dy != 0) {
            dy = parseInt((dy + this.dragCfg.gy * dy / Math.abs(dy) / 2) / this.dragCfg.gy) * this.dragCfg.gy;
        }
        return {
            dx: dx,
            dy: dy,
            x: 0,
            y: 0
        };
    },
    fitToContainer: function (x, y, dx, dy) {
        dx = Math.min(Math.max(dx, this.dragCfg.cont.dx), this.dragCfg.cont.w + this.dragCfg.cont.dx - this.dragCfg.oC.wb);
        dy = Math.min(Math.max(dy, this.dragCfg.cont.dy), this.dragCfg.cont.h + this.dragCfg.cont.dy - this.dragCfg.oC.hb);
        return {
            dx: dx,
            dy: dy,
            x: 0,
            y: 0
        };
    },
    dragmove: function (e) {
        if (jQuery.iDrag.dragged == null || jQuery.iDrag.dragged.dragCfg.prot == true) {
            return;
        }
        var dragged = jQuery.iDrag.dragged;
        dragged.dragCfg.currentPointer = jQuery.iUtil.getPointer(e);
        if (dragged.dragCfg.init == false) {
            distance = Math.sqrt(Math.pow(dragged.dragCfg.pointer.x - dragged.dragCfg.currentPointer.x, 2) + Math.pow(dragged.dragCfg.pointer.y - dragged.dragCfg.currentPointer.y, 2));
            if (distance < dragged.dragCfg.snapDistance) {
                return;
            } else {
                jQuery.iDrag.dragstart(e);
            }
        }
        var dx = dragged.dragCfg.currentPointer.x - dragged.dragCfg.pointer.x;
        var dy = dragged.dragCfg.currentPointer.y - dragged.dragCfg.pointer.y;
        for (var i in dragged.dragCfg.onDragModifier) {
            var newCoords = dragged.dragCfg.onDragModifier[i].apply(dragged, [dragged.dragCfg.oR.x + dx, dragged.dragCfg.oR.y + dy, dx, dy]);
            if (newCoords && newCoords.constructor == Object) {
                dx = i != "user" ? newCoords.dx : newCoords.x - dragged.dragCfg.oR.x;
                dy = i != "user" ? newCoords.dy : newCoords.y - dragged.dragCfg.oR.y;
            }
        }
        dragged.dragCfg.nx = dragged.dragCfg.oC.x + dx - dragged.dragCfg.diffX;
        dragged.dragCfg.ny = dragged.dragCfg.oC.y + dy - dragged.dragCfg.diffY;
        if (dragged.dragCfg.si && (dragged.dragCfg.onSlide || dragged.dragCfg.onChange)) {
            jQuery.iSlider.onSlide(dragged, dragged.dragCfg.nx, dragged.dragCfg.ny);
        }
        if (dragged.dragCfg.onDrag) {
            dragged.dragCfg.onDrag.apply(dragged, [dragged.dragCfg.oR.x + dx, dragged.dragCfg.oR.y + dy]);
        }
        if (!dragged.dragCfg.axis || dragged.dragCfg.axis == "horizontally") {
            dragged.dragCfg.nRx = dragged.dragCfg.oR.x + dx;
            jQuery.iDrag.helper.get(0).style.left = dragged.dragCfg.nx + "px";
        }
        if (!dragged.dragCfg.axis || dragged.dragCfg.axis == "vertically") {
            dragged.dragCfg.nRy = dragged.dragCfg.oR.y + dy;
            jQuery.iDrag.helper.get(0).style.top = dragged.dragCfg.ny + "px";
        }
        if (jQuery.iDrop && jQuery.iDrop.count > 0) {
            jQuery.iDrop.checkhover(dragged);
        }
        return false;
    },
    build: function (o) {
        if (!jQuery.iDrag.helper) {
            jQuery("body", document).append("<div id=\"dragHelper\"></div>");
            jQuery.iDrag.helper = jQuery("#dragHelper");
            var el = jQuery.iDrag.helper.get(0);
            var els = el.style;
            els.position = "absolute";
            els.display = "none";
            els.cursor = "move";
            els.listStyle = "none";
            els.overflow = "hidden";
            if (window.ActiveXObject) {
                el.unselectable = "on";
            } else {
                els.mozUserSelect = "none";
                els.userSelect = "none";
                els.KhtmlUserSelect = "none";
            }
        }
        if (!o) {
            o = {};
        }
        return this.each(function () {
            if (this.isDraggable || !jQuery.iUtil) {
                return;
            }
            if (window.ActiveXObject) {
                this.onselectstart = function () {
                    return false;
                };
                this.ondragstart = function () {
                    return false;
                };
            }
            var el = this;
            var dhe = o.handle ? jQuery(this).find(o.handle) : jQuery(this);
            if (jQuery.browser.msie) {
                dhe.each(function () {
                    this.unselectable = "on";
                });
            } else {
                dhe.css("-moz-user-select", "none");
                dhe.css("user-select", "none");
                dhe.css("-khtml-user-select", "none");
            }
            this.dragCfg = {
                dhe: dhe,
                revert: o.revert ? true : false,
                ghosting: o.ghosting ? true : false,
                so: o.so ? o.so : false,
                si: o.si ? o.si : false,
                insideParent: o.insideParent ? o.insideParent : false,
                zIndex: o.zIndex ? parseInt(o.zIndex) || 0 : false,
                opacity: o.opacity ? parseFloat(o.opacity) : false,
                fx: parseInt(o.fx) || null,
                hpc: o.hpc ? o.hpc : false,
                onDragModifier: {},
                pointer: {},
                onStart: o.onStart && o.onStart.constructor == Function ? o.onStart : false,
                onStop: o.onStop && o.onStop.constructor == Function ? o.onStop : false,
                onChange: o.onChange && o.onChange.constructor == Function ? o.onChange : false,
                axis: /vertically|horizontally/.test(o.axis) ? o.axis : false,
                snapDistance: o.snapDistance ? parseInt(o.snapDistance) || 0 : 0,
                cursorAt: o.cursorAt ? o.cursorAt : false,
                autoSize: o.autoSize ? true : false,
                frameClass: o.frameClass || false
            };
            if (o.onDragModifier && o.onDragModifier.constructor == Function) {
                this.dragCfg.onDragModifier.user = o.onDragModifier;
            }
            if (o.onDrag && o.onDrag.constructor == Function) {
                this.dragCfg.onDrag = o.onDrag;
            }
            if (o.containment && (o.containment.constructor == String && (o.containment == "parent" || o.containment == "document") || o.containment.constructor == Array && o.containment.length == 4)) {
                this.dragCfg.containment = o.containment;
            }
            if (o.fractions) {
                this.dragCfg.fractions = o.fractions;
            }
            if (o.grid) {
                if (typeof o.grid == "number") {
                    this.dragCfg.gx = parseInt(o.grid) || 1;
                    this.dragCfg.gy = parseInt(o.grid) || 1;
                } else if (o.grid.length == 2) {
                    this.dragCfg.gx = parseInt(o.grid[0]) || 1;
                    this.dragCfg.gy = parseInt(o.grid[1]) || 1;
                }
            }
            if (o.onSlide && o.onSlide.constructor == Function) {
                this.dragCfg.onSlide = o.onSlide;
            }
            this.isDraggable = true;
            dhe.each(function () {
                this.dragElem = el;
            });
            dhe.bind("mousedown", jQuery.iDrag.draginit);
        });
    }
};
jQuery.fn.extend({
    DraggableDestroy: jQuery.iDrag.destroy,
    Draggable: jQuery.iDrag.build
});
jQuery.iDrop = {
    fit: function (zonex, zoney, zonew, zoneh) {
        return zonex <= jQuery.iDrag.dragged.dragCfg.nx && zonex + zonew >= jQuery.iDrag.dragged.dragCfg.nx + jQuery.iDrag.dragged.dragCfg.oC.w && zoney <= jQuery.iDrag.dragged.dragCfg.ny && zoney + zoneh >= jQuery.iDrag.dragged.dragCfg.ny + jQuery.iDrag.dragged.dragCfg.oC.h ? true : false;
    },
    intersect: function (zonex, zoney, zonew, zoneh) {
        return !(zonex > jQuery.iDrag.dragged.dragCfg.nx + jQuery.iDrag.dragged.dragCfg.oC.w || zonex + zonew < jQuery.iDrag.dragged.dragCfg.nx || zoney > jQuery.iDrag.dragged.dragCfg.ny + jQuery.iDrag.dragged.dragCfg.oC.h || zoney + zoneh < jQuery.iDrag.dragged.dragCfg.ny) ? true : false;
    },
    pointer: function (zonex, zoney, zonew, zoneh) {
        return zonex < jQuery.iDrag.dragged.dragCfg.currentPointer.x && zonex + zonew > jQuery.iDrag.dragged.dragCfg.currentPointer.x && zoney < jQuery.iDrag.dragged.dragCfg.currentPointer.y && zoney + zoneh > jQuery.iDrag.dragged.dragCfg.currentPointer.y ? true : false;
    },
    overzone: false,
    highlighted: {},
    count: 0,
    zones: {},
    highlight: function (elm) {
        if (jQuery.iDrag.dragged == null) {
            return;
        }
        var i;
        jQuery.iDrop.highlighted = {};
        var oneIsSortable = false;
        for (i in jQuery.iDrop.zones) {
            if (jQuery.iDrop.zones[i] != null) {
                var iEL = jQuery.iDrop.zones[i].get(0);
                if (jQuery(jQuery.iDrag.dragged).is("." + iEL.dropCfg.a)) {
                    if (iEL.dropCfg.m == false) {
                        iEL.dropCfg.p = jQuery.extend(jQuery.iUtil.getPositionLite(iEL), jQuery.iUtil.getSizeLite(iEL));
                        iEL.dropCfg.m = true;
                    }
                    if (iEL.dropCfg.ac) {
                        jQuery.iDrop.zones[i].addClass(iEL.dropCfg.ac);
                    }
                    jQuery.iDrop.highlighted[i] = jQuery.iDrop.zones[i];
                    if (jQuery.iSort && iEL.dropCfg.s && jQuery.iDrag.dragged.dragCfg.so) {
                        iEL.dropCfg.el = jQuery("." + iEL.dropCfg.a, iEL);
                        elm.style.display = "none";
                        jQuery.iSort.measure(iEL);
                        iEL.dropCfg.os = jQuery.iSort.serialize(jQuery.attr(iEL, "id")).hash;
                        elm.style.display = elm.dragCfg.oD;
                        oneIsSortable = true;
                    }
                    if (iEL.dropCfg.onActivate) {
                        iEL.dropCfg.onActivate.apply(jQuery.iDrop.zones[i].get(0), [jQuery.iDrag.dragged]);
                    }
                }
            }
        }
        if (oneIsSortable) {
            jQuery.iSort.start();
        }
    },
    remeasure: function () {
        jQuery.iDrop.highlighted = {};
        for (i in jQuery.iDrop.zones) {
            if (jQuery.iDrop.zones[i] != null) {
                var iEL = jQuery.iDrop.zones[i].get(0);
                if (jQuery(jQuery.iDrag.dragged).is("." + iEL.dropCfg.a)) {
                    iEL.dropCfg.p = jQuery.extend(jQuery.iUtil.getPositionLite(iEL), jQuery.iUtil.getSizeLite(iEL));
                    if (iEL.dropCfg.ac) {
                        jQuery.iDrop.zones[i].addClass(iEL.dropCfg.ac);
                    }
                    jQuery.iDrop.highlighted[i] = jQuery.iDrop.zones[i];
                    if (jQuery.iSort && iEL.dropCfg.s && jQuery.iDrag.dragged.dragCfg.so) {
                        iEL.dropCfg.el = jQuery("." + iEL.dropCfg.a, iEL);
                        elm.style.display = "none";
                        jQuery.iSort.measure(iEL);
                        elm.style.display = elm.dragCfg.oD;
                    }
                }
            }
        }
    },
    checkhover: function (e) {
        if (jQuery.iDrag.dragged == null) {
            return;
        }
        jQuery.iDrop.overzone = false;
        var i;
        var applyOnHover = false;
        var hlt = 0;
        for (i in jQuery.iDrop.highlighted) {
            var iEL = jQuery.iDrop.highlighted[i].get(0);
            if (jQuery.iDrop.overzone == false && jQuery.iDrop[iEL.dropCfg.t](iEL.dropCfg.p.x, iEL.dropCfg.p.y, iEL.dropCfg.p.wb, iEL.dropCfg.p.hb)) {
                if (iEL.dropCfg.hc && iEL.dropCfg.h == false) {
                    jQuery.iDrop.highlighted[i].addClass(iEL.dropCfg.hc);
                }
                if (iEL.dropCfg.h == false && iEL.dropCfg.onHover) {
                    applyOnHover = true;
                }
                iEL.dropCfg.h = true;
                jQuery.iDrop.overzone = iEL;
                if (jQuery.iSort && iEL.dropCfg.s && jQuery.iDrag.dragged.dragCfg.so) {
                    jQuery.iSort.helper.get(0).className = iEL.dropCfg.shc;
                    jQuery.iSort.checkhover(iEL);
                }
                hlt++;
            } else if (iEL.dropCfg.h == true) {
                if (iEL.dropCfg.onOut) {
                    iEL.dropCfg.onOut.apply(iEL, [e, jQuery.iDrag.helper.get(0).firstChild, iEL.dropCfg.fx]);
                }
                if (iEL.dropCfg.hc) {
                    jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.hc);
                }
                iEL.dropCfg.h = false;
            }
        }
        if (jQuery.iSort && !jQuery.iDrop.overzone && jQuery.iDrag.dragged.so) {
            jQuery.iSort.helper.get(0).style.display = "none";
        }
        if (applyOnHover) {
            jQuery.iDrop.overzone.dropCfg.onHover.apply(jQuery.iDrop.overzone, [e, jQuery.iDrag.helper.get(0).firstChild]);
        }
    },
    checkdrop: function (e) {
        var i;
        for (i in jQuery.iDrop.highlighted) {
            var iEL = jQuery.iDrop.highlighted[i].get(0);
            if (iEL.dropCfg.ac) {
                jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.ac);
            }
            if (iEL.dropCfg.hc) {
                jQuery.iDrop.highlighted[i].removeClass(iEL.dropCfg.hc);
            }
            if (iEL.dropCfg.s) {
                jQuery.iSort.changed[jQuery.iSort.changed.length] = i;
            }
            if (iEL.dropCfg.onDrop && iEL.dropCfg.h == true) {
                iEL.dropCfg.h = false;
                iEL.dropCfg.onDrop.apply(iEL, [e, iEL.dropCfg.fx]);
            }
            iEL.dropCfg.m = false;
            iEL.dropCfg.h = false;
        }
        jQuery.iDrop.highlighted = {};
    },
    destroy: function () {
        return this.each(function () {
            if (this.isDroppable) {
                if (this.dropCfg.s) {
                    id = jQuery.attr(this, "id");
                    jQuery.iSort.collected[id] = null;
                    jQuery("." + this.dropCfg.a, this).DraggableDestroy();
                }
                jQuery.iDrop.zones["d" + this.idsa] = null;
                this.isDroppable = false;
                this.f = null;
            }
        });
    },
    build: function (o) {
        return this.each(function () {
            if (this.isDroppable == true || !o.accept || !jQuery.iUtil || !jQuery.iDrag) {
                return;
            }
            this.dropCfg = {
                a: o.accept,
                ac: o.activeclass || false,
                hc: o.hoverclass || false,
                shc: o.helperclass || false,
                onDrop: o.ondrop || o.onDrop || false,
                onHover: o.onHover || o.onhover || false,
                onOut: o.onOut || o.onout || false,
                onActivate: o.onActivate || false,
                t: o.tolerance && (o.tolerance == "fit" || o.tolerance == "intersect") ? o.tolerance : "pointer",
                fx: o.fx ? o.fx : false,
                m: false,
                h: false
            };
            if (o.sortable == true && jQuery.iSort) {
                id = jQuery.attr(this, "id");
                jQuery.iSort.collected[id] = this.dropCfg.a;
                this.dropCfg.s = true;
                if (o.onChange) {
                    this.dropCfg.onChange = o.onChange;
                    this.dropCfg.os = jQuery.iSort.serialize(id).hash;
                }
            }
            this.isDroppable = true;
            this.idsa = parseInt(Math.random() * 10000);
            jQuery.iDrop.zones["d" + this.idsa] = jQuery(this);
            jQuery.iDrop.count++;
        });
    }
};
jQuery.fn.extend({
    DroppableDestroy: jQuery.iDrop.destroy,
    Droppable: jQuery.iDrop.build
});
jQuery.recallDroppables = jQuery.iDrop.remeasure;
jQuery.iExpander = {
    helper: null,
    expand: function () {
        text = this.value;
        if (!text) {
            return;
        }
        style = {
            fontFamily: jQuery(this).css("fontFamily") || "",
            fontSize: jQuery(this).css("fontSize") || "",
            fontWeight: jQuery(this).css("fontWeight") || "",
            fontStyle: jQuery(this).css("fontStyle") || "",
            fontStretch: jQuery(this).css("fontStretch") || "",
            fontVariant: jQuery(this).css("fontVariant") || "",
            letterSpacing: jQuery(this).css("letterSpacing") || "",
            wordSpacing: jQuery(this).css("wordSpacing") || ""
        };
        jQuery.iExpander.helper.css(style);
        html = jQuery.iExpander.htmlEntities(text);
        html = html.replace(new RegExp("\\n", "g"), "<br />");
        jQuery.iExpander.helper.html("pW");
        spacer = jQuery.iExpander.helper.get(0).offsetWidth;
        jQuery.iExpander.helper.html(html);
        width = jQuery.iExpander.helper.get(0).offsetWidth + spacer;
        if (this.Expander.limit && width > this.Expander.limit[0]) {
            width = this.Expander.limit[0];
        }
        this.style.width = width + "px";
        if (this.tagName == "TEXTAREA") {
            height = jQuery.iExpander.helper.get(0).offsetHeight + spacer;
            if (this.Expander.limit && height > this.Expander.limit[1]) {
                height = this.Expander.limit[1];
            }
            this.style.height = height + "px";
        }
    },
    htmlEntities: function (text) {
        entities = {
            '&': "&amp;",
            '<': "&lt;",
            '>': "&gt;",
            '"': "&quot;"
        };
        for (i in entities) {
            text = text.replace(new RegExp(i, "g"), entities[i]);
        }
        return text;
    },
    build: function (limit) {
        if (jQuery.iExpander.helper == null) {
            jQuery("body", document).append("<div id=\"expanderHelper\" style=\"position: absolute; top: 0; left: 0; visibility: hidden;\"></div>");
            jQuery.iExpander.helper = jQuery("#expanderHelper");
        }
        return this.each(function () {
            if (/TEXTAREA|INPUT/.test(this.tagName)) {
                if (this.tagName == "INPUT") {
                    elType = this.getAttribute("type");
                    if (!/text|password/.test(elType)) {
                        return;
                    }
                }
                if (limit && (limit.constructor == Number || limit.constructor == Array && limit.length == 2)) {
                    if (limit.constructor == Number) {
                        limit = [limit, limit];
                    } else {
                        limit[0] = parseInt(limit[0]) || 400;
                        limit[1] = parseInt(limit[1]) || 400;
                    }
                    this.Expander = {
                        limit: limit
                    };
                }
                jQuery(this).blur(jQuery.iExpander.expand).keyup(jQuery.iExpander.expand).keypress(jQuery.iExpander.expand);
                jQuery.iExpander.expand.apply(this);
            }
        });
    }
};
jQuery.fn.Autoexpand = jQuery.iExpander.build;
jQuery.fxCheckTag = function (e) {
    if (/^tr$|^td$|^tbody$|^caption$|^thead$|^tfoot$|^col$|^colgroup$|^th$|^body$|^header$|^script$|^frame$|^frameset$|^option$|^optgroup$|^meta$/i.test(e.nodeName)) {
        return false;
    } else {
        return true;
    }
};
jQuery.fx.destroyWrapper = function (e, old) {
    var c = e.firstChild;
    var cs = c.style;
    cs.position = old.position;
    cs.marginTop = old.margins.t;
    cs.marginLeft = old.margins.l;
    cs.marginBottom = old.margins.b;
    cs.marginRight = old.margins.r;
    cs.top = old.top + "px";
    cs.left = old.left + "px";
    e.parentNode.insertBefore(c, e);
    e.parentNode.removeChild(e);
};
jQuery.fx.buildWrapper = function (e) {
    if (!jQuery.fxCheckTag(e)) {
        return false;
    }
    var t = jQuery(e);
    var es = e.style;
    var restoreStyle = false;
    if (t.css("display") == "none") {
        oldVisibility = t.css("visibility");
        t.css("visibility", "hidden").show();
        restoreStyle = true;
    }
    var oldStyle = {};
    oldStyle.position = t.css("position");
    oldStyle.sizes = jQuery.iUtil.getSize(e);
    oldStyle.margins = jQuery.iUtil.getMargins(e);
    var oldFloat = e.currentStyle ? e.currentStyle.styleFloat : t.css("float");
    oldStyle.top = parseInt(t.css("top")) || 0;
    oldStyle.left = parseInt(t.css("left")) || 0;
    var wid = "w_" + parseInt(Math.random() * 10000);
    var wr = document.createElement(/^img$|^br$|^input$|^hr$|^select$|^textarea$|^object$|^iframe$|^button$|^form$|^table$|^ul$|^dl$|^ol$/i.test(e.nodeName) ? "div" : e.nodeName);
    jQuery.attr(wr, "id", wid);
    var wrapEl = jQuery(wr).addClass("fxWrapper");
    var wrs = wr.style;
    var top = 0;
    var left = 0;
    if (oldStyle.position == "relative" || oldStyle.position == "absolute") {
        top = oldStyle.top;
        left = oldStyle.left;
    }
    wrs.top = top + "px";
    wrs.left = left + "px";
    wrs.position = oldStyle.position != "relative" && oldStyle.position != "absolute" ? "relative" : oldStyle.position;
    wrs.height = oldStyle.sizes.hb + "px";
    wrs.width = oldStyle.sizes.wb + "px";
    wrs.marginTop = oldStyle.margins.t;
    wrs.marginRight = oldStyle.margins.r;
    wrs.marginBottom = oldStyle.margins.b;
    wrs.marginLeft = oldStyle.margins.l;
    wrs.overflow = "hidden";
    if (jQuery.browser.msie) {
        wrs.styleFloat = oldFloat;
    } else {
        wrs.cssFloat = oldFloat;
    }
    if (jQuery.browser == "msie") {
        es.filter = "alpha(opacity=" + 99.9 + ")";
    }
    es.opacity = 0.999;
    e.parentNode.insertBefore(wr, e);
    wr.appendChild(e);
    es.marginTop = "0px";
    es.marginRight = "0px";
    es.marginBottom = "0px";
    es.marginLeft = "0px";
    es.position = "absolute";
    es.listStyle = "none";
    es.top = "0px";
    es.left = "0px";
    if (restoreStyle) {
        t.hide();
        es.visibility = oldVisibility;
    }
    return {
        oldStyle: oldStyle,
        wrapper: jQuery(wr)
    };
};
jQuery.fx.namedColors = {
    aqua: [0, 255, 255],
    azure: [240, 255, 255],
    beige: [245, 245, 220],
    black: [0, 0, 0],
    blue: [0, 0, 255],
    brown: [165, 42, 42],
    cyan: [0, 255, 255],
    darkblue: [0, 0, 139],
    darkcyan: [0, 139, 139],
    darkgrey: [169, 169, 169],
    darkgreen: [0, 100, 0],
    darkkhaki: [189, 183, 107],
    darkmagenta: [139, 0, 139],
    darkolivegreen: [85, 107, 47],
    darkorange: [255, 140, 0],
    darkorchid: [153, 50, 204],
    darkred: [139, 0, 0],
    darksalmon: [233, 150, 122],
    darkviolet: [148, 0, 211],
    fuchsia: [255, 0, 255],
    gold: [255, 215, 0],
    green: [0, 128, 0],
    indigo: [75, 0, 130],
    khaki: [240, 230, 140],
    lightblue: [173, 216, 230],
    lightcyan: [224, 255, 255],
    lightgreen: [144, 238, 144],
    lightgrey: [211, 211, 211],
    lightpink: [255, 182, 193],
    lightyellow: [255, 255, 224],
    lime: [0, 255, 0],
    magenta: [255, 0, 255],
    maroon: [128, 0, 0],
    navy: [0, 0, 128],
    olive: [128, 128, 0],
    orange: [255, 165, 0],
    pink: [255, 192, 203],
    purple: [128, 0, 128],
    red: [255, 0, 0],
    silver: [192, 192, 192],
    white: [255, 255, 255],
    yellow: [255, 255, 0]
};
jQuery.fx.parseColor = function (color, notColor) {
    if (jQuery.fx.namedColors[color]) {
        return {
            r: jQuery.fx.namedColors[color][0],
            g: jQuery.fx.namedColors[color][1],
            b: jQuery.fx.namedColors[color][2]
        };
    } else if ((result = /^rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)$/.exec(color))) {
        return {
            r: parseInt(result[1]),
            g: parseInt(result[2]),
            b: parseInt(result[3])
        };
    } else if ((result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)$/.exec(color))) {
        return {
            r: parseFloat(result[1]) * 2.55,
            g: parseFloat(result[2]) * 2.55,
            b: parseFloat(result[3]) * 2.55
        };
    } else if ((result = /^#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/.exec(color))) {
        return {
            r: parseInt("0x" + result[1] + result[1]),
            g: parseInt("0x" + result[2] + result[2]),
            b: parseInt("0x" + result[3] + result[3])
        };
    } else if ((result = /^#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/.exec(color))) {
        return {
            r: parseInt("0x" + result[1]),
            g: parseInt("0x" + result[2]),
            b: parseInt("0x" + result[3])
        };
    } else {
        return notColor == true ? false : {
            r: 255,
            g: 255,
            b: 255
        };
    }
};
jQuery.fx.cssProps = {
    borderBottomWidth: 1,
    borderLeftWidth: 1,
    borderRightWidth: 1,
    borderTopWidth: 1,
    bottom: 1,
    fontSize: 1,
    height: 1,
    left: 1,
    letterSpacing: 1,
    lineHeight: 1,
    marginBottom: 1,
    marginLeft: 1,
    marginRight: 1,
    marginTop: 1,
    maxHeight: 1,
    maxWidth: 1,
    minHeight: 1,
    minWidth: 1,
    opacity: 1,
    outlineOffset: 1,
    outlineWidth: 1,
    paddingBottom: 1,
    paddingLeft: 1,
    paddingRight: 1,
    paddingTop: 1,
    right: 1,
    textIndent: 1,
    top: 1,
    width: 1,
    zIndex: 1
};
jQuery.fx.colorCssProps = {
    backgroundColor: 1,
    borderBottomColor: 1,
    borderLeftColor: 1,
    borderRightColor: 1,
    borderTopColor: 1,
    color: 1,
    outlineColor: 1
};
jQuery.fx.cssSides = ["Top", "Right", "Bottom", "Left"];
jQuery.fx.cssSidesEnd = {
    borderWidth: ["border", "Width"],
    borderColor: ["border", "Color"],
    margin: ["margin", ""],
    padding: ["padding", ""]
};
jQuery.fn.extend({
    pause: function (speed, callback) {
        return this.queue(function () {
            var opt = jQuery.speed(speed, callback);
            var e = new(jQuery.pause)(this, opt);
        });
    },
    stop: function (step) {
        return this.each(function () {
            if (this.animationHandler) {
                jQuery.stopAnim(this, step);
            }
        });
    },
    stopAll: function (step) {
        return this.each(function () {
            if (this.animationHandler) {
                jQuery.stopAnim(this, step);
            }
            if (this.queue && this.queue.fx) {
                this.queue.fx = [];
            }
        });
    }
});
jQuery.extend({
    pause: function (elem, options) {
        var z = this,
            values;
        z.step = function () {
            if (jQuery.isFunction(options.complete)) {
                options.complete.apply(elem);
            }
        };
        z.timer = setInterval(function () {
            z.step();
        }, options.duration);
        elem.animationHandler = z;
    },
    easing: {
        linear: function (p, n, firstNum, delta, duration) {
            return (-Math.cos(p * Math.PI) / 2 + 0.5) * delta + firstNum;
        }
    },
    fxe: function (elem, options, prop) {
        var z = this,
            values;
        var y = elem.style;
        var oldOverflow = jQuery.css(elem, "overflow");
        var oldDisplay = jQuery.css(elem, "display");
        var props = {};
        z.startTime = (new Date).getTime();
        options.easing = options.easing && jQuery.easing[options.easing] ? options.easing : "linear";
        z.getValues = function (tp, vp) {
            if (jQuery.fx.cssProps[tp]) {
                if (vp == "show" || vp == "hide" || vp == "toggle") {
                    if (!elem.orig) {
                        elem.orig = {};
                    }
                    var r = parseFloat(jQuery.curCSS(elem, tp));
                    elem.orig[tp] = r && r > -10000 ? r : parseFloat(jQuery.css(elem, tp)) || 0;
                    vp = vp == "toggle" ? oldDisplay == "none" ? "show" : "hide" : vp;
                    options[vp] = true;
                    props[tp] = vp == "show" ? [0, elem.orig[tp]] : [elem.orig[tp], 0];
                    if (tp != "opacity") {
                        y[tp] = props[tp][0] + (tp != "zIndex" && tp != "fontWeight" ? "px" : "");
                    } else {
                        jQuery.attr(y, "opacity", props[tp][0]);
                    }
                } else {
                    props[tp] = [parseFloat(jQuery.curCSS(elem, tp)), parseFloat(vp) || 0];
                }
            } else if (jQuery.fx.colorCssProps[tp]) {
                props[tp] = [jQuery.fx.parseColor(jQuery.curCSS(elem, tp)), jQuery.fx.parseColor(vp)];
            } else if (/^margin$|padding$|border$|borderColor$|borderWidth$/i.test(tp)) {
                var m = vp.replace(/\s+/g, " ").replace(/rgb\s*\(\s*/g, "rgb(").replace(/\s*,\s*/g, ",").replace(/\s*\)/g, ")").match(/([^\s]+)/g);
                switch (tp) {
                case "margin":
                case "padding":
                case "borderWidth":
                case "borderColor":
                    m[3] = m[3] || m[1] || m[0];
                    m[2] = m[2] || m[0];
                    m[1] = m[1] || m[0];
                    for (var i = 0; i < jQuery.fx.cssSides.length; i++) {
                        var nmp = jQuery.fx.cssSidesEnd[tp][0] + jQuery.fx.cssSides[i] + jQuery.fx.cssSidesEnd[tp][1];
                        props[nmp] = tp == "borderColor" ? [jQuery.fx.parseColor(jQuery.curCSS(elem, nmp)), jQuery.fx.parseColor(m[i])] : [parseFloat(jQuery.curCSS(elem, nmp)), parseFloat(m[i])];
                    }
                    break;
                case "border":
                    for (var i = 0; i < m.length; i++) {
                        var floatVal = parseFloat(m[i]);
                        var sideEnd = !isNaN(floatVal) ? "Width" : !/transparent|none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset/i.test(m[i]) ? "Color" : false;
                        if (sideEnd) {
                            for (var j = 0; j < jQuery.fx.cssSides.length; j++) {
                                nmp = "border" + jQuery.fx.cssSides[j] + sideEnd;
                                props[nmp] = sideEnd == "Color" ? [jQuery.fx.parseColor(jQuery.curCSS(elem, nmp)), jQuery.fx.parseColor(m[i])] : [parseFloat(jQuery.curCSS(elem, nmp)), floatVal];
                            }
                        } else {
                            y.borderStyle = m[i];
                        }
                    }
                    break;
                default:
                    ;
                }
            } else {
                y[tp] = vp;
            }
            return false;
        };
        for (p in prop) {
            if (p == "style") {
                var newStyles = jQuery.parseStyle(prop[p]);
                for (np in newStyles) {
                    this.getValues(np, newStyles[np]);
                }
            } else if (p == "className") {
                if (document.styleSheets) {
                    for (var i = 0; i < document.styleSheets.length; i++) {
                        var cssRules = document.styleSheets[i].cssRules || document.styleSheets[i].rules || null;
                        if (cssRules) {
                            for (var j = 0; j < cssRules.length; j++) {
                                if (cssRules[j].selectorText == "." + prop[p]) {
                                    var rule = new RegExp("." + prop[p] + " {");
                                    var styles = cssRules[j].style.cssText;
                                    var newStyles = jQuery.parseStyle(styles.replace(rule, "").replace(/}/g, ""));
                                    for (np in newStyles) {
                                        this.getValues(np, newStyles[np]);
                                    }
                                }
                            }
                        }
                    }
                }
            } else {
                this.getValues(p, prop[p]);
            }
        }
        y.display = oldDisplay == "none" ? "block" : oldDisplay;
        y.overflow = "hidden";
        z.step = function () {
            var t = (new Date).getTime();
            if (t > options.duration + z.startTime) {
                clearInterval(z.timer);
                z.timer = null;
                for (p in props) {
                    if (p == "opacity") {
                        jQuery.attr(y, "opacity", props[p][1]);
                    } else if (typeof props[p][1] == "object") {
                        y[p] = "rgb(" + props[p][1].r + "," + props[p][1].g + "," + props[p][1].b + ")";
                    } else {
                        y[p] = props[p][1] + (p != "zIndex" && p != "fontWeight" ? "px" : "");
                    }
                }
                if (options.hide || options.show) {
                    for (var p in elem.orig) {
                        if (p == "opacity") {
                            jQuery.attr(y, p, elem.orig[p]);
                        } else {
                            y[p] = "";
                        }
                    }
                }
                y.display = options.hide ? "none" : oldDisplay != "none" ? oldDisplay : "block";
                y.overflow = oldOverflow;
                elem.animationHandler = null;
                if (jQuery.isFunction(options.complete)) {
                    options.complete.apply(elem);
                }
            } else {
                var n = t - this.startTime;
                var pr = n / options.duration;
                for (p in props) {
                    if (typeof props[p][1] == "object") {
                        y[p] = "rgb(" + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].r, props[p][1].r - props[p][0].r, options.duration)) + "," + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].g, props[p][1].g - props[p][0].g, options.duration)) + "," + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].b, props[p][1].b - props[p][0].b, options.duration)) + ")";
                    } else {
                        var pValue = jQuery.easing[options.easing](pr, n, props[p][0], props[p][1] - props[p][0], options.duration);
                        if (p == "opacity") {
                            jQuery.attr(y, "opacity", pValue);
                        } else {
                            y[p] = pValue + (p != "zIndex" && p != "fontWeight" ? "px" : "");
                        }
                    }
                }
            }
        };
        z.timer = setInterval(function () {
            z.step();
        }, 13);
        elem.animationHandler = z;
    },
    stopAnim: function (elem, step) {
        if (step) {
            elem.animationHandler.startTime -= 100000000;
        } else {
            window.clearInterval(elem.animationHandler.timer);
            elem.animationHandler = null;
            jQuery.dequeue(elem, "fx");
        }
    }
});
jQuery.parseStyle = function (styles) {
    var newStyles = {};
    if (typeof styles == "string") {
        styles = styles.toLowerCase().split(";");
        for (var i = 0; i < styles.length; i++) {
            rule = styles[i].split(":");
            if (rule.length == 2) {
                newStyles[jQuery.trim(rule[0].replace(/\-(\w)/g, function (m, c) {
                    return c.toUpperCase();
                }))] = jQuery.trim(rule[1]);
            }
        }
    }
    return newStyles;
};
jQuery.fn.extend({
    BlindUp: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.BlindDirection)(this, speed, callback, "up", easing);
        });
    },
    BlindDown: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.BlindDirection)(this, speed, callback, "down", easing);
        });
    },
    BlindToggleVertically: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.BlindDirection)(this, speed, callback, "togglever", easing);
        });
    },
    BlindLeft: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.BlindDirection)(this, speed, callback, "left", easing);
        });
    },
    BlindRight: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.BlindDirection)(this, speed, callback, "right", easing);
        });
    },
    BlindToggleHorizontally: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.BlindDirection)(this, speed, callback, "togglehor", easing);
        });
    }
});
jQuery.fx.BlindDirection = function (e, speed, callback, direction, easing) {
    if (!jQuery.fxCheckTag(e)) {
        jQuery.dequeue(e, "interfaceFX");
        return false;
    }
    var z = this;
    z.el = jQuery(e);
    z.size = jQuery.iUtil.getSize(e);
    z.easing = typeof callback == "string" ? callback : easing || null;
    if (!e.ifxFirstDisplay) {
        e.ifxFirstDisplay = z.el.css("display");
    }
    if (direction == "togglever") {
        direction = z.el.css("display") == "none" ? "down" : "up";
    } else if (direction == "togglehor") {
        direction = z.el.css("display") == "none" ? "right" : "left";
    }
    z.el.show();
    z.speed = speed;
    z.callback = typeof callback == "function" ? callback : null;
    z.fx = jQuery.fx.buildWrapper(e);
    z.direction = direction;
    z.complete = function () {
        if (z.callback && z.callback.constructor == Function) {
            z.callback.apply(z.el.get(0));
        }
        if (z.direction == "down" || z.direction == "right") {
            z.el.css("display", z.el.get(0).ifxFirstDisplay == "none" ? "block" : z.el.get(0).ifxFirstDisplay);
        } else {
            z.el.hide();
        }
        jQuery.fx.destroyWrapper(z.fx.wrapper.get(0), z.fx.oldStyle);
        jQuery.dequeue(z.el.get(0), "interfaceFX");
    };
    switch (z.direction) {
    case "up":
        fxh = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing, z.complete), "height");
        fxh.custom(z.fx.oldStyle.sizes.hb, 0);
        break;
    case "down":
        z.fx.wrapper.css("height", "1px");
        z.el.show();
        fxh = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing, z.complete), "height");
        fxh.custom(0, z.fx.oldStyle.sizes.hb);
        break;
    case "left":
        fxh = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing, z.complete), "width");
        fxh.custom(z.fx.oldStyle.sizes.wb, 0);
        break;
    case "right":
        z.fx.wrapper.css("width", "1px");
        z.el.show();
        fxh = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing, z.complete), "width");
        fxh.custom(0, z.fx.oldStyle.sizes.wb);
        break;
    default:
        ;
    }
};
jQuery.fn.Bounce = function (hight, callback) {
    return this.queue("interfaceFX", function () {
        if (!jQuery.fxCheckTag(this)) {
            jQuery.dequeue(this, "interfaceFX");
            return false;
        }
        var e = new(jQuery.fx.iBounce)(this, hight, callback);
        e.bounce();
    });
};
jQuery.fx.iBounce = function (e, hight, callback) {
    var z = this;
    z.el = jQuery(e);
    z.el.show();
    z.callback = callback;
    z.hight = parseInt(hight) || 40;
    z.oldStyle = {};
    z.oldStyle.position = z.el.css("position");
    z.oldStyle.top = parseInt(z.el.css("top")) || 0;
    z.oldStyle.left = parseInt(z.el.css("left")) || 0;
    if (z.oldStyle.position != "relative" && z.oldStyle.position != "absolute") {
        z.el.css("position", "relative");
    }
    z.times = 5;
    z.cnt = 1;
    z.bounce = function () {
        z.cnt++;
        z.e = new(jQuery.fx)(z.el.get(0), {
            duration: 120,
            complete: function () {
                z.e = new(jQuery.fx)(z.el.get(0), {
                    duration: 80,
                    complete: function () {
                        z.hight = parseInt(z.hight / 2);
                        if (z.cnt <= z.times) {
                            z.bounce();
                        } else {
                            z.el.css("position", z.oldStyle.position).css("top", z.oldStyle.top + "px").css("left", z.oldStyle.left + "px");
                            jQuery.dequeue(z.el.get(0), "interfaceFX");
                            if (z.callback && z.callback.constructor == Function) {
                                z.callback.apply(z.el.get(0));
                            }
                        }
                    }
                }, "top");
                z.e.custom(z.oldStyle.top - z.hight, z.oldStyle.top);
            }
        }, "top");
        z.e.custom(z.oldStyle.top, z.oldStyle.top - z.hight);
    };
};
jQuery.fn.extend({
    DropOutDown: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "down", "out", easing);
        });
    },
    DropInDown: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "down", "in", easing);
        });
    },
    DropToggleDown: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "down", "toggle", easing);
        });
    },
    DropOutUp: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "up", "out", easing);
        });
    },
    DropInUp: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "up", "in", easing);
        });
    },
    DropToggleUp: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "up", "toggle", easing);
        });
    },
    DropOutLeft: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "left", "out", easing);
        });
    },
    DropInLeft: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "left", "in", easing);
        });
    },
    DropToggleLeft: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "left", "toggle", easing);
        });
    },
    DropOutRight: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "right", "out", easing);
        });
    },
    DropInRight: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "right", "in", easing);
        });
    },
    DropToggleRight: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DropOutDirectiont)(this, speed, callback, "right", "toggle", easing);
        });
    }
});
jQuery.fx.DropOutDirectiont = function (e, speed, callback, direction, type, easing) {
    if (!jQuery.fxCheckTag(e)) {
        jQuery.dequeue(e, "interfaceFX");
        return false;
    }
    var z = this;
    z.el = jQuery(e);
    z.easing = typeof callback == "string" ? callback : easing || null;
    z.oldStyle = {};
    z.oldStyle.position = z.el.css("position");
    z.oldStyle.top = z.el.css("top");
    z.oldStyle.left = z.el.css("left");
    if (!e.ifxFirstDisplay) {
        e.ifxFirstDisplay = z.el.css("display");
    }
    if (type == "toggle") {
        type = z.el.css("display") == "none" ? "in" : "out";
    }
    z.el.show();
    if (z.oldStyle.position != "relative" && z.oldStyle.position != "absolute") {
        z.el.css("position", "relative");
    }
    z.type = type;
    callback = typeof callback == "function" ? callback : null;
    directionIncrement = 1;
    switch (direction) {
    case "up":
        z.e = new(jQuery.fx)(z.el.get(0), jQuery.speed(speed - 15, z.easing, callback), "top");
        z.point = parseFloat(z.oldStyle.top) || 0;
        z.unit = z.topUnit;
        directionIncrement = -1;
        break;
    case "down":
        z.e = new(jQuery.fx)(z.el.get(0), jQuery.speed(speed - 15, z.easing, callback), "top");
        z.point = parseFloat(z.oldStyle.top) || 0;
        z.unit = z.topUnit;
        break;
    case "right":
        z.e = new(jQuery.fx)(z.el.get(0), jQuery.speed(speed - 15, z.easing, callback), "left");
        z.point = parseFloat(z.oldStyle.left) || 0;
        z.unit = z.leftUnit;
        break;
    case "left":
        z.e = new(jQuery.fx)(z.el.get(0), jQuery.speed(speed - 15, z.easing, callback), "left");
        z.point = parseFloat(z.oldStyle.left) || 0;
        z.unit = z.leftUnit;
        directionIncrement = -1;
        break;
    default:
        ;
    }
    z.e2 = new(jQuery.fx)(z.el.get(0), jQuery.speed(speed, z.easing, function () {
        z.el.css(z.oldStyle);
        if (z.type == "out") {
            z.el.css("display", "none");
        } else {
            z.el.css("display", z.el.get(0).ifxFirstDisplay == "none" ? "block" : z.el.get(0).ifxFirstDisplay);
        }
        jQuery.dequeue(z.el.get(0), "interfaceFX");
    }), "opacity");
    if (type == "in") {
        z.e.custom(z.point + 100 * directionIncrement, z.point);
        z.e2.custom(0, 1);
    } else {
        z.e.custom(z.point, z.point + 100 * directionIncrement);
        z.e2.custom(1, 0);
    }
};
jQuery.fn.extend({
    Fold: function (speed, height, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DoFold)(this, speed, height, callback, "fold", easing);
        });
    },
    UnFold: function (speed, height, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DoFold)(this, speed, height, callback, "unfold", easing);
        });
    },
    FoldToggle: function (speed, height, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.DoFold)(this, speed, height, callback, "toggle", easing);
        });
    }
});
jQuery.fx.DoFold = function (e, speed, height, callback, type, easing) {
    if (!jQuery.fxCheckTag(e)) {
        jQuery.dequeue(e, "interfaceFX");
        return false;
    }
    var z = this;
    z.el = jQuery(e);
    z.easing = typeof callback == "string" ? callback : easing || null;
    z.callback = typeof callback == "function" ? callback : null;
    if (type == "toggle") {
        type = z.el.css("display") == "none" ? "unfold" : "fold";
    }
    z.speed = speed;
    z.height = height && height.constructor == Number ? height : 20;
    z.fx = jQuery.fx.buildWrapper(e);
    z.type = type;
    z.complete = function () {
        if (z.callback && z.callback.constructor == Function) {
            z.callback.apply(z.el.get(0));
        }
        if (z.type == "unfold") {
            z.el.show();
        } else {
            z.el.hide();
        }
        jQuery.fx.destroyWrapper(z.fx.wrapper.get(0), z.fx.oldStyle);
        jQuery.dequeue(z.el.get(0), "interfaceFX");
    };
    if (z.type == "unfold") {
        z.el.show();
        z.fx.wrapper.css("height", z.height + "px").css("width", "1px");
        z.ef = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing, function () {
            z.ef = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing, z.complete), "height");
            z.ef.custom(z.height, z.fx.oldStyle.sizes.hb);
        }), "width");
        z.ef.custom(0, z.fx.oldStyle.sizes.wb);
    } else {
        z.ef = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing, function () {
            z.ef = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing, z.complete), "width");
            z.ef.custom(z.fx.oldStyle.sizes.wb, 0);
        }), "height");
        z.ef.custom(z.fx.oldStyle.sizes.hb, z.height);
    }
};
jQuery.fn.Highlight = function (speed, color, callback, easing) {
    return this.queue("interfaceColorFX", function () {
        this.oldStyleAttr = jQuery(this).attr("style") || "";
        easing = typeof callback == "string" ? callback : easing || null;
        callback = typeof callback == "function" ? callback : null;
        var oldColor = jQuery(this).css("backgroundColor");
        var parentEl = this.parentNode;
        while (oldColor == "transparent" && parentEl) {
            oldColor = jQuery(parentEl).css("backgroundColor");
            parentEl = parentEl.parentNode;
        }
        jQuery(this).css("backgroundColor", color);
        if (typeof this.oldStyleAttr == "object") {
            this.oldStyleAttr = this.oldStyleAttr.cssText;
        }
        jQuery(this).animate({
            backgroundColor: oldColor
        }, speed, easing, function () {
            jQuery.dequeue(this, "interfaceColorFX");
            if (typeof jQuery(this).attr("style") == "object") {
                jQuery(this).attr("style").cssText = "";
                jQuery(this).attr("style").cssText = this.oldStyleAttr;
            } else {
                jQuery(this).attr("style", this.oldStyleAttr);
            }
            if (callback) {
                callback.apply(this);
            }
        });
    });
};
jQuery.fn.extend({
    CloseVertically: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.OpenClose)(this, speed, callback, "vertically", "close", easing);
        });
    },
    CloseHorizontally: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.OpenClose)(this, speed, callback, "horizontally", "close", easing);
        });
    },
    SwitchHorizontally: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            if (jQuery.css(this, "display") == "none") {
                new(jQuery.fx.OpenClose)(this, speed, callback, "horizontally", "open", easing);
            } else {
                new(jQuery.fx.OpenClose)(this, speed, callback, "horizontally", "close", easing);
            }
        });
    },
    SwitchVertically: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            if (jQuery.css(this, "display") == "none") {
                new(jQuery.fx.OpenClose)(this, speed, callback, "vertically", "open", easing);
            } else {
                new(jQuery.fx.OpenClose)(this, speed, callback, "vertically", "close", easing);
            }
        });
    },
    OpenVertically: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.OpenClose)(this, speed, callback, "vertically", "open", easing);
        });
    },
    OpenHorizontally: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.OpenClose)(this, speed, callback, "horizontally", "open", easing);
        });
    }
});
jQuery.fx.OpenClose = function (e, speed, callback, direction, type, easing) {
    if (!jQuery.fxCheckTag(e)) {
        jQuery.dequeue(e, "interfaceFX");
        return false;
    }
    var z = this;
    var restoreStyle = false;
    z.el = jQuery(e);
    z.easing = typeof callback == "string" ? callback : easing || null;
    z.callback = typeof callback == "function" ? callback : null;
    z.type = type;
    z.speed = speed;
    z.oldP = jQuery.iUtil.getSize(e);
    z.oldStyle = {};
    z.oldStyle.position = z.el.css("position");
    z.oldStyle.display = z.el.css("display");
    if (z.oldStyle.display == "none") {
        oldVisibility = z.el.css("visibility");
        z.el.show();
        restoreStyle = true;
    }
    z.oldStyle.top = z.el.css("top");
    z.oldStyle.left = z.el.css("left");
    if (restoreStyle) {
        z.el.hide();
        z.el.css("visibility", oldVisibility);
    }
    z.oldStyle.width = z.oldP.w + "px";
    z.oldStyle.height = z.oldP.h + "px";
    z.oldStyle.overflow = z.el.css("overflow");
    z.oldP.top = parseInt(z.oldStyle.top) || 0;
    z.oldP.left = parseInt(z.oldStyle.left) || 0;
    if (z.oldStyle.position != "relative" && z.oldStyle.position != "absolute") {
        z.el.css("position", "relative");
    }
    z.el.css("overflow", "hidden").css("height", type == "open" && direction == "vertically" ? 1 : z.oldP.h + "px").css("width", type == "open" && direction == "horizontally" ? 1 : z.oldP.w + "px");
    z.complete = function () {
        z.el.css(z.oldStyle);
        if (z.type == "close") {
            z.el.hide();
        } else {
            z.el.show();
        }
        jQuery.dequeue(z.el.get(0), "interfaceFX");
    };
    switch (direction) {
    case "vertically":
        z.eh = new(jQuery.fx)(z.el.get(0), jQuery.speed(speed - 15, z.easing, callback), "height");
        z.et = new(jQuery.fx)(z.el.get(0), jQuery.speed(z.speed, z.easing, z.complete), "top");
        if (z.type == "close") {
            z.eh.custom(z.oldP.h, 0);
            z.et.custom(z.oldP.top, z.oldP.top + z.oldP.h / 2);
        } else {
            z.eh.custom(0, z.oldP.h);
            z.et.custom(z.oldP.top + z.oldP.h / 2, z.oldP.top);
        }
        break;
    case "horizontally":
        z.eh = new(jQuery.fx)(z.el.get(0), jQuery.speed(speed - 15, z.easing, callback), "width");
        z.et = new(jQuery.fx)(z.el.get(0), jQuery.speed(z.speed, z.easing, z.complete), "left");
        if (z.type == "close") {
            z.eh.custom(z.oldP.w, 0);
            z.et.custom(z.oldP.left, z.oldP.left + z.oldP.w / 2);
        } else {
            z.eh.custom(0, z.oldP.w);
            z.et.custom(z.oldP.left + z.oldP.w / 2, z.oldP.left);
        }
        break;
    default:
        ;
    }
};
jQuery.fn.Pulsate = function (speed, times, callback) {
    return this.queue("interfaceFX", function () {
        if (!jQuery.fxCheckTag(this)) {
            jQuery.dequeue(this, "interfaceFX");
            return false;
        }
        var fx = new(jQuery.fx.Pulsate)(this, speed, times, callback);
        fx.pulse();
    });
};
jQuery.fx.Pulsate = function (el, speed, times, callback) {
    var z = this;
    z.times = times;
    z.cnt = 1;
    z.el = el;
    z.speed = speed;
    z.callback = callback;
    jQuery(z.el).show();
    z.pulse = function () {
        z.cnt++;
        z.e = new(jQuery.fx)(z.el, jQuery.speed(z.speed, function () {
            z.ef = new(jQuery.fx)(z.el, jQuery.speed(z.speed, function () {
                if (z.cnt <= z.times) {
                    z.pulse();
                } else {
                    jQuery.dequeue(z.el, "interfaceFX");
                    if (z.callback && z.callback.constructor == Function) {
                        z.callback.apply(z.el);
                    }
                }
            }), "opacity");
            z.ef.custom(0, 1);
        }), "opacity");
        z.e.custom(1, 0);
    };
};
jQuery.fn.extend({
    Grow: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.Scale)(this, speed, 1, 100, true, callback, "grow", easing);
        });
    },
    Shrink: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.Scale)(this, speed, 100, 1, true, callback, "shrink", easing);
        });
    },
    Puff: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            var easing = easing || "easeout";
            new(jQuery.fx.Scale)(this, speed, 100, 150, true, callback, "puff", easing);
        });
    },
    Scale: function (speed, from, to, restore, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.Scale)(this, speed, from, to, restore, callback, "Scale", easing);
        });
    }
});
jQuery.fx.Scale = function (e, speed, from, to, restore, callback, type, easing) {
    if (!jQuery.fxCheckTag(e)) {
        jQuery.dequeue(e, "interfaceFX");
        return false;
    }
    var z = this;
    z.el = jQuery(e);
    z.from = parseInt(from) || 100;
    z.to = parseInt(to) || 100;
    z.easing = typeof callback == "string" ? callback : easing || null;
    z.callback = typeof callback == "function" ? callback : null;
    z.duration = jQuery.speed(speed).duration;
    z.restore = restore || null;
    z.oldP = jQuery.iUtil.getSize(e);
    z.oldStyle = {
        width: z.el.css("width"),
        height: z.el.css("height"),
        fontSize: z.el.css("fontSize") || "100%",
        position: z.el.css("position"),
        display: z.el.css("display"),
        top: z.el.css("top"),
        left: z.el.css("left"),
        overflow: z.el.css("overflow"),
        borderTopWidth: z.el.css("borderTopWidth"),
        borderRightWidth: z.el.css("borderRightWidth"),
        borderBottomWidth: z.el.css("borderBottomWidth"),
        borderLeftWidth: z.el.css("borderLeftWidth"),
        paddingTop: z.el.css("paddingTop"),
        paddingRight: z.el.css("paddingRight"),
        paddingBottom: z.el.css("paddingBottom"),
        paddingLeft: z.el.css("paddingLeft")
    };
    z.width = parseInt(z.oldStyle.width) || e.offsetWidth || 0;
    z.height = parseInt(z.oldStyle.height) || e.offsetHeight || 0;
    z.top = parseInt(z.oldStyle.top) || 0;
    z.left = parseInt(z.oldStyle.left) || 0;
    sizes = ["em", "px", "pt", "%"];
    for (i in sizes) {
        if (z.oldStyle.fontSize.indexOf(sizes[i]) > 0) {
            z.fontUnit = sizes[i];
            z.fontSize = parseFloat(z.oldStyle.fontSize);
        }
        if (z.oldStyle.borderTopWidth.indexOf(sizes[i]) > 0) {
            z.borderTopUnit = sizes[i];
            z.borderTopSize = parseFloat(z.oldStyle.borderTopWidth) || 0;
        }
        if (z.oldStyle.borderRightWidth.indexOf(sizes[i]) > 0) {
            z.borderRightUnit = sizes[i];
            z.borderRightSize = parseFloat(z.oldStyle.borderRightWidth) || 0;
        }
        if (z.oldStyle.borderBottomWidth.indexOf(sizes[i]) > 0) {
            z.borderBottomUnit = sizes[i];
            z.borderBottomSize = parseFloat(z.oldStyle.borderBottomWidth) || 0;
        }
        if (z.oldStyle.borderLeftWidth.indexOf(sizes[i]) > 0) {
            z.borderLeftUnit = sizes[i];
            z.borderLeftSize = parseFloat(z.oldStyle.borderLeftWidth) || 0;
        }
        if (z.oldStyle.paddingTop.indexOf(sizes[i]) > 0) {
            z.paddingTopUnit = sizes[i];
            z.paddingTopSize = parseFloat(z.oldStyle.paddingTop) || 0;
        }
        if (z.oldStyle.paddingRight.indexOf(sizes[i]) > 0) {
            z.paddingRightUnit = sizes[i];
            z.paddingRightSize = parseFloat(z.oldStyle.paddingRight) || 0;
        }
        if (z.oldStyle.paddingBottom.indexOf(sizes[i]) > 0) {
            z.paddingBottomUnit = sizes[i];
            z.paddingBottomSize = parseFloat(z.oldStyle.paddingBottom) || 0;
        }
        if (z.oldStyle.paddingLeft.indexOf(sizes[i]) > 0) {
            z.paddingLeftUnit = sizes[i];
            z.paddingLeftSize = parseFloat(z.oldStyle.paddingLeft) || 0;
        }
    }
    if (z.oldStyle.position != "relative" && z.oldStyle.position != "absolute") {
        z.el.css("position", "relative");
    }
    z.el.css("overflow", "hidden");
    z.type = type;
    switch (z.type) {
    case "grow":
        z.startTop = z.top + z.oldP.h / 2;
        z.endTop = z.top;
        z.startLeft = z.left + z.oldP.w / 2;
        z.endLeft = z.left;
        break;
    case "shrink":
        z.endTop = z.top + z.oldP.h / 2;
        z.startTop = z.top;
        z.endLeft = z.left + z.oldP.w / 2;
        z.startLeft = z.left;
        break;
    case "puff":
        z.endTop = z.top - z.oldP.h / 4;
        z.startTop = z.top;
        z.endLeft = z.left - z.oldP.w / 4;
        z.startLeft = z.left;
        break;
    default:
        ;
    }
    z.firstStep = false;
    z.t = (new Date).getTime();
    z.clear = function () {
        clearInterval(z.timer);
        z.timer = null;
    };
    z.step = function () {
        if (z.firstStep == false) {
            z.el.show();
            z.firstStep = true;
        }
        var t = (new Date).getTime();
        var n = t - z.t;
        var p = n / z.duration;
        if (t >= z.duration + z.t) {
            setTimeout(function () {
                o = 1;
                if (z.type) {
                    t = z.endTop;
                    l = z.endLeft;
                    if (z.type == "puff") {
                        o = 0;
                    }
                }
                z.zoom(z.to, l, t, true, o);
            }, 13);
            z.clear();
        } else {
            o = 1;
            if (!jQuery.easing || !jQuery.easing[z.easing]) {
                s = (-Math.cos(p * Math.PI) / 2 + 0.5) * (z.to - z.from) + z.from;
            } else {
                s = jQuery.easing[z.easing](p, n, z.from, z.to - z.from, z.duration);
            }
            if (z.type) {
                if (!jQuery.easing || !jQuery.easing[z.easing]) {
                    t = (-Math.cos(p * Math.PI) / 2 + 0.5) * (z.endTop - z.startTop) + z.startTop;
                    l = (-Math.cos(p * Math.PI) / 2 + 0.5) * (z.endLeft - z.startLeft) + z.startLeft;
                    if (z.type == "puff") {
                        o = (-Math.cos(p * Math.PI) / 2 + 0.5) * -0.9999 + 0.9999;
                    }
                } else {
                    t = jQuery.easing[z.easing](p, n, z.startTop, z.endTop - z.startTop, z.duration);
                    l = jQuery.easing[z.easing](p, n, z.startLeft, z.endLeft - z.startLeft, z.duration);
                    if (z.type == "puff") {
                        o = jQuery.easing[z.easing](p, n, 0.9999, -0.9999, z.duration);
                    }
                }
            }
            z.zoom(s, l, t, false, o);
        }
    };
    z.timer = setInterval(function () {
        z.step();
    }, 13);
    z.zoom = function (percent, left, top, finish, opacity) {
        z.el.css("height", z.height * percent / 100 + "px").css("width", z.width * percent / 100 + "px").css("left", left + "px").css("top", top + "px").css("fontSize", z.fontSize * percent / 100 + z.fontUnit);
        if (z.borderTopSize) {
            z.el.css("borderTopWidth", z.borderTopSize * percent / 100 + z.borderTopUnit);
        }
        if (z.borderRightSize) {
            z.el.css("borderRightWidth", z.borderRightSize * percent / 100 + z.borderRightUnit);
        }
        if (z.borderBottomSize) {
            z.el.css("borderBottomWidth", z.borderBottomSize * percent / 100 + z.borderBottomUnit);
        }
        if (z.borderLeftSize) {
            z.el.css("borderLeftWidth", z.borderLeftSize * percent / 100 + z.borderLeftUnit);
        }
        if (z.paddingTopSize) {
            z.el.css("paddingTop", z.paddingTopSize * percent / 100 + z.paddingTopUnit);
        }
        if (z.paddingRightSize) {
            z.el.css("paddingRight", z.paddingRightSize * percent / 100 + z.paddingRightUnit);
        }
        if (z.paddingBottomSize) {
            z.el.css("paddingBottom", z.paddingBottomSize * percent / 100 + z.paddingBottomUnit);
        }
        if (z.paddingLeftSize) {
            z.el.css("paddingLeft", z.paddingLeftSize * percent / 100 + z.paddingLeftUnit);
        }
        if (z.type == "puff") {
            if (window.ActiveXObject) {
                z.el.get(0).style.filter = "alpha(opacity=" + opacity * 100 + ")";
            }
            z.el.get(0).style.opacity = opacity;
        }
        if (finish) {
            if (z.restore) {
                z.el.css(z.oldStyle);
            }
            if (z.type == "shrink" || z.type == "puff") {
                z.el.css("display", "none");
                if (z.type == "puff") {
                    if (window.ActiveXObject) {
                        z.el.get(0).style.filter = "alpha(opacity=100)";
                    }
                    z.el.get(0).style.opacity = 1;
                }
            } else {
                z.el.css("display", "block");
            }
            if (z.callback) {
                z.callback.apply(z.el.get(0));
            }
            jQuery.dequeue(z.el.get(0), "interfaceFX");
        }
    };
};
jQuery.fn.extend({
    ScrollTo: function (speed, axis, easing) {
        o = jQuery.speed(speed);
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.ScrollTo)(this, o, axis, easing);
        });
    },
    ScrollToAnchors: function (speed, axis, easing) {
        return this.each(function () {
            jQuery("a[@href*=\"#\"]", this).click(function (e) {
                parts = this.href.split("#");
                jQuery("#" + parts[1]).ScrollTo(speed, axis, easing);
                return false;
            });
        });
    }
});
jQuery.fx.ScrollTo = function (e, o, axis, easing) {
    var z = this;
    z.o = o;
    z.e = e;
    z.axis = /vertical|horizontal/.test(axis) ? axis : false;
    z.easing = easing;
    p = jQuery.iUtil.getPosition(e);
    s = jQuery.iUtil.getScroll();
    z.clear = function () {
        clearInterval(z.timer);
        z.timer = null;
        jQuery.dequeue(z.e, "interfaceFX");
    };
    z.t = (new Date).getTime();
    s.h = s.h > s.ih ? s.h - s.ih : s.h;
    s.w = s.w > s.iw ? s.w - s.iw : s.w;
    z.endTop = p.y > s.h ? s.h : p.y;
    z.endLeft = p.x > s.w ? s.w : p.x;
    z.startTop = s.t;
    z.startLeft = s.l;
    z.step = function () {
        var t = (new Date).getTime();
        var n = t - z.t;
        var p = n / z.o.duration;
        if (t >= z.o.duration + z.t) {
            z.clear();
            setTimeout(function () {
                z.scroll(z.endTop, z.endLeft);
            }, 13);
        } else {
            if (!z.axis || z.axis == "vertical") {
                if (!jQuery.easing || !jQuery.easing[z.easing]) {
                    st = (-Math.cos(p * Math.PI) / 2 + 0.5) * (z.endTop - z.startTop) + z.startTop;
                } else {
                    st = jQuery.easing[z.easing](p, n, z.startTop, z.endTop - z.startTop, z.o.duration);
                }
            } else {
                st = z.startTop;
            }
            if (!z.axis || z.axis == "horizontal") {
                if (!jQuery.easing || !jQuery.easing[z.easing]) {
                    sl = (-Math.cos(p * Math.PI) / 2 + 0.5) * (z.endLeft - z.startLeft) + z.startLeft;
                } else {
                    sl = jQuery.easing[z.easing](p, n, z.startLeft, z.endLeft - z.startLeft, z.o.duration);
                }
            } else {
                sl = z.startLeft;
            }
            z.scroll(st, sl);
        }
    };
    z.scroll = function (t, l) {
        window.scrollTo(l, t);
    };
    z.timer = setInterval(function () {
        z.step();
    }, 13);
};
jQuery.fn.Shake = function (times, callback) {
    return this.queue("interfaceFX", function () {
        if (!jQuery.fxCheckTag(this)) {
            jQuery.dequeue(this, "interfaceFX");
            return false;
        }
        var e = new(jQuery.fx.Shake)(this, times, callback);
        e.shake();
    });
};
jQuery.fx.Shake = function (e, times, callback) {
    var z = this;
    z.el = jQuery(e);
    z.el.show();
    z.times = parseInt(times) || 3;
    z.callback = callback;
    z.cnt = 1;
    z.oldStyle = {};
    z.oldStyle.position = z.el.css("position");
    z.oldStyle.top = parseInt(z.el.css("top")) || 0;
    z.oldStyle.left = parseInt(z.el.css("left")) || 0;
    if (z.oldStyle.position != "relative" && z.oldStyle.position != "absolute") {
        z.el.css("position", "relative");
    }
    z.shake = function () {
        z.cnt++;
        z.e = new(jQuery.fx)(z.el.get(0), {
            duration: 60,
            complete: function () {
                z.e = new(jQuery.fx)(z.el.get(0), {
                    duration: 60,
                    complete: function () {
                        z.e = new(jQuery.fx)(e, {
                            duration: 60,
                            complete: function () {
                                if (z.cnt <= z.times) {
                                    z.shake();
                                } else {
                                    z.el.css("position", z.oldStyle.position).css("top", z.oldStyle.top + "px").css("left", z.oldStyle.left + "px");
                                    jQuery.dequeue(z.el.get(0), "interfaceFX");
                                    if (z.callback && z.callback.constructor == Function) {
                                        z.callback.apply(z.el.get(0));
                                    }
                                }
                            }
                        }, "left");
                        z.e.custom(z.oldStyle.left - 20, z.oldStyle.left);
                    }
                }, "left");
                z.e.custom(z.oldStyle.left + 20, z.oldStyle.left - 20);
            }
        }, "left");
        z.e.custom(z.oldStyle.left, z.oldStyle.left + 20);
    };
};
jQuery.fn.extend({
    SlideInUp: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "up", "in", easing);
        });
    },
    SlideOutUp: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "up", "out", easing);
        });
    },
    SlideToggleUp: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "up", "toggle", easing);
        });
    },
    SlideInDown: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "down", "in", easing);
        });
    },
    SlideOutDown: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "down", "out", easing);
        });
    },
    SlideToggleDown: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "down", "toggle", easing);
        });
    },
    SlideInLeft: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "left", "in", easing);
        });
    },
    SlideOutLeft: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "left", "out", easing);
        });
    },
    SlideToggleLeft: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "left", "toggle", easing);
        });
    },
    SlideInRight: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "right", "in", easing);
        });
    },
    SlideOutRight: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "right", "out", easing);
        });
    },
    SlideToggleRight: function (speed, callback, easing) {
        return this.queue("interfaceFX", function () {
            new(jQuery.fx.slide)(this, speed, callback, "right", "toggle", easing);
        });
    }
});
jQuery.fx.slide = function (e, speed, callback, direction, type, easing) {
    if (!jQuery.fxCheckTag(e)) {
        jQuery.dequeue(e, "interfaceFX");
        return false;
    }
    var z = this;
    z.el = jQuery(e);
    z.easing = typeof callback == "string" ? callback : easing || null;
    z.callback = typeof callback == "function" ? callback : null;
    if (type == "toggle") {
        type = z.el.css("display") == "none" ? "in" : "out";
    }
    if (!e.ifxFirstDisplay) {
        e.ifxFirstDisplay = z.el.css("display");
    }
    z.el.show();
    z.speed = speed;
    z.fx = jQuery.fx.buildWrapper(e);
    z.type = type;
    z.direction = direction;
    z.complete = function () {
        if (z.type == "out") {
            z.el.css("visibility", "hidden");
        }
        jQuery.fx.destroyWrapper(z.fx.wrapper.get(0), z.fx.oldStyle);
        if (z.type == "in") {
            z.el.css("display", z.el.get(0).ifxFirstDisplay == "none" ? "block" : z.el.get(0).ifxFirstDisplay);
        } else {
            z.el.css("display", "none");
            z.el.css("visibility", "visible");
        }
        if (z.callback && z.callback.constructor == Function) {
            z.callback.apply(z.el.get(0));
        }
        jQuery.dequeue(z.el.get(0), "interfaceFX");
    };
    switch (z.direction) {
    case "up":
        z.ef = new(jQuery.fx)(z.el.get(0), jQuery.speed(z.speed, z.easing, z.complete), "top");
        z.efx = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing), "height");
        if (z.type == "in") {
            z.ef.custom(-z.fx.oldStyle.sizes.hb, 0);
            z.efx.custom(0, z.fx.oldStyle.sizes.hb);
        } else {
            z.ef.custom(0, -z.fx.oldStyle.sizes.hb);
            z.efx.custom(z.fx.oldStyle.sizes.hb, 0);
        }
        break;
    case "down":
        z.ef = new(jQuery.fx)(z.el.get(0), jQuery.speed(z.speed, z.easing, z.complete), "top");
        if (z.type == "in") {
            z.ef.custom(z.fx.oldStyle.sizes.hb, 0);
        } else {
            z.ef.custom(0, z.fx.oldStyle.sizes.hb);
        }
        break;
    case "left":
        z.ef = new(jQuery.fx)(z.el.get(0), jQuery.speed(z.speed, z.easing, z.complete), "left");
        z.efx = new(jQuery.fx)(z.fx.wrapper.get(0), jQuery.speed(z.speed, z.easing), "width");
        if (z.type == "in") {
            z.ef.custom(-z.fx.oldStyle.sizes.wb, 0);
            z.efx.custom(0, z.fx.oldStyle.sizes.wb);
        } else {
            z.ef.custom(0, -z.fx.oldStyle.sizes.wb);
            z.efx.custom(z.fx.oldStyle.sizes.wb, 0);
        }
        break;
    case "right":
        z.ef = new(jQuery.fx)(z.el.get(0), jQuery.speed(z.speed, z.easing, z.complete), "left");
        if (z.type == "in") {
            z.ef.custom(z.fx.oldStyle.sizes.wb, 0);
        } else {
            z.ef.custom(0, z.fx.oldStyle.sizes.wb);
        }
        break;
    default:
        ;
    }
};
jQuery.transferHelper = null;
jQuery.fn.TransferTo = function (o) {
    return this.queue("interfaceFX", function () {
        new(jQuery.fx.itransferTo)(this, o);
    });
};
jQuery.fx.itransferTo = function (e, o) {
    if (jQuery.transferHelper == null) {
        jQuery("body", document).append("<div id=\"transferHelper\"></div>");
        jQuery.transferHelper = jQuery("#transferHelper");
    }
    jQuery.transferHelper.css("display", "block").css("position", "absolute");
    var z = this;
    z.el = jQuery(e);
    if (!o || !o.to) {
        return;
    }
    if (o.to.constructor == String && document.getElementById(o.to)) {
        o.to = document.getElementById(o.to);
    } else if (!o.to.childNodes) {
        return;
    }
    if (!o.duration) {
        o.duration = 500;
    }
    z.duration = o.duration;
    z.to = o.to;
    z.classname = o.className;
    z.complete = o.complete;
    if (z.classname) {
        jQuery.transferHelper.addClass(z.classname);
    }
    z.diffWidth = 0;
    z.diffHeight = 0;
    if (jQuery.boxModel) {
        z.diffWidth = (parseInt(jQuery.transferHelper.css("borderLeftWidth")) || 0) + (parseInt(jQuery.transferHelper.css("borderRightWidth")) || 0) + (parseInt(jQuery.transferHelper.css("paddingLeft")) || 0) + (parseInt(jQuery.transferHelper.css("paddingRight")) || 0);
        z.diffHeight = (parseInt(jQuery.transferHelper.css("borderTopWidth")) || 0) + (parseInt(jQuery.transferHelper.css("borderBottomWidth")) || 0) + (parseInt(jQuery.transferHelper.css("paddingTop")) || 0) + (parseInt(jQuery.transferHelper.css("paddingBottom")) || 0);
    }
    z.start = jQuery.extend(jQuery.iUtil.getPosition(z.el.get(0)), jQuery.iUtil.getSize(z.el.get(0)));
    z.end = jQuery.extend(jQuery.iUtil.getPosition(z.to), jQuery.iUtil.getSize(z.to));
    z.start.wb -= z.diffWidth;
    z.start.hb -= z.diffHeight;
    z.end.wb -= z.diffWidth;
    z.end.hb -= z.diffHeight;
    z.callback = o.complete;
    jQuery.transferHelper.css("width", z.start.wb + "px").css("height", z.start.hb + "px").css("top", z.start.y + "px").css("left", z.start.x + "px").animate({
        top: z.end.y,
        left: z.end.x,
        width: z.end.wb,
        height: z.end.hb
    }, z.duration, function () {
        if (z.classname) {
            jQuery.transferHelper.removeClass(z.classname);
        }
        jQuery.transferHelper.css("display", "none");
        if (z.complete && z.complete.constructor == Function) {
            z.complete.apply(z.el.get(0), [z.to]);
        }
        jQuery.dequeue(z.el.get(0), "interfaceFX");
    });
};
jQuery.ImageBox = {
    options: {
        border: 10,
        loaderSRC: "images/loading.gif",
        closeHTML: "<img src=\"images/close.jpg\" />",
        overlayOpacity: 0.8,
        textImage: "Showing image",
        textImageFrom: "from",
        fadeDuration: 400
    },
    imageLoaded: false,
    firstResize: false,
    currentRel: null,
    animationInProgress: false,
    opened: false,
    keyPressed: function (event) {
        if (!jQuery.ImageBox.opened || jQuery.ImageBox.animationInProgress) {
            return;
        }
        var pressedKey = event.charCode || event.keyCode || -1;
        switch (pressedKey) {
        case 35:
            if (jQuery.ImageBox.currentRel) {
                jQuery.ImageBox.start(null, jQuery("a[@rel=" + jQuery.ImageBox.currentRel + "]:last").get(0));
            }
            break;
        case 36:
            if (jQuery.ImageBox.currentRel) {
                jQuery.ImageBox.start(null, jQuery("a[@rel=" + jQuery.ImageBox.currentRel + "]:first").get(0));
            }
            break;
        case 37:
        case 8:
        case 33:
        case 80:
        case 112:
            var prevEl = jQuery("#ImageBoxPrevImage");
            if (prevEl.get(0).onclick != null) {
                prevEl.get(0).onclick.apply(prevEl.get(0));
            }
            break;
        case 38:
            break;
        case 39:
        case 34:
        case 32:
        case 110:
        case 78:
            var nextEl = jQuery("#ImageBoxNextImage");
            if (nextEl.get(0).onclick != null) {
                nextEl.get(0).onclick.apply(nextEl.get(0));
            }
            break;
        case 40:
            break;
        case 27:
            jQuery.ImageBox.hideImage();
            break;
        default:
            ;
        }
    },
    init: function (options) {
        if (options) {
            jQuery.extend(jQuery.ImageBox.options, options);
        }
        if (window.event) {
            jQuery("body", document).bind("keyup", jQuery.ImageBox.keyPressed);
        } else {
            jQuery(document).bind("keyup", jQuery.ImageBox.keyPressed);
        }
        jQuery("a").each(function () {
            el = jQuery(this);
            relAttr = el.attr("rel") || "";
            hrefAttr = el.attr("href") || "";
            imageTypes = /\.jpg|\.jpeg|\.png|\.gif|\.bmp/g;
            if (hrefAttr.toLowerCase().match(imageTypes) != null && relAttr.toLowerCase().indexOf("imagebox") == 0) {
                el.bind("click", jQuery.ImageBox.start);
            }
        });
        if (jQuery.browser.msie) {
            iframe = document.createElement("iframe");
            jQuery(iframe).attr({
                id: "ImageBoxIframe",
                src: "javascript:false;",
                frameborder: "no",
                scrolling: "no"
            }).css({
                display: "none",
                position: "absolute",
                top: "0",
                left: "0",
                filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=0)"
            });
            jQuery("body").append(iframe);
        }
        overlay = document.createElement("div");
        jQuery(overlay).attr("id", "ImageBoxOverlay").css({
            position: "absolute",
            display: "none",
            top: "0",
            left: "0",
            opacity: 0
        }).append(document.createTextNode(" ")).bind("click", jQuery.ImageBox.hideImage);
        captionText = document.createElement("div");
        jQuery(captionText).attr("id", "ImageBoxCaptionText").css({
            paddingLeft: jQuery.ImageBox.options.border + "px"
        }).append(document.createTextNode(" "));
        captionImages = document.createElement("div");
        jQuery(captionImages).attr("id", "ImageBoxCaptionImages").css({
            paddingLeft: jQuery.ImageBox.options.border + "px",
            paddingBottom: jQuery.ImageBox.options.border + "px"
        }).append(document.createTextNode(" "));
        closeEl = document.createElement("a");
        jQuery(closeEl).attr({
            id: "ImageBoxClose",
            href: "#"
        }).css({
            position: "absolute",
            right: jQuery.ImageBox.options.border + "px",
            top: "0"
        }).append(jQuery.ImageBox.options.closeHTML).bind("click", jQuery.ImageBox.hideImage);
        captionEl = document.createElement("div");
        jQuery(captionEl).attr("id", "ImageBoxCaption").css({
            position: "relative",
            textAlign: "left",
            margin: "0 auto",
            zIndex: 1
        }).append(captionText).append(captionImages).append(closeEl);
        loader = document.createElement("img");
        loader.src = jQuery.ImageBox.options.loaderSRC;
        jQuery(loader).attr("id", "ImageBoxLoader").css({
            position: "absolute"
        });
        prevImage = document.createElement("a");
        jQuery(prevImage).attr({
            id: "ImageBoxPrevImage",
            href: "#"
        }).css({
            position: "absolute",
            display: "none",
            overflow: "hidden",
            textDecoration: "none"
        }).append(document.createTextNode(" "));
        nextImage = document.createElement("a");
        jQuery(nextImage).attr({
            id: "ImageBoxNextImage",
            href: "#"
        }).css({
            position: "absolute",
            overflow: "hidden",
            textDecoration: "none"
        }).append(document.createTextNode(" "));
        container = document.createElement("div");
        jQuery(container).attr("id", "ImageBoxContainer").css({
            display: "none",
            position: "relative",
            overflow: "hidden",
            textAlign: "left",
            margin: "0 auto",
            top: "0",
            left: "0",
            zIndex: 2
        }).append([loader, prevImage, nextImage]);
        outerContainer = document.createElement("div");
        jQuery(outerContainer).attr("id", "ImageBoxOuterContainer").css({
            display: "none",
            position: "absolute",
            overflow: "hidden",
            top: "0",
            left: "0",
            textAlign: "center",
            backgroundColor: "transparent",
            lineHeigt: "0"
        }).append([container, captionEl]);
        jQuery("body").append(overlay).append(outerContainer);
    },
    start: function (e, elm) {
        el = elm ? jQuery(elm) : jQuery(this);
        linkRel = el.attr("rel");
        var totalImages, iteration, prevImage, nextImage;
        if (linkRel != "imagebox") {
            jQuery.ImageBox.currentRel = linkRel;
            gallery = jQuery("a[@rel=" + linkRel + "]");
            totalImages = gallery.size();
            iteration = gallery.index(elm ? elm : this);
            prevImage = gallery.get(iteration - 1);
            nextImage = gallery.get(iteration + 1);
        }
        imageSrc = el.attr("href");
        captionText = el.attr("title");
        pageSize = jQuery.iUtil.getScroll();
        overlay = jQuery("#ImageBoxOverlay");
        if (!jQuery.ImageBox.opened) {
            jQuery.ImageBox.opened = true;
            if (jQuery.browser.msie) {
                jQuery("#ImageBoxIframe").css("height", Math.max(pageSize.ih, pageSize.h) + "px").css("width", Math.max(pageSize.iw, pageSize.w) + "px").show();
            }
            overlay.css("height", Math.max(pageSize.ih, pageSize.h) + "px").css("width", Math.max(pageSize.iw, pageSize.w) + "px").show().fadeTo(300, jQuery.ImageBox.options.overlayOpacity, function () {
                jQuery.ImageBox.loadImage(imageSrc, captionText, pageSize, totalImages, iteration, prevImage, nextImage);
            });
            jQuery("#ImageBoxOuterContainer").css("width", Math.max(pageSize.iw, pageSize.w) + "px");
        } else {
            jQuery("#ImageBoxPrevImage").get(0).onclick = null;
            jQuery("#ImageBoxNextImage").get(0).onclick = null;
            jQuery.ImageBox.loadImage(imageSrc, captionText, pageSize, totalImages, iteration, prevImage, nextImage);
        }
        return false;
    },
    loadImage: function (imageSrc, captiontext, pageSize, totalImages, iteration, prevImage, nextImage) {
        jQuery("#ImageBoxCurrentImage").remove();
        prevImageEl = jQuery("#ImageBoxPrevImage");
        prevImageEl.hide();
        nextImageEl = jQuery("#ImageBoxNextImage");
        nextImageEl.hide();
        loader = jQuery("#ImageBoxLoader");
        container = jQuery("#ImageBoxContainer");
        outerContainer = jQuery("#ImageBoxOuterContainer");
        captionEl = jQuery("#ImageBoxCaption").css("visibility", "hidden");
        jQuery("#ImageBoxCaptionText").html(captionText);
        jQuery.ImageBox.animationInProgress = true;
        if (totalImages) {
            jQuery("#ImageBoxCaptionImages").html(jQuery.ImageBox.options.textImage + (" " + iteration + 1 + " " + jQuery.ImageBox.options.textImageFrom + " " + totalImages));
        }
        if (prevImage) {
            prevImageEl.get(0).onclick = function () {
                this.blur();
                jQuery.ImageBox.start(null, prevImage);
                return false;
            };
        }
        if (nextImage) {
            nextImageEl.get(0).onclick = function () {
                this.blur();
                jQuery.ImageBox.start(null, nextImage);
                return false;
            };
        }
        loader.show();
        containerSize = jQuery.iUtil.getSize(container.get(0));
        containerW = Math.max(containerSize.wb, loader.get(0).width + jQuery.ImageBox.options.border * 2);
        containerH = Math.max(containerSize.hb, loader.get(0).height + jQuery.ImageBox.options.border * 2);
        loader.css({
            left: (containerW - loader.get(0).width) / 2 + "px",
            top: (containerH - loader.get(0).height) / 2 + "px"
        });
        container.css({
            width: containerW + "px",
            height: containerH + "px"
        }).show();
        clientSize = jQuery.iUtil.getClient();
        outerContainer.css("top", pageSize.t + clientSize.h / 15 + ("px"));
        if (outerContainer.css("display") == "none") {
            outerContainer.show().fadeIn(jQuery.ImageBox.options.fadeDuration);
        }
        imageEl = new Image;
        jQuery(imageEl).attr("id", "ImageBoxCurrentImage").bind("load", function () {
            containerW = imageEl.width + jQuery.ImageBox.options.border * 2;
            containerH = imageEl.height + jQuery.ImageBox.options.border * 2;
            loader.hide();
            container.animate({
                height: containerH
            }, containerSize.hb != containerH ? jQuery.ImageBox.options.fadeDuration : 1, function () {
                container.animate({
                    width: containerW
                }, containerSize.wb != containerW ? jQuery.ImageBox.options.fadeDuration : 1, function () {
                    container.prepend(imageEl);
                    jQuery(imageEl).css({
                        position: "absolute",
                        left: jQuery.ImageBox.options.border + "px",
                        top: jQuery.ImageBox.options.border + "px"
                    }).fadeIn(jQuery.ImageBox.options.fadeDuration, function () {
                        captionSize = jQuery.iUtil.getSize(captionEl.get(0));
                        if (prevImage) {
                            prevImageEl.css({
                                left: jQuery.ImageBox.options.border + "px",
                                top: jQuery.ImageBox.options.border + "px",
                                width: containerW / 2 - jQuery.ImageBox.options.border * 3 + "px",
                                height: containerH - jQuery.ImageBox.options.border * 2 + "px"
                            }).show();
                        }
                        if (nextImage) {
                            nextImageEl.css({
                                left: containerW / 2 + jQuery.ImageBox.options.border * 2 + ("px"),
                                top: jQuery.ImageBox.options.border + "px",
                                width: containerW / 2 - jQuery.ImageBox.options.border * 3 + "px",
                                height: containerH - jQuery.ImageBox.options.border * 2 + "px"
                            }).show();
                        }
                        captionEl.css({
                            width: containerW + "px",
                            top: -captionSize.hb + "px",
                            visibility: "visible"
                        }).animate({
                            top: -1
                        }, jQuery.ImageBox.options.fadeDuration, function () {
                            jQuery.ImageBox.animationInProgress = false;
                        });
                    });
                });
            });
        });
        imageEl.src = imageSrc;
    },
    hideImage: function () {
        jQuery("#ImageBoxCurrentImage").remove();
        jQuery("#ImageBoxOuterContainer").hide();
        jQuery("#ImageBoxCaption").css("visibility", "hidden");
        jQuery("#ImageBoxOverlay").fadeTo(300, 0, function () {
            jQuery(this).hide();
            if (jQuery.browser.msie) {
                jQuery("#ImageBoxIframe").hide();
            }
        });
        jQuery("#ImageBoxPrevImage").get(0).onclick = null;
        jQuery("#ImageBoxNextImage").get(0).onclick = null;
        jQuery.ImageBox.currentRel = null;
        jQuery.ImageBox.opened = false;
        jQuery.ImageBox.animationInProgress = false;
        return false;
    }
};
jQuery.iResize = {
    resizeElement: null,
    resizeDirection: null,
    dragged: null,
    pointer: null,
    sizes: null,
    position: null,
    startDrag: function (e) {
        jQuery.iResize.dragged = this.dragEl ? this.dragEl : this;
        jQuery.iResize.pointer = jQuery.iUtil.getPointer(e);
        jQuery.iResize.sizes = {
            width: parseInt(jQuery(jQuery.iResize.dragged).css("width")) || 0,
            height: parseInt(jQuery(jQuery.iResize.dragged).css("height")) || 0
        };
        jQuery.iResize.position = {
            top: parseInt(jQuery(jQuery.iResize.dragged).css("top")) || 0,
            left: parseInt(jQuery(jQuery.iResize.dragged).css("left")) || 0
        };
        jQuery(document).bind("mousemove", jQuery.iResize.moveDrag).bind("mouseup", jQuery.iResize.stopDrag);
        if (typeof jQuery.iResize.dragged.resizeOptions.onDragStart === "function") {
            jQuery.iResize.dragged.resizeOptions.onDragStart.apply(jQuery.iResize.dragged);
        }
        return false;
    },
    stopDrag: function (e) {
        jQuery(document).unbind("mousemove", jQuery.iResize.moveDrag).unbind("mouseup", jQuery.iResize.stopDrag);
        if (typeof jQuery.iResize.dragged.resizeOptions.onDragStop === "function") {
            jQuery.iResize.dragged.resizeOptions.onDragStop.apply(jQuery.iResize.dragged);
        }
        jQuery.iResize.dragged = null;
    },
    moveDrag: function (e) {
        if (!jQuery.iResize.dragged) {
            return;
        }
        pointer = jQuery.iUtil.getPointer(e);
        newTop = jQuery.iResize.position.top - jQuery.iResize.pointer.y + pointer.y;
        newLeft = jQuery.iResize.position.left - jQuery.iResize.pointer.x + pointer.x;
        newTop = Math.max(Math.min(newTop, jQuery.iResize.dragged.resizeOptions.maxBottom - jQuery.iResize.sizes.height), jQuery.iResize.dragged.resizeOptions.minTop);
        newLeft = Math.max(Math.min(newLeft, jQuery.iResize.dragged.resizeOptions.maxRight - jQuery.iResize.sizes.width), jQuery.iResize.dragged.resizeOptions.minLeft);
        if (typeof jQuery.iResize.dragged.resizeOptions.onDrag === "function") {
            var newPos = jQuery.iResize.dragged.resizeOptions.onDrag.apply(jQuery.iResize.dragged, [newLeft, newTop]);
            if (typeof newPos == "array" && newPos.length == 2) {
                newLeft = newPos[0];
                newTop = newPos[1];
            }
        }
        jQuery.iResize.dragged.style.top = newTop + "px";
        jQuery.iResize.dragged.style.left = newLeft + "px";
        return false;
    },
    start: function (e) {
        jQuery(document).bind("mousemove", jQuery.iResize.move).bind("mouseup", jQuery.iResize.stop);
        jQuery.iResize.resizeElement = this.resizeElement;
        jQuery.iResize.resizeDirection = this.resizeDirection;
        jQuery.iResize.pointer = jQuery.iUtil.getPointer(e);
        jQuery.iResize.sizes = {
            width: parseInt(jQuery(this.resizeElement).css("width")) || 0,
            height: parseInt(jQuery(this.resizeElement).css("height")) || 0
        };
        jQuery.iResize.position = {
            top: parseInt(jQuery(this.resizeElement).css("top")) || 0,
            left: parseInt(jQuery(this.resizeElement).css("left")) || 0
        };
        if (jQuery.iResize.resizeElement.resizeOptions.onStart) {
            jQuery.iResize.resizeElement.resizeOptions.onStart.apply(jQuery.iResize.resizeElement, [this]);
        }
        return false;
    },
    stop: function () {
        jQuery(document).unbind("mousemove", jQuery.iResize.move).unbind("mouseup", jQuery.iResize.stop);
        if (jQuery.iResize.resizeElement.resizeOptions.onStop) {
            jQuery.iResize.resizeElement.resizeOptions.onStop.apply(jQuery.iResize.resizeElement, [jQuery.iResize.resizeDirection]);
        }
        jQuery.iResize.resizeElement = null;
        jQuery.iResize.resizeDirection = null;
    },
    getWidth: function (dx, side) {
        return Math.min(Math.max(jQuery.iResize.sizes.width + dx * side, jQuery.iResize.resizeElement.resizeOptions.minWidth), jQuery.iResize.resizeElement.resizeOptions.maxWidth);
    },
    getHeight: function (dy, side) {
        return Math.min(Math.max(jQuery.iResize.sizes.height + dy * side, jQuery.iResize.resizeElement.resizeOptions.minHeight), jQuery.iResize.resizeElement.resizeOptions.maxHeight);
    },
    getHeightMinMax: function (height) {
        return Math.min(Math.max(height, jQuery.iResize.resizeElement.resizeOptions.minHeight), jQuery.iResize.resizeElement.resizeOptions.maxHeight);
    },
    move: function (e) {
        if (jQuery.iResize.resizeElement == null) {
            return;
        }
        pointer = jQuery.iUtil.getPointer(e);
        dx = pointer.x - jQuery.iResize.pointer.x;
        dy = pointer.y - jQuery.iResize.pointer.y;
        newSizes = {
            width: jQuery.iResize.sizes.width,
            height: jQuery.iResize.sizes.height
        };
        newPosition = {
            top: jQuery.iResize.position.top,
            left: jQuery.iResize.position.left
        };
        switch (jQuery.iResize.resizeDirection) {
        case "e":
            newSizes.width = jQuery.iResize.getWidth(dx, 1);
            break;
        case "se":
            newSizes.width = jQuery.iResize.getWidth(dx, 1);
            newSizes.height = jQuery.iResize.getHeight(dy, 1);
            break;
        case "w":
            newSizes.width = jQuery.iResize.getWidth(dx, -1);
            newPosition.left = jQuery.iResize.position.left - newSizes.width + jQuery.iResize.sizes.width;
            break;
        case "sw":
            newSizes.width = jQuery.iResize.getWidth(dx, -1);
            newPosition.left = jQuery.iResize.position.left - newSizes.width + jQuery.iResize.sizes.width;
            newSizes.height = jQuery.iResize.getHeight(dy, 1);
            break;
        case "nw":
            newSizes.height = jQuery.iResize.getHeight(dy, -1);
            newPosition.top = jQuery.iResize.position.top - newSizes.height + jQuery.iResize.sizes.height;
            newSizes.width = jQuery.iResize.getWidth(dx, -1);
            newPosition.left = jQuery.iResize.position.left - newSizes.width + jQuery.iResize.sizes.width;
            break;
        case "n":
            newSizes.height = jQuery.iResize.getHeight(dy, -1);
            newPosition.top = jQuery.iResize.position.top - newSizes.height + jQuery.iResize.sizes.height;
            break;
        case "ne":
            newSizes.height = jQuery.iResize.getHeight(dy, -1);
            newPosition.top = jQuery.iResize.position.top - newSizes.height + jQuery.iResize.sizes.height;
            newSizes.width = jQuery.iResize.getWidth(dx, 1);
            break;
        case "s":
            newSizes.height = jQuery.iResize.getHeight(dy, 1);
            break;
        default:
            ;
        }
        if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
            if (jQuery.iResize.resizeDirection == "n" || jQuery.iResize.resizeDirection == "s") {
                nWidth = newSizes.height * jQuery.iResize.resizeElement.resizeOptions.ratio;
            } else {
                nWidth = newSizes.width;
            }
            nHeight = jQuery.iResize.getHeightMinMax(nWidth * jQuery.iResize.resizeElement.resizeOptions.ratio);
            nWidth = nHeight / jQuery.iResize.resizeElement.resizeOptions.ratio;
            switch (jQuery.iResize.resizeDirection) {
            case "n":
            case "nw":
            case "ne":
                newPosition.top += newSizes.height - nHeight;
                break;
            default:
                ;
            }
            switch (jQuery.iResize.resizeDirection) {
            case "nw":
            case "w":
            case "sw":
                newPosition.left += newSizes.width - nWidth;
                break;
            default:
                ;
            }
            newSizes.height = nHeight;
            newSizes.width = nWidth;
        }
        if (newPosition.top < jQuery.iResize.resizeElement.resizeOptions.minTop) {
            nHeight = newSizes.height + newPosition.top - jQuery.iResize.resizeElement.resizeOptions.minTop;
            newPosition.top = jQuery.iResize.resizeElement.resizeOptions.minTop;
            if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
                nWidth = nHeight / jQuery.iResize.resizeElement.resizeOptions.ratio;
                switch (jQuery.iResize.resizeDirection) {
                case "nw":
                case "w":
                case "sw":
                    newPosition.left += newSizes.width - nWidth;
                    break;
                default:
                    ;
                }
                newSizes.width = nWidth;
            }
            newSizes.height = nHeight;
        }
        if (newPosition.left < jQuery.iResize.resizeElement.resizeOptions.minLeft) {
            nWidth = newSizes.width + newPosition.left - jQuery.iResize.resizeElement.resizeOptions.minLeft;
            newPosition.left = jQuery.iResize.resizeElement.resizeOptions.minLeft;
            if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
                nHeight = nWidth * jQuery.iResize.resizeElement.resizeOptions.ratio;
                switch (jQuery.iResize.resizeDirection) {
                case "n":
                case "nw":
                case "ne":
                    newPosition.top += newSizes.height - nHeight;
                    break;
                default:
                    ;
                }
                newSizes.height = nHeight;
            }
            newSizes.width = nWidth;
        }
        if (newPosition.top + newSizes.height > jQuery.iResize.resizeElement.resizeOptions.maxBottom) {
            newSizes.height = jQuery.iResize.resizeElement.resizeOptions.maxBottom - newPosition.top;
            if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
                newSizes.width = newSizes.height / jQuery.iResize.resizeElement.resizeOptions.ratio;
            }
        }
        if (newPosition.left + newSizes.width > jQuery.iResize.resizeElement.resizeOptions.maxRight) {
            newSizes.width = jQuery.iResize.resizeElement.resizeOptions.maxRight - newPosition.left;
            if (jQuery.iResize.resizeElement.resizeOptions.ratio) {
                newSizes.height = newSizes.width * jQuery.iResize.resizeElement.resizeOptions.ratio;
            }
        }
        var newDimensions = false;
        if (jQuery.iResize.resizeElement.resizeOptions.onResize) {
            newDimensions = jQuery.iResize.resizeElement.resizeOptions.onResize.apply(jQuery.iResize.resizeElement, [newSizes, newPosition]);
            if (newDimensions) {
                if (newDimensions.sizes) {
                    jQuery.extend(newSizes, newDimensions.sizes);
                }
                if (newDimensions.position) {
                    jQuery.extend(newPosition, newDimensions.position);
                }
            }
        }
        elS = jQuery.iResize.resizeElement.style;
        elS.left = newPosition.left + "px";
        elS.top = newPosition.top + "px";
        elS.width = newSizes.width + "px";
        elS.height = newSizes.height + "px";
        return false;
    },
    build: function (options) {
        if (!options || !options.handlers || options.handlers.constructor != Object) {
            return;
        }
        return this.each(function () {
            var el = this;
            el.resizeOptions = options;
            el.resizeOptions.minWidth = options.minWidth || 10;
            el.resizeOptions.minHeight = options.minHeight || 10;
            el.resizeOptions.maxWidth = options.maxWidth || 3000;
            el.resizeOptions.maxHeight = options.maxHeight || 3000;
            el.resizeOptions.minTop = options.minTop || -1000;
            el.resizeOptions.minLeft = options.minLeft || -1000;
            el.resizeOptions.maxRight = options.maxRight || 3000;
            el.resizeOptions.maxBottom = options.maxBottom || 3000;
            elPosition = jQuery(el).css("position");
            if (!(elPosition == "relative" || elPosition == "absolute")) {
                el.style.position = "relative";
            }
            directions = /n|ne|e|se|s|sw|w|nw/g;
            for (i in el.resizeOptions.handlers) {
                if (i.toLowerCase().match(directions) != null) {
                    if (el.resizeOptions.handlers[i].constructor == String) {
                        handle = jQuery(el.resizeOptions.handlers[i]);
                        if (handle.size() > 0) {
                            el.resizeOptions.handlers[i] = handle.get(0);
                        }
                    }
                    if (el.resizeOptions.handlers[i].tagName) {
                        el.resizeOptions.handlers[i].resizeElement = el;
                        el.resizeOptions.handlers[i].resizeDirection = i;
                        jQuery(el.resizeOptions.handlers[i]).bind("mousedown", jQuery.iResize.start);
                    }
                }
            }
            if (el.resizeOptions.dragHandle) {
                if (typeof el.resizeOptions.dragHandle === "string") {
                    handleEl = jQuery(el.resizeOptions.dragHandle);
                    if (handleEl.size() > 0) {
                        handleEl.each(function () {
                            this.dragEl = el;
                        });
                        handleEl.bind("mousedown", jQuery.iResize.startDrag);
                    }
                } else if (el.resizeOptions.dragHandle == true) {
                    jQuery(this).bind("mousedown", jQuery.iResize.startDrag);
                }
            }
        });
    },
    destroy: function () {
        return this.each(function () {
            var el = this;
            for (i in el.resizeOptions.handlers) {
                el.resizeOptions.handlers[i].resizeElement = null;
                el.resizeOptions.handlers[i].resizeDirection = null;
                jQuery(el.resizeOptions.handlers[i]).unbind("mousedown", jQuery.iResize.start);
            }
            if (el.resizeOptions.dragHandle) {
                if (typeof el.resizeOptions.dragHandle === "string") {
                    handle = jQuery(el.resizeOptions.dragHandle);
                    if (handle.size() > 0) {
                        handle.unbind("mousedown", jQuery.iResize.startDrag);
                    }
                } else if (el.resizeOptions.dragHandle == true) {
                    jQuery(this).unbind("mousedown", jQuery.iResize.startDrag);
                }
            }
            el.resizeOptions = null;
        });
    }
};
jQuery.fn.extend({
    Resizable: jQuery.iResize.build,
    ResizableDestroy: jQuery.iResize.destroy
});
jQuery.selectHelper = null;
jQuery.selectKeyHelper = false;
jQuery.selectdrug = null;
jQuery.selectCurrent = [];
jQuery.selectKeyDown = function (e) {
    var pressedKey = e.charCode || e.keyCode || -1;
    if (pressedKey == 17 || pressedKey == 16) {
        jQuery.selectKeyHelper = true;
    }
};
jQuery.selectKeyUp = function (e) {
    jQuery.selectKeyHelper = false;
};
jQuery.selectstart = function (e) {
    this.f.pointer = jQuery.iUtil.getPointer(e);
    this.f.pos = jQuery.extend(jQuery.iUtil.getPosition(this), jQuery.iUtil.getSize(this));
    this.f.scr = jQuery.iUtil.getScroll(this);
    this.f.pointer.x -= this.f.pos.x;
    this.f.pointer.y -= this.f.pos.y;
    jQuery(this).append(jQuery.selectHelper.get(0));
    if (this.f.hc) {
        jQuery.selectHelper.addClass(this.f.hc).css("display", "block");
    }
    jQuery.selectHelper.css({
        display: "block",
        width: "0px",
        height: "0px"
    });
    if (this.f.o) {
        jQuery.selectHelper.css("opacity", this.f.o);
    }
    jQuery.selectdrug = this;
    jQuery.selectedone = false;
    jQuery.selectCurrent = [];
    this.f.el.each(function () {
        this.pos = {
            x: this.offsetLeft + (this.currentStyle && !jQuery.browser.opera ? parseInt(this.currentStyle.borderLeftWidth) || 0 : 0) + (jQuery.selectdrug.scrollLeft || 0),
            y: this.offsetTop + (this.currentStyle && !jQuery.browser.opera ? parseInt(this.currentStyle.borderTopWidth) || 0 : 0) + (jQuery.selectdrug.scrollTop || 0),
            wb: this.offsetWidth,
            hb: this.offsetHeight
        };
        if (this.s == true) {
            if (jQuery.selectKeyHelper == false) {
                this.s = false;
                jQuery(this).removeClass(jQuery.selectdrug.f.sc);
            } else {
                jQuery.selectedone = true;
                jQuery.selectCurrent[jQuery.selectCurrent.length] = jQuery.attr(this, "id");
            }
        }
    });
    jQuery.selectcheck.apply(this, [e]);
    jQuery(document).bind("mousemove", jQuery.selectcheck).bind("mouseup", jQuery.selectstop);
    return false;
};
jQuery.selectcheck = function (e) {
    if (!jQuery.selectdrug) {
        return;
    }
    jQuery.selectcheckApply.apply(jQuery.selectdrug, [e]);
};
jQuery.selectcheckApply = function (e) {
    if (!jQuery.selectdrug) {
        return;
    }
    var pointer = jQuery.iUtil.getPointer(e);
    var scr = jQuery.iUtil.getScroll(jQuery.selectdrug);
    pointer.x += scr.l - this.f.scr.l - this.f.pos.x;
    pointer.y += scr.t - this.f.scr.t - this.f.pos.y;
    var sx = Math.min(pointer.x, this.f.pointer.x);
    var sw = Math.min(Math.abs(pointer.x - this.f.pointer.x), Math.abs(this.f.scr.w - sx));
    var sy = Math.min(pointer.y, this.f.pointer.y);
    var sh = Math.min(Math.abs(pointer.y - this.f.pointer.y), Math.abs(this.f.scr.h - sy));
    if (this.scrollTop > 0 && pointer.y - 20 < this.scrollTop) {
        var diff = Math.min(scr.t, 10);
        sy -= diff;
        sh += diff;
        this.scrollTop -= diff;
    } else if (this.scrollTop + this.f.pos.h < this.f.scr.h && pointer.y + 20 > this.scrollTop + this.f.pos.h) {
        var diff = Math.min(this.f.scr.h - this.scrollTop, 10);
        this.scrollTop += diff;
        if (this.scrollTop != scr.t) {
            sh += diff;
        }
    }
    if (this.scrollLeft > 0 && pointer.x - 20 < this.scrollLeft) {
        var diff = Math.min(scr.l, 10);
        sx -= diff;
        sw += diff;
        this.scrollLeft -= diff;
    } else if (this.scrollLeft + this.f.pos.w < this.f.scr.w && pointer.x + 20 > this.scrollLeft + this.f.pos.w) {
        var diff = Math.min(this.f.scr.w - this.scrollLeft, 10);
        this.scrollLeft += diff;
        if (this.scrollLeft != scr.l) {
            sw += diff;
        }
    }
    jQuery.selectHelper.css({
        left: sx + "px",
        top: sy + "px",
        width: sw + "px",
        height: sh + "px"
    });
    jQuery.selectHelper.l = sx + this.f.scr.l;
    jQuery.selectHelper.t = sy + this.f.scr.t;
    jQuery.selectHelper.r = jQuery.selectHelper.l + sw;
    jQuery.selectHelper.b = jQuery.selectHelper.t + sh;
    jQuery.selectedone = false;
    this.f.el.each(function () {
        iIndex = jQuery.selectCurrent.indexOf(jQuery.attr(this, "id"));
        if (!(this.pos.x > jQuery.selectHelper.r || this.pos.x + this.pos.wb < jQuery.selectHelper.l || this.pos.y > jQuery.selectHelper.b || this.pos.y + this.pos.hb < jQuery.selectHelper.t)) {
            jQuery.selectedone = true;
            if (this.s != true) {
                this.s = true;
                jQuery(this).addClass(jQuery.selectdrug.f.sc);
            }
            if (iIndex != -1) {
                this.s = false;
                jQuery(this).removeClass(jQuery.selectdrug.f.sc);
            }
        } else if (this.s == true && iIndex == -1) {
            this.s = false;
            jQuery(this).removeClass(jQuery.selectdrug.f.sc);
        } else if (!this.s && jQuery.selectKeyHelper == true && iIndex != -1) {
            this.s = true;
            jQuery(this).addClass(jQuery.selectdrug.f.sc);
        }
    });
    return false;
};
jQuery.selectstop = function (e) {
    if (!jQuery.selectdrug) {
        return;
    }
    jQuery.selectstopApply.apply(jQuery.selectdrug, [e]);
};
jQuery.selectstopApply = function (e) {
    jQuery(document).unbind("mousemove", jQuery.selectcheck).unbind("mouseup", jQuery.selectstop);
    if (!jQuery.selectdrug) {
        return;
    }
    jQuery.selectHelper.css("display", "none");
    if (this.f.hc) {
        jQuery.selectHelper.removeClass(this.f.hc);
    }
    jQuery.selectdrug = false;
    jQuery("body").append(jQuery.selectHelper.get(0));
    if (jQuery.selectedone == true) {
        if (this.f.onselect) {
            this.f.onselect(jQuery.Selectserialize(jQuery.attr(this, "id")));
        }
    } else {
        if (this.f.onselectstop) {
            this.f.onselectstop(jQuery.Selectserialize(jQuery.attr(this, "id")));
        }
    }
    jQuery.selectCurrent = [];
};
jQuery.Selectserialize = function (s) {
    var h = "";
    var o = [];
    if ((a = jQuery("#" + s))) {
        a.get(0).f.el.each(function () {
            if (this.s == true) {
                if (h.length > 0) {
                    h += "&";
                }
                h += s + ("[]=" + jQuery.attr(this, "id"));
                o[o.length] = jQuery.attr(this, "id");
            }
        });
    }
    return {
        hash: h,
        o: o
    };
};
jQuery.fn.Selectable = function (o) {
    if (!jQuery.selectHelper) {
        jQuery("body", document).append("<div id=\"selectHelper\"></div>").bind("keydown", jQuery.selectKeyDown).bind("keyup", jQuery.selectKeyUp);
        jQuery.selectHelper = jQuery("#selectHelper");
        jQuery.selectHelper.css({
            position: "absolute",
            display: "none"
        });
        if (window.event) {
            jQuery("body", document).bind("keydown", jQuery.selectKeyDown).bind("keyup", jQuery.selectKeyUp);
        } else {
            jQuery(document).bind("keydown", jQuery.selectKeyDown).bind("keyup", jQuery.selectKeyUp);
        }
    }
    if (!o) {
        o = {};
    }
    return this.each(function () {
        if (this.isSelectable) {
            return;
        }
        this.isSelectable = true;
        this.f = {
            a: o.accept,
            o: o.opacity ? parseFloat(o.opacity) : false,
            sc: o.selectedclass ? o.selectedclass : false,
            hc: o.helperclass ? o.helperclass : false,
            onselect: o.onselect ? o.onselect : false,
            onselectstop: o.onselectstop ? o.onselectstop : false
        };
        this.f.el = jQuery("." + o.accept);
        jQuery(this).bind("mousedown", jQuery.selectstart).css("position", "relative");
    });
};
jQuery.iSlider = {
    tabindex: 1,
    set: function (values) {
        var values = values;
        return this.each(function () {
            this.slideCfg.sliders.each(function (key) {
                jQuery.iSlider.dragmoveBy(this, values[key]);
            });
        });
    },
    get: function () {
        var values = [];
        this.each(function (slider) {
            if (this.isSlider) {
                values[slider] = [];
                var elm = this;
                var sizes = jQuery.iUtil.getSize(this);
                this.slideCfg.sliders.each(function (key) {
                    var x = this.offsetLeft;
                    var y = this.offsetTop;
                    xproc = parseInt(x * 100 / (sizes.w - this.offsetWidth));
                    yproc = parseInt(y * 100 / (sizes.h - this.offsetHeight));
                    values[slider][key] = [xproc || 0, yproc || 0, x || 0, y || 0];
                });
            }
        });
        return values;
    },
    modifyContainer: function (elm) {
        elm.dragCfg.containerMaxx = elm.dragCfg.cont.w - elm.dragCfg.oC.wb;
        elm.dragCfg.containerMaxy = elm.dragCfg.cont.h - elm.dragCfg.oC.hb;
        if (elm.SliderContainer.slideCfg.restricted) {
            next = elm.SliderContainer.slideCfg.sliders.get(elm.SliderIteration + 1);
            if (next) {
                elm.dragCfg.cont.w = (parseInt(jQuery(next).css("left")) || 0) + elm.dragCfg.oC.wb;
                elm.dragCfg.cont.h = (parseInt(jQuery(next).css("top")) || 0) + elm.dragCfg.oC.hb;
            }
            prev = elm.SliderContainer.slideCfg.sliders.get(elm.SliderIteration - 1);
            if (prev) {
                var prevLeft = parseInt(jQuery(prev).css("left")) || 0;
                var prevTop = parseInt(jQuery(prev).css("left")) || 0;
                elm.dragCfg.cont.x += prevLeft;
                elm.dragCfg.cont.y += prevTop;
                elm.dragCfg.cont.w -= prevLeft;
                elm.dragCfg.cont.h -= prevTop;
            }
        }
        elm.dragCfg.maxx = elm.dragCfg.cont.w - elm.dragCfg.oC.wb;
        elm.dragCfg.maxy = elm.dragCfg.cont.h - elm.dragCfg.oC.hb;
        if (elm.dragCfg.fractions) {
            elm.dragCfg.gx = (elm.dragCfg.cont.w - elm.dragCfg.oC.wb) / elm.dragCfg.fractions || 1;
            elm.dragCfg.gy = (elm.dragCfg.cont.h - elm.dragCfg.oC.hb) / elm.dragCfg.fractions || 1;
            elm.dragCfg.fracW = elm.dragCfg.maxx / elm.dragCfg.fractions;
            elm.dragCfg.fracH = elm.dragCfg.maxy / elm.dragCfg.fractions;
        }
        elm.dragCfg.cont.dx = elm.dragCfg.cont.x - elm.dragCfg.oR.x;
        elm.dragCfg.cont.dy = elm.dragCfg.cont.y - elm.dragCfg.oR.y;
        jQuery.iDrag.helper.css("cursor", "default");
    },
    onSlide: function (elm, x, y) {
        if (elm.dragCfg.fractions) {
            xfrac = parseInt(x / elm.dragCfg.fracW);
            xproc = xfrac * 100 / elm.dragCfg.fractions;
            yfrac = parseInt(y / elm.dragCfg.fracH);
            yproc = yfrac * 100 / elm.dragCfg.fractions;
        } else {
            xproc = parseInt(x * 100 / elm.dragCfg.containerMaxx);
            yproc = parseInt(y * 100 / elm.dragCfg.containerMaxy);
        }
        elm.dragCfg.lastSi = [xproc || 0, yproc || 0, x || 0, y || 0];
        if (elm.dragCfg.onSlide) {
            elm.dragCfg.onSlide.apply(elm, elm.dragCfg.lastSi);
        }
    },
    dragmoveByKey: function (event) {
        pressedKey = event.charCode || event.keyCode || -1;
        switch (pressedKey) {
        case 35:
            jQuery.iSlider.dragmoveBy(this.dragElem, [2000, 2000]);
            break;
        case 36:
            jQuery.iSlider.dragmoveBy(this.dragElem, [-2000, -2000]);
            break;
        case 37:
            jQuery.iSlider.dragmoveBy(this.dragElem, [-this.dragElem.dragCfg.gx || -1, 0]);
            break;
        case 38:
            jQuery.iSlider.dragmoveBy(this.dragElem, [0, -this.dragElem.dragCfg.gy || -1]);
            break;
        case 39:
            jQuery.iSlider.dragmoveBy(this.dragElem, [this.dragElem.dragCfg.gx || 1, 0]);
            break;
        case 40:
            jQuery.iDrag.dragmoveBy(this.dragElem, [0, this.dragElem.dragCfg.gy || 1]);
            break;
        default:
            ;
        }
    },
    dragmoveBy: function (elm, position) {
        if (!elm.dragCfg) {
            return;
        }
        elm.dragCfg.oC = jQuery.extend(jQuery.iUtil.getPosition(elm), jQuery.iUtil.getSize(elm));
        elm.dragCfg.oR = {
            x: parseInt(jQuery.css(elm, "left")) || 0,
            y: parseInt(jQuery.css(elm, "top")) || 0
        };
        elm.dragCfg.oP = jQuery.css(elm, "position");
        if (elm.dragCfg.oP != "relative" && elm.dragCfg.oP != "absolute") {
            elm.style.position = "relative";
        }
        jQuery.iDrag.getContainment(elm);
        jQuery.iSlider.modifyContainer(elm);
        dx = parseInt(position[0]) || 0;
        dy = parseInt(position[1]) || 0;
        nx = elm.dragCfg.oR.x + dx;
        ny = elm.dragCfg.oR.y + dy;
        if (elm.dragCfg.fractions) {
            newCoords = jQuery.iDrag.snapToGrid.apply(elm, [nx, ny, dx, dy]);
            if (newCoords.constructor == Object) {
                dx = newCoords.dx;
                dy = newCoords.dy;
            }
            nx = elm.dragCfg.oR.x + dx;
            ny = elm.dragCfg.oR.y + dy;
        }
        newCoords = jQuery.iDrag.fitToContainer.apply(elm, [nx, ny, dx, dy]);
        if (newCoords && newCoords.constructor == Object) {
            dx = newCoords.dx;
            dy = newCoords.dy;
        }
        nx = elm.dragCfg.oR.x + dx;
        ny = elm.dragCfg.oR.y + dy;
        if (elm.dragCfg.si && (elm.dragCfg.onSlide || elm.dragCfg.onChange)) {
            jQuery.iSlider.onSlide(elm, nx, ny);
        }
        nx = !elm.dragCfg.axis || elm.dragCfg.axis == "horizontally" ? nx : elm.dragCfg.oR.x || 0;
        ny = !elm.dragCfg.axis || elm.dragCfg.axis == "vertically" ? ny : elm.dragCfg.oR.y || 0;
        elm.style.left = nx + "px";
        elm.style.top = ny + "px";
    },
    build: function (o) {
        return this.each(function () {
            if (this.isSlider == true || !o.accept || !jQuery.iUtil || !jQuery.iDrag || !jQuery.iDrop) {
                return;
            }
            toDrag = jQuery(o.accept, this);
            if (toDrag.size() == 0) {
                return;
            }
            var params = {
                containment: "parent",
                si: true,
                onSlide: o.onSlide && o.onSlide.constructor == Function ? o.onSlide : null,
                onChange: o.onChange && o.onChange.constructor == Function ? o.onChange : null,
                handle: this,
                opacity: o.opacity || false
            };
            if (o.fractions && parseInt(o.fractions)) {
                params.fractions = parseInt(o.fractions) || 1;
                params.fractions = params.fractions > 0 ? params.fractions : 1;
            }
            if (toDrag.size() == 1) {
                toDrag.Draggable(params);
            } else {
                jQuery(toDrag.get(0)).Draggable(params);
                params.handle = null;
                toDrag.Draggable(params);
            }
            toDrag.keydown(jQuery.iSlider.dragmoveByKey);
            toDrag.attr("tabindex", jQuery.iSlider.tabindex++);
            this.isSlider = true;
            this.slideCfg = {};
            this.slideCfg.onslide = params.onslide;
            this.slideCfg.fractions = params.fractions;
            this.slideCfg.sliders = toDrag;
            this.slideCfg.restricted = o.restricted ? true : false;
            sliderEl = this;
            sliderEl.slideCfg.sliders.each(function (nr) {
                this.SliderIteration = nr;
                this.SliderContainer = sliderEl;
            });
            if (o.values && o.values.constructor == Array) {
                for (i = o.values.length - 1; i >= 0; i--) {
                    if (o.values[i].constructor == Array && o.values[i].length == 2) {
                        el = this.slideCfg.sliders.get(i);
                        if (el.tagName) {
                            jQuery.iSlider.dragmoveBy(el, o.values[i]);
                        }
                    }
                }
            }
        });
    }
};
jQuery.fn.extend({
    Slider: jQuery.iSlider.build,
    SliderSetValues: jQuery.iSlider.set,
    SliderGetValues: jQuery.iSlider.get
});
jQuery.islideshow = {
    slideshows: [],
    gonext: function () {
        this.blur();
        slideshow = this.parentNode;
        id = jQuery.attr(slideshow, "id");
        if (jQuery.islideshow.slideshows[id] != null) {
            window.clearInterval(jQuery.islideshow.slideshows[id]);
        }
        slide = slideshow.ss.currentslide + 1;
        if (slideshow.ss.images.length < slide) {
            slide = 1;
        }
        images = jQuery("img", slideshow.ss.holder);
        slideshow.ss.currentslide = slide;
        if (images.size() > 0) {
            images.fadeOut(slideshow.ss.fadeDuration, jQuery.islideshow.showImage);
        }
    },
    goprev: function () {
        this.blur();
        slideshow = this.parentNode;
        id = jQuery.attr(slideshow, "id");
        if (jQuery.islideshow.slideshows[id] != null) {
            window.clearInterval(jQuery.islideshow.slideshows[id]);
        }
        slide = slideshow.ss.currentslide - 1;
        images = jQuery("img", slideshow.ss.holder);
        if (slide < 1) {
            slide = slideshow.ss.images.length;
        }
        slideshow.ss.currentslide = slide;
        if (images.size() > 0) {
            images.fadeOut(slideshow.ss.fadeDuration, jQuery.islideshow.showImage);
        }
    },
    timer: function (c) {
        slideshow = document.getElementById(c);
        if (slideshow.ss.random) {
            slide = slideshow.ss.currentslide;
            while (slide == slideshow.ss.currentslide) {
                slide = 1 + parseInt(Math.random() * slideshow.ss.images.length);
            }
        } else {
            slide = slideshow.ss.currentslide + 1;
            if (slideshow.ss.images.length < slide) {
                slide = 1;
            }
        }
        images = jQuery("img", slideshow.ss.holder);
        slideshow.ss.currentslide = slide;
        if (images.size() > 0) {
            images.fadeOut(slideshow.ss.fadeDuration, jQuery.islideshow.showImage);
        }
    },
    go: function (o) {
        var slideshow;
        if (o && o.constructor == Object) {
            if (o.loader) {
                slideshow = document.getElementById(o.loader.slideshow);
                url = window.location.href.split("#");
                o.loader.onload = null;
                if (url.length == 2) {
                    slide = parseInt(url[1]);
                    show = url[1].replace(slide, "");
                    if (jQuery.attr(slideshow, "id") != show) {
                        slide = 1;
                    }
                } else {
                    slide = 1;
                }
            }
            if (o.link) {
                o.link.blur();
                slideshow = o.link.parentNode.parentNode;
                id = jQuery.attr(slideshow, "id");
                if (jQuery.islideshow.slideshows[id] != null) {
                    window.clearInterval(jQuery.islideshow.slideshows[id]);
                }
                url = o.link.href.split("#");
                slide = parseInt(url[1]);
                show = url[1].replace(slide, "");
                if (jQuery.attr(slideshow, "id") != show) {
                    slide = 1;
                }
            }
            if (slideshow.ss.images.length < slide || slide < 1) {
                slide = 1;
            }
            slideshow.ss.currentslide = slide;
            slidePos = jQuery.iUtil.getSize(slideshow);
            slidePad = jQuery.iUtil.getPadding(slideshow);
            slideBor = jQuery.iUtil.getBorder(slideshow);
            if (slideshow.ss.prevslide) {
                slideshow.ss.prevslide.o.css("display", "none");
            }
            if (slideshow.ss.nextslide) {
                slideshow.ss.nextslide.o.css("display", "none");
            }
            if (slideshow.ss.loader) {
                y = parseInt(slidePad.t) + parseInt(slideBor.t);
                if (slideshow.ss.slideslinks) {
                    if (slideshow.ss.slideslinks.linksPosition == "top") {
                        y += slideshow.ss.slideslinks.dimm.hb;
                    } else {
                        slidePos.h -= slideshow.ss.slideslinks.dimm.hb;
                    }
                }
                if (slideshow.ss.slideCaption) {
                    if (slideshow.ss.slideCaption && slideshow.ss.slideCaption.captionPosition == "top") {
                        y += slideshow.ss.slideCaption.dimm.hb;
                    } else {
                        slidePos.h -= slideshow.ss.slideCaption.dimm.hb;
                    }
                }
                if (!slideshow.ss.loaderWidth) {
                    slideshow.ss.loaderHeight = o.loader ? o.loader.height : parseInt(slideshow.ss.loader.css("height")) || 0;
                    slideshow.ss.loaderWidth = o.loader ? o.loader.width : parseInt(slideshow.ss.loader.css("width")) || 0;
                }
                slideshow.ss.loader.css("top", y + (slidePos.h - slideshow.ss.loaderHeight) / 2 + ("px"));
                slideshow.ss.loader.css("left", (slidePos.wb - slideshow.ss.loaderWidth) / 2 + "px");
                slideshow.ss.loader.css("display", "block");
            }
            images = jQuery("img", slideshow.ss.holder);
            if (images.size() > 0) {
                images.fadeOut(slideshow.ss.fadeDuration, jQuery.islideshow.showImage);
            } else {
                lnk = jQuery("a", slideshow.ss.slideslinks.o).get(slide - 1);
                jQuery(lnk).addClass(slideshow.ss.slideslinks.activeLinkClass);
                var img = new Image;
                img.slideshow = jQuery.attr(slideshow, "id");
                img.slide = slide - 1;
                img.src = slideshow.ss.images[slideshow.ss.currentslide - 1].src;
                if (img.complete) {
                    img.onload = null;
                    jQuery.islideshow.display.apply(img);
                } else {
                    img.onload = jQuery.islideshow.display;
                }
                if (slideshow.ss.slideCaption) {
                    slideshow.ss.slideCaption.o.html(slideshow.ss.images[slide - 1].caption);
                }
            }
        }
    },
    showImage: function () {
        slideshow = this.parentNode.parentNode;
        slideshow.ss.holder.css("display", "none");
        if (slideshow.ss.slideslinks.activeLinkClass) {
            lnk = jQuery("a", slideshow.ss.slideslinks.o).removeClass(slideshow.ss.slideslinks.activeLinkClass).get(slideshow.ss.currentslide - 1);
            jQuery(lnk).addClass(slideshow.ss.slideslinks.activeLinkClass);
        }
        var img = new Image;
        img.slideshow = jQuery.attr(slideshow, "id");
        img.slide = slideshow.ss.currentslide - 1;
        img.src = slideshow.ss.images[slideshow.ss.currentslide - 1].src;
        if (img.complete) {
            img.onload = null;
            jQuery.islideshow.display.apply(img);
        } else {
            img.onload = jQuery.islideshow.display;
        }
        if (slideshow.ss.slideCaption) {
            slideshow.ss.slideCaption.o.html(slideshow.ss.images[slideshow.ss.currentslide - 1].caption);
        }
    },
    display: function () {
        slideshow = document.getElementById(this.slideshow);
        if (slideshow.ss.prevslide) {
            slideshow.ss.prevslide.o.css("display", "none");
        }
        if (slideshow.ss.nextslide) {
            slideshow.ss.nextslide.o.css("display", "none");
        }
        slidePos = jQuery.iUtil.getSize(slideshow);
        y = 0;
        if (slideshow.ss.slideslinks) {
            if (slideshow.ss.slideslinks.linksPosition == "top") {
                y += slideshow.ss.slideslinks.dimm.hb;
            } else {
                slidePos.h -= slideshow.ss.slideslinks.dimm.hb;
            }
        }
        if (slideshow.ss.slideCaption) {
            if (slideshow.ss.slideCaption && slideshow.ss.slideCaption.captionPosition == "top") {
                y += slideshow.ss.slideCaption.dimm.hb;
            } else {
                slidePos.h -= slideshow.ss.slideCaption.dimm.hb;
            }
        }
        par = jQuery(".slideshowHolder", slideshow);
        y = y + (slidePos.h - this.height) / 2;
        x = (slidePos.wb - this.width) / 2;
        slideshow.ss.holder.css("top", y + "px").css("left", x + "px").html("<img src=\"" + this.src + "\" />");
        slideshow.ss.holder.fadeIn(slideshow.ss.fadeDuration);
        nextslide = slideshow.ss.currentslide + 1;
        if (nextslide > slideshow.ss.images.length) {
            nextslide = 1;
        }
        prevslide = slideshow.ss.currentslide - 1;
        if (prevslide < 1) {
            prevslide = slideshow.ss.images.length;
        }
        slideshow.ss.nextslide.o.css("display", "block").css("top", y + "px").css("left", x + 2 * this.width / 3 + ("px")).css("width", this.width / 3 + "px").css("height", this.height + "px").attr("title", slideshow.ss.images[nextslide - 1].caption);
        slideshow.ss.nextslide.o.get(0).href = "#" + nextslide + jQuery.attr(slideshow, "id");
        slideshow.ss.prevslide.o.css("display", "block").css("top", y + "px").css("left", x + "px").css("width", this.width / 3 + "px").css("height", this.height + "px").attr("title", slideshow.ss.images[prevslide - 1].caption);
        slideshow.ss.prevslide.o.get(0).href = "#" + prevslide + jQuery.attr(slideshow, "id");
    },
    build: function (o) {
        if (!o || !o.container || jQuery.islideshow.slideshows[o.container]) {
            return;
        }
        var container = jQuery("#" + o.container);
        var el = container.get(0);
        if (el.style.position != "absolute" && el.style.position != "relative") {
            el.style.position = "relative";
        }
        el.style.overflow = "hidden";
        if (container.size() == 0) {
            return;
        }
        el.ss = {};
        el.ss.images = o.images ? o.images : [];
        el.ss.random = o.random && o.random == true || false;
        imgs = el.getElementsByTagName("IMG");
        for (i = 0; i < imgs.length; i++) {
            indic = el.ss.images.length;
            el.ss.images[indic] = {
                src: imgs[i].src,
                caption: imgs[i].title || imgs[i].alt || ""
            };
        }
        if (el.ss.images.length == 0) {
            return;
        }
        el.ss.oP = jQuery.extend(jQuery.iUtil.getPosition(el), jQuery.iUtil.getSize(el));
        el.ss.oPad = jQuery.iUtil.getPadding(el);
        el.ss.oBor = jQuery.iUtil.getBorder(el);
        t = parseInt(el.ss.oPad.t) + parseInt(el.ss.oBor.t);
        b = parseInt(el.ss.oPad.b) + parseInt(el.ss.oBor.b);
        jQuery("img", el).remove();
        el.ss.fadeDuration = o.fadeDuration ? o.fadeDuration : 500;
        if (o.linksPosition || o.linksClass || o.activeLinkClass) {
            el.ss.slideslinks = {};
            container.append("<div class=\"slideshowLinks\"></div>");
            el.ss.slideslinks.o = jQuery(".slideshowLinks", el);
            if (o.linksClass) {
                el.ss.slideslinks.linksClass = o.linksClass;
                el.ss.slideslinks.o.addClass(o.linksClass);
            }
            if (o.activeLinkClass) {
                el.ss.slideslinks.activeLinkClass = o.activeLinkClass;
            }
            el.ss.slideslinks.o.css("position", "absolute").css("width", el.ss.oP.w + "px");
            if (o.linksPosition && o.linksPosition == "top") {
                el.ss.slideslinks.linksPosition = "top";
                el.ss.slideslinks.o.css("top", t + "px");
            } else {
                el.ss.slideslinks.linksPosition = "bottom";
                el.ss.slideslinks.o.css("bottom", b + "px");
            }
            el.ss.slideslinks.linksSeparator = o.linksSeparator ? o.linksSeparator : " ";
            for (var i = 0; i < el.ss.images.length; i++) {
                indic = parseInt(i) + 1;
                el.ss.slideslinks.o.append("<a href=\"#" + indic + o.container + "\" class=\"slideshowLink\" title=\"" + el.ss.images[i].caption + "\">" + indic + "</a>" + (indic != el.ss.images.length ? el.ss.slideslinks.linksSeparator : ""));
            }
            jQuery("a", el.ss.slideslinks.o).bind("click", function () {
                jQuery.islideshow.go({
                    link: this
                });
            });
            el.ss.slideslinks.dimm = jQuery.iUtil.getSize(el.ss.slideslinks.o.get(0));
        }
        if (o.captionPosition || o.captionClass) {
            el.ss.slideCaption = {};
            container.append("<div class=\"slideshowCaption\">&nbsp;</div>");
            el.ss.slideCaption.o = jQuery(".slideshowCaption", el);
            if (o.captionClass) {
                el.ss.slideCaption.captionClass = o.captionClass;
                el.ss.slideCaption.o.addClass(o.captionClass);
            }
            el.ss.slideCaption.o.css("position", "absolute").css("width", el.ss.oP.w + "px");
            if (o.captionPosition && o.captionPosition == "top") {
                el.ss.slideCaption.captionPosition = "top";
                el.ss.slideCaption.o.css("top", (el.ss.slideslinks && el.ss.slideslinks.linksPosition == "top" ? el.ss.slideslinks.dimm.hb + t : t) + "px");
            } else {
                el.ss.slideCaption.captionPosition = "bottom";
                el.ss.slideCaption.o.css("bottom", (el.ss.slideslinks && el.ss.slideslinks.linksPosition == "bottom" ? el.ss.slideslinks.dimm.hb + b : b) + "px");
            }
            el.ss.slideCaption.dimm = jQuery.iUtil.getSize(el.ss.slideCaption.o.get(0));
        }
        if (o.nextslideClass) {
            el.ss.nextslide = {
                nextslideClass: o.nextslideClass
            };
            container.append("<a href=\"#2" + o.container + "\" class=\"slideshowNextSlide\">&nbsp;</a>");
            el.ss.nextslide.o = jQuery(".slideshowNextSlide", el);
            el.ss.nextslide.o.css("position", "absolute").css("display", "none").css("overflow", "hidden").css("fontSize", "30px").addClass(el.ss.nextslide.nextslideClass);
            el.ss.nextslide.o.bind("click", jQuery.islideshow.gonext);
        }
        if (o.prevslideClass) {
            el.ss.prevslide = {
                prevslideClass: o.prevslideClass
            };
            container.append("<a href=\"#0" + o.container + "\" class=\"slideshowPrevslide\">&nbsp;</a>");
            el.ss.prevslide.o = jQuery(".slideshowPrevslide", el);
            el.ss.prevslide.o.css("position", "absolute").css("display", "none").css("overflow", "hidden").css("fontSize", "30px").addClass(el.ss.prevslide.prevslideClass);
            el.ss.prevslide.o.bind("click", jQuery.islideshow.goprev);
        }
        container.prepend("<div class=\"slideshowHolder\"></div>");
        el.ss.holder = jQuery(".slideshowHolder", el);
        el.ss.holder.css("position", "absolute").css("top", "0px").css("left", "0px").css("display", "none");
        if (o.loader) {
            container.prepend("<div class=\"slideshowLoader\" style=\"display: none;\"><img src=\"" + o.loader + "\" /></div>");
            el.ss.loader = jQuery(".slideshowLoader", el);
            el.ss.loader.css("position", "absolute");
            var img = new Image;
            img.slideshow = o.container;
            img.src = o.loader;
            if (img.complete) {
                img.onload = null;
                jQuery.islideshow.go({
                    loader: img
                });
            } else {
                img.onload = function () {
                    jQuery.islideshow.go({
                        loader: this
                    });
                };
            }
        } else {
            jQuery.islideshow.go({
                container: el
            });
        }
        if (o.autoplay) {
            time = parseInt(o.autoplay) * 1000;
        }
        jQuery.islideshow.slideshows[o.container] = o.autoplay ? window.setInterval("jQuery.islideshow.timer('" + o.container + "')", time) : null;
    }
};
jQuery.slideshow = jQuery.islideshow.build;
jQuery.iSort = {
    changed: [],
    collected: {},
    helper: false,
    inFrontOf: null,
    start: function () {
        if (jQuery.iDrag.dragged == null) {
            return;
        }
        var shs, margins, c, cs;
        jQuery.iSort.helper.get(0).className = jQuery.iDrag.dragged.dragCfg.hpc;
        shs = jQuery.iSort.helper.get(0).style;
        shs.display = "block";
        jQuery.iSort.helper.oC = jQuery.extend(jQuery.iUtil.getPosition(jQuery.iSort.helper.get(0)), jQuery.iUtil.getSize(jQuery.iSort.helper.get(0)));
        shs.width = jQuery.iDrag.dragged.dragCfg.oC.wb + "px";
        shs.height = jQuery.iDrag.dragged.dragCfg.oC.hb + "px";
        margins = jQuery.iUtil.getMargins(jQuery.iDrag.dragged);
        shs.marginTop = margins.t;
        shs.marginRight = margins.r;
        shs.marginBottom = margins.b;
        shs.marginLeft = margins.l;
        if (jQuery.iDrag.dragged.dragCfg.ghosting == true) {
            c = jQuery.iDrag.dragged.cloneNode(true);
            cs = c.style;
            cs.marginTop = "0px";
            cs.marginRight = "0px";
            cs.marginBottom = "0px";
            cs.marginLeft = "0px";
            cs.display = "block";
            jQuery.iSort.helper.empty().append(c);
        }
        jQuery(jQuery.iDrag.dragged).after(jQuery.iSort.helper.get(0));
        jQuery.iDrag.dragged.style.display = "none";
    },
    check: function (e) {
        if (!e.dragCfg.so && jQuery.iDrop.overzone.sortable) {
            if (e.dragCfg.onStop) {
                e.dragCfg.onStop.apply(dragged);
            }
            jQuery(e).css("position", e.dragCfg.initialPosition || e.dragCfg.oP);
            jQuery(e).DraggableDestroy();
            jQuery(jQuery.iDrop.overzone).SortableAddItem(e);
        }
        jQuery.iSort.helper.removeClass(e.dragCfg.hpc).html("&nbsp;");
        jQuery.iSort.inFrontOf = null;
        var shs = jQuery.iSort.helper.get(0).style;
        shs.display = "none";
        jQuery.iSort.helper.after(e);
        if (e.dragCfg.fx > 0) {
            jQuery(e).fadeIn(e.dragCfg.fx);
        }
        jQuery("body").append(jQuery.iSort.helper.get(0));
        var ts = [];
        var fnc = false;
        for (var i = 0; i < jQuery.iSort.changed.length; i++) {
            var iEL = jQuery.iDrop.zones[jQuery.iSort.changed[i]].get(0);
            var id = jQuery.attr(iEL, "id");
            var ser = jQuery.iSort.serialize(id);
            if (iEL.dropCfg.os != ser.hash) {
                iEL.dropCfg.os = ser.hash;
                if (fnc == false && iEL.dropCfg.onChange) {
                    fnc = iEL.dropCfg.onChange;
                }
                ser.id = id;
                ts[ts.length] = ser;
            }
        }
        jQuery.iSort.changed = [];
        if (fnc != false && ts.length > 0) {
            fnc(ts);
        }
    },
    checkhover: function (e, o) {
        if (!jQuery.iDrag.dragged) {
            return;
        }
        var cur = false;
        var i = 0;
        if (e.dropCfg.el.size() > 0) {
            for (i = e.dropCfg.el.size(); i > 0; i--) {
                if (e.dropCfg.el.get(i - 1) != jQuery.iDrag.dragged) {
                    if (!e.sortCfg.floats) {
                        if (e.dropCfg.el.get(i - 1).pos.y + e.dropCfg.el.get(i - 1).pos.hb / 2 > jQuery.iDrag.dragged.dragCfg.ny) {
                            cur = e.dropCfg.el.get(i - 1);
                        } else {
                            break;
                        }
                    } else {
                        if (e.dropCfg.el.get(i - 1).pos.x + e.dropCfg.el.get(i - 1).pos.wb / 2 > jQuery.iDrag.dragged.dragCfg.nx && e.dropCfg.el.get(i - 1).pos.y + e.dropCfg.el.get(i - 1).pos.hb / 2 > jQuery.iDrag.dragged.dragCfg.ny) {
                            cur = e.dropCfg.el.get(i - 1);
                        }
                    }
                }
            }
        }
        if (cur && jQuery.iSort.inFrontOf != cur) {
            jQuery.iSort.inFrontOf = cur;
            jQuery(cur).before(jQuery.iSort.helper.get(0));
        } else if (!cur && (jQuery.iSort.inFrontOf != null || jQuery.iSort.helper.get(0).parentNode != e)) {
            jQuery.iSort.inFrontOf = null;
            jQuery(e).append(jQuery.iSort.helper.get(0));
        }
        jQuery.iSort.helper.get(0).style.display = "block";
    },
    measure: function (e) {
        if (jQuery.iDrag.dragged == null) {
            return;
        }
        e.dropCfg.el.each(function () {
            this.pos = jQuery.extend(jQuery.iUtil.getSizeLite(this), jQuery.iUtil.getPositionLite(this));
        });
    },
    serialize: function (s) {
        var i;
        var h = "";
        var o = {};
        if (s) {
            if (jQuery.iSort.collected[s]) {
                o[s] = [];
                jQuery("#" + s + " ." + jQuery.iSort.collected[s]).each(function () {
                    if (h.length > 0) {
                        h += "&";
                    }
                    h += s + ("[]=" + jQuery.attr(this, "id"));
                    o[s][o[s].length] = jQuery.attr(this, "id");
                });
            } else {
                for (a in s) {
                    if (jQuery.iSort.collected[s[a]]) {
                        o[s[a]] = [];
                        jQuery("#" + s[a] + " ." + jQuery.iSort.collected[s[a]]).each(function () {
                            if (h.length > 0) {
                                h += "&";
                            }
                            h += s[a] + ("[]=" + jQuery.attr(this, "id"));
                            o[s[a]][o[s[a]].length] = jQuery.attr(this, "id");
                        });
                    }
                }
            }
        } else {
            for (i in jQuery.iSort.collected) {
                o[i] = [];
                jQuery("#" + i + " ." + jQuery.iSort.collected[i]).each(function () {
                    if (h.length > 0) {
                        h += "&";
                    }
                    h += i + ("[]=" + jQuery.attr(this, "id"));
                    o[i][o[i].length] = jQuery.attr(this, "id");
                });
            }
        }
        return {
            hash: h,
            o: o
        };
    },
    addItem: function (e) {
        if (!e.childNodes) {
            return;
        }
        return this.each(function () {
            if (!this.sortCfg || !jQuery(e).is("." + this.sortCfg.accept)) {
                jQuery(e).addClass(this.sortCfg.accept);
            }
            jQuery(e).Draggable(this.sortCfg.dragCfg);
        });
    },
    destroy: function () {
        return this.each(function () {
            jQuery("." + this.sortCfg.accept).DraggableDestroy();
            jQuery(this).DroppableDestroy();
            this.sortCfg = null;
            this.isSortable = null;
        });
    },
    build: function (o) {
        if (o.accept && jQuery.iUtil && jQuery.iDrag && jQuery.iDrop) {
            if (!jQuery.iSort.helper) {
                jQuery("body", document).append("<div id=\"sortHelper\">&nbsp;</div>");
                jQuery.iSort.helper = jQuery("#sortHelper");
                jQuery.iSort.helper.get(0).style.display = "none";
            }
            this.Droppable({
                accept: o.accept,
                activeclass: o.activeclass ? o.activeclass : false,
                hoverclass: o.hoverclass ? o.hoverclass : false,
                helperclass: o.helperclass ? o.helperclass : false,
                onHover: o.onHover || o.onhover,
                onOut: o.onOut || o.onout,
                sortable: true,
                onChange: o.onChange || o.onchange,
                fx: o.fx ? o.fx : false,
                ghosting: o.ghosting ? true : false,
                tolerance: o.tolerance ? o.tolerance : "intersect"
            });
            return this.each(function () {
                var dragCfg = {
                    revert: o.revert ? true : false,
                    zindex: 3000,
                    opacity: o.opacity ? parseFloat(o.opacity) : false,
                    hpc: o.helperclass ? o.helperclass : false,
                    fx: o.fx ? o.fx : false,
                    so: true,
                    ghosting: o.ghosting ? true : false,
                    handle: o.handle ? o.handle : null,
                    containment: o.containment ? o.containment : null,
                    onStart: o.onStart && o.onStart.constructor == Function ? o.onStart : false,
                    onDrag: o.onDrag && o.onDrag.constructor == Function ? o.onDrag : false,
                    onStop: o.onStop && o.onStop.constructor == Function ? o.onStop : false,
                    axis: /vertically|horizontally/.test(o.axis) ? o.axis : false,
                    snapDistance: o.snapDistance ? parseInt(o.snapDistance) || 0 : false,
                    cursorAt: o.cursorAt ? o.cursorAt : false
                };
                jQuery("." + o.accept, this).Draggable(dragCfg);
                this.isSortable = true;
                this.sortCfg = {
                    accept: o.accept,
                    revert: o.revert ? true : false,
                    zindex: 3000,
                    opacity: o.opacity ? parseFloat(o.opacity) : false,
                    hpc: o.helperclass ? o.helperclass : false,
                    fx: o.fx ? o.fx : false,
                    so: true,
                    ghosting: o.ghosting ? true : false,
                    handle: o.handle ? o.handle : null,
                    containment: o.containment ? o.containment : null,
                    floats: o.floats ? true : false,
                    dragCfg: dragCfg
                };
            });
        }
    }
};
jQuery.fn.extend({
    Sortable: jQuery.iSort.build,
    SortableAddItem: jQuery.iSort.addItem,
    SortableDestroy: jQuery.iSort.destroy
});
jQuery.SortSerialize = jQuery.iSort.serialize;
jQuery.iTooltip = {
    current: null,
    focused: false,
    oldTitle: null,
    focus: function (e) {
        jQuery.iTooltip.focused = true;
        jQuery.iTooltip.show(e, this, true);
    },
    hidefocused: function (e) {
        if (jQuery.iTooltip.current != this) {
            return;
        }
        jQuery.iTooltip.focused = false;
        jQuery.iTooltip.hide(e, this);
    },
    show: function (e, el, focused) {
        if (jQuery.iTooltip.current != null) {
            return;
        }
        if (!el) {
            el = this;
        }
        jQuery.iTooltip.current = el;
        pos = jQuery.extend(jQuery.iUtil.getPosition(el), jQuery.iUtil.getSize(el));
        jEl = jQuery(el);
        title = jEl.attr("title");
        href = jEl.attr("href");
        if (title) {
            jQuery.iTooltip.oldTitle = title;
            jEl.attr("title", "");
            jQuery("#tooltipTitle").html(title);
            if (href) {
                jQuery("#tooltipURL").html(href.replace("http://", ""));
            } else {
                jQuery("#tooltipURL").html("");
            }
            helper = jQuery("#tooltipHelper");
            if (el.tooltipCFG.className) {
                helper.get(0).className = el.tooltipCFG.className;
            } else {
                helper.get(0).className = "";
            }
            helperSize = jQuery.iUtil.getSize(helper.get(0));
            filteredPosition = focused && el.tooltipCFG.position == "mouse" ? "bottom" : el.tooltipCFG.position;
            switch (filteredPosition) {
            case "top":
                ny = pos.y - helperSize.hb;
                nx = pos.x;
                break;
            case "left":
                ny = pos.y;
                nx = pos.x - helperSize.wb;
                break;
            case "right":
                ny = pos.y;
                nx = pos.x + pos.wb;
                break;
            case "mouse":
                jQuery("body").bind("mousemove", jQuery.iTooltip.mousemove);
                pointer = jQuery.iUtil.getPointer(e);
                ny = pointer.y + 15;
                nx = pointer.x + 15;
                break;
            default:
                ny = pos.y + pos.hb;
                nx = pos.x;
                break;
            }
            helper.css({
                top: ny + "px",
                left: nx + "px"
            });
            if (el.tooltipCFG.delay == false) {
                helper.show();
            } else {
                helper.fadeIn(el.tooltipCFG.delay);
            }
            if (el.tooltipCFG.onShow) {
                el.tooltipCFG.onShow.apply(el);
            }
            jEl.bind("mouseout", jQuery.iTooltip.hide).bind("blur", jQuery.iTooltip.hidefocused);
        }
    },
    mousemove: function (e) {
        if (jQuery.iTooltip.current == null) {
            jQuery("body").unbind("mousemove", jQuery.iTooltip.mousemove);
            return;
        }
        pointer = jQuery.iUtil.getPointer(e);
        jQuery("#tooltipHelper").css({
            top: pointer.y + 15 + ("px"),
            left: pointer.x + 15 + ("px")
        });
    },
    hide: function (e, el) {
        if (!el) {
            el = this;
        }
        if (jQuery.iTooltip.focused != true && jQuery.iTooltip.current == el) {
            jQuery.iTooltip.current = null;
            jQuery("#tooltipHelper").fadeOut(1);
            jQuery(el).attr("title", jQuery.iTooltip.oldTitle).unbind("mouseout", jQuery.iTooltip.hide).unbind("blur", jQuery.iTooltip.hidefocused);
            if (el.tooltipCFG.onHide) {
                el.tooltipCFG.onHide.apply(el);
            }
            jQuery.iTooltip.oldTitle = null;
        }
    },
    build: function (options) {
        if (!jQuery.iTooltip.helper) {
            jQuery("body").append("<div id=\"tooltipHelper\"><div id=\"tooltipTitle\"></div><div id=\"tooltipURL\"></div></div>");
            jQuery("#tooltipHelper").css({
                position: "absolute",
                zIndex: 3000,
                display: "none"
            });
            jQuery.iTooltip.helper = true;
        }
        return this.each(function () {
            if (jQuery.attr(this, "title")) {
                this.tooltipCFG = {
                    position: /top|bottom|left|right|mouse/.test(options.position) ? options.position : "bottom",
                    className: options.className ? options.className : false,
                    delay: options.delay ? options.delay : false,
                    onShow: options.onShow && options.onShow.constructor == Function ? options.onShow : false,
                    onHide: options.onHide && options.onHide.constructor == Function ? options.onHide : false
                };
                var el = jQuery(this);
                el.bind("mouseover", jQuery.iTooltip.show);
                el.bind("focus", jQuery.iTooltip.focus);
            }
        });
    }
};
jQuery.fn.ToolTip = jQuery.iTooltip.build;
jQuery.iTTabs = {
    doTab: function (e) {
        pressedKey = e.charCode || e.keyCode || -1;
        if (pressedKey == 9) {
            if (window.event) {
                window.event.cancelBubble = true;
                window.event.returnValue = false;
            } else {
                e.preventDefault();
                e.stopPropagation();
            }
            if (this.createTextRange) {
                document.selection.createRange().text = "\t";
                this.onblur = function () {
                    this.focus();
                    this.onblur = null;
                };
            } else if (this.setSelectionRange) {
                start = this.selectionStart;
                end = this.selectionEnd;
                this.value = this.value.substring(0, start) + ("\t" + this.value.substr(end));
                this.setSelectionRange(start + 1, start + 1);
                this.focus();
            }
            return false;
        }
    },
    destroy: function () {
        return this.each(function () {
            if (this.hasTabsEnabled && this.hasTabsEnabled == true) {
                jQuery(this).unbind("keydown", jQuery.iTTabs.doTab);
                this.hasTabsEnabled = false;
            }
        });
    },
    build: function () {
        return this.each(function () {
            if (this.tagName == "TEXTAREA" && (!this.hasTabsEnabled || this.hasTabsEnabled == false)) {
                jQuery(this).bind("keydown", jQuery.iTTabs.doTab);
                this.hasTabsEnabled = true;
            }
        });
    }
};
jQuery.fn.extend({
    EnableTabs: jQuery.iTTabs.build,
    DisableTabs: jQuery.iTTabs.destroy
});
jQuery.iUtil = {
    getPosition: function (e) {
        var x = 0;
        var y = 0;
        var es = e.style;
        var restoreStyles = false;
        if (jQuery(e).css("display") == "none") {
            var oldVisibility = es.visibility;
            var oldPosition = es.position;
            restoreStyles = true;
            es.visibility = "hidden";
            es.display = "block";
            es.position = "absolute";
        }
        var el = e;
        while (el) {
            x += el.offsetLeft + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderLeftWidth) || 0 : 0);
            y += el.offsetTop + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderTopWidth) || 0 : 0);
            el = el.offsetParent;
        }
        el = e;
        while (el && el.tagName && el.tagName.toLowerCase() != "body") {
            x -= el.scrollLeft || 0;
            y -= el.scrollTop || 0;
            el = el.parentNode;
        }
        if (restoreStyles == true) {
            es.display = "none";
            es.position = oldPosition;
            es.visibility = oldVisibility;
        }
        return {
            x: x,
            y: y
        };
    },
    getPositionLite: function (el) {
        var x = 0,
            y = 0;
        while (el) {
            x += el.offsetLeft || 0;
            y += el.offsetTop || 0;
            el = el.offsetParent;
        }
        return {
            x: x,
            y: y
        };
    },
    getSize: function (e) {
        var w = jQuery.css(e, "width");
        var h = jQuery.css(e, "height");
        var wb = 0;
        var hb = 0;
        var es = e.style;
        if (jQuery(e).css("display") != "none") {
            wb = e.offsetWidth;
            hb = e.offsetHeight;
        } else {
            var oldVisibility = es.visibility;
            var oldPosition = es.position;
            es.visibility = "hidden";
            es.display = "block";
            es.position = "absolute";
            wb = e.offsetWidth;
            hb = e.offsetHeight;
            es.display = "none";
            es.position = oldPosition;
            es.visibility = oldVisibility;
        }
        return {
            w: w,
            h: h,
            wb: wb,
            hb: hb
        };
    },
    getSizeLite: function (el) {
        return {
            wb: el.offsetWidth || 0,
            hb: el.offsetHeight || 0
        };
    },
    getClient: function (e) {
        var h, w, de;
        if (e) {
            w = e.clientWidth;
            h = e.clientHeight;
        } else {
            de = document.documentElement;
            w = window.innerWidth || self.innerWidth || de && de.clientWidth || document.body.clientWidth;
            h = window.innerHeight || self.innerHeight || de && de.clientHeight || document.body.clientHeight;
        }
        return {
            w: w,
            h: h
        };
    },
    getScroll: function (e) {
        var t = 0,
            l = 0,
            w = 0,
            h = 0,
            iw = 0,
            ih = 0;
        if (e && e.nodeName.toLowerCase() != "body") {
            t = e.scrollTop;
            l = e.scrollLeft;
            w = e.scrollWidth;
            h = e.scrollHeight;
            iw = 0;
            ih = 0;
        } else {
            if (document.documentElement) {
                t = document.documentElement.scrollTop;
                l = document.documentElement.scrollLeft;
                w = document.documentElement.scrollWidth;
                h = document.documentElement.scrollHeight;
            } else if (document.body) {
                t = document.body.scrollTop;
                l = document.body.scrollLeft;
                w = document.body.scrollWidth;
                h = document.body.scrollHeight;
            }
            iw = self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;
            ih = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
        }
        return {
            t: t,
            l: l,
            w: w,
            h: h,
            iw: iw,
            ih: ih
        };
    },
    getMargins: function (e, toInteger) {
        var el = jQuery(e);
        var t = el.css("marginTop") || "";
        var r = el.css("marginRight") || "";
        var b = el.css("marginBottom") || "";
        var l = el.css("marginLeft") || "";
        if (toInteger) {
            return {
                t: parseInt(t) || 0,
                r: parseInt(r) || 0,
                b: parseInt(b) || 0,
                l: parseInt(l)
            };
        } else {
            return {
                t: t,
                r: r,
                b: b,
                l: l
            };
        }
    },
    getPadding: function (e, toInteger) {
        var el = jQuery(e);
        var t = el.css("paddingTop") || "";
        var r = el.css("paddingRight") || "";
        var b = el.css("paddingBottom") || "";
        var l = el.css("paddingLeft") || "";
        if (toInteger) {
            return {
                t: parseInt(t) || 0,
                r: parseInt(r) || 0,
                b: parseInt(b) || 0,
                l: parseInt(l)
            };
        } else {
            return {
                t: t,
                r: r,
                b: b,
                l: l
            };
        }
    },
    getBorder: function (e, toInteger) {
        var el = jQuery(e);
        var t = el.css("borderTopWidth") || "";
        var r = el.css("borderRightWidth") || "";
        var b = el.css("borderBottomWidth") || "";
        var l = el.css("borderLeftWidth") || "";
        if (toInteger) {
            return {
                t: parseInt(t) || 0,
                r: parseInt(r) || 0,
                b: parseInt(b) || 0,
                l: parseInt(l) || 0
            };
        } else {
            return {
                t: t,
                r: r,
                b: b,
                l: l
            };
        }
    },
    getPointer: function (event) {
        var x = event.pageX || event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) || 0;
        var y = event.pageY || event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) || 0;
        return {
            x: x,
            y: y
        };
    },
    traverseDOM: function (nodeEl, func) {
        func(nodeEl);
        nodeEl = nodeEl.firstChild;
        while (nodeEl) {
            jQuery.iUtil.traverseDOM(nodeEl, func);
            nodeEl = nodeEl.nextSibling;
        }
    },
    purgeEvents: function (nodeEl) {
        jQuery.iUtil.traverseDOM(nodeEl, function (el) {
            for (var attr in el) {
                if (typeof el[attr] === "function") {
                    el[attr] = null;
                }
            }
        });
    },
    centerEl: function (el, axis) {
        var clientScroll = jQuery.iUtil.getScroll();
        var windowSize = jQuery.iUtil.getSize(el);
        if (!axis || axis == "vertically") {
            jQuery(el).css({
                top: clientScroll.t + (Math.max(clientScroll.h, clientScroll.ih) - clientScroll.t - windowSize.hb) / 2 + ("px")
            });
        }
        if (!axis || axis == "horizontally") {
            jQuery(el).css({
                left: clientScroll.l + (Math.max(clientScroll.w, clientScroll.iw) - clientScroll.l - windowSize.wb) / 2 + ("px")
            });
        }
    },
    fixPNG: function (el, emptyGIF) {
        var images = jQuery("img[@src*=\"png\"]", el || document),
            png;
        images.each(function () {
            png = this.src;
            this.src = emptyGIF;
            this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + png + "')";
        });
    }
};
[].indexOf || (Array.prototype.indexOf = function (v, n) {
    n = n == null ? 0 : n;
    var m = this.length;
    for (var i = n; i < m; i++) {
        if (this[i] == v) {
            return i;
        }
    }
    return -1;
});
