
    var $ = function(id) {
        return document.getElementById(id);
    };
    Function.prototype.bind = function() {
        if (arguments.length < 2 && arguments[0] == null) {
                return this;
        }
    var __method = this, args = $A(arguments), object = args.shift();
    return function() {
                return __method.apply(object, args.concat($A(arguments)));
    };
    };
    var isArray = function(testVar) {
        return Array == testVar.constructor ? 1 : String != testVar.constructor && null != testVar.length && !testVar.alert && !testVar.nodeType ? 2 : 0;
    };
    var $A = function(variable) {
        switch (isArray(variable)) {
                case 1:
                        return variable;
                case 2:
                        var arr = [], i = -1, len = variable.length;
                        while (++i < len) {
                                arr[i] = variable[i];
                        }
                        return arr;
                default:
                        return [variable];
        }
    };
    var addClass = function(elem, className) {
        if ((" " + elem.className + " ").indexOf(" " + className + " ") == -1) {
                if (elem.className == "") {
                        elem.className = className;
                } else {
                        elem.className += (" " + className);
                }
        }
    };
    var removeClass = function(elem, className) {
        var newClass = (" " + elem.className + " ").replace(" " + className + " ", " ");
        elem.className = newClass.substr(1, newClass.length - 2);
    };
    var addEvent = function(elem, eventName, handler) {
        if (elem.addEventListener) {
                elem.addEventListener(eventName, handler, false);
        } else if (elem.attachEvent) {
                elem.attachEvent("on" + eventName, handler);
        }
    };
    function Slide(menus, contents, css, eventName, interval) {
        var curSeq = 0, length = contents.length, timerIds = [], isStopped;
        if (menus && length != menus.length) {
                throw new Error("the amount of menus and contents is not equal");
        }
        
        var hide = function(seq) {
                removeClass(contents[seq], css);
                if (menus) {
                        removeClass(menus[seq], css);
                }
        };
        
        var show = function(seq) {
                addClass(contents[seq], css);
                if (menus) {
                        addClass(menus[seq], css);
                }
                curSeq = seq;
        };
        
        this.showNext = function() {
                var next = curSeq + 1;
                if (next >= length) {
                        next = 0;
                }
                var i = length;
                while (--i >= 0) {
                        if (i != next) {
                                hide(i);
                        } else {
                                show(i);
                        }
                }
        };
        
        this.change = function(event) {
                if (this != menus[curSeq]) {
                        var i = length;
                        while (--i >= 0) {
                                if (menus[i] != this) {
                                        hide(i);
                                } else {
                                        show(i);
                                }
                        }
                }
                e = window.event || event;
                e.cancelBubble = true;
        };
        
        this.play = function(speed) {
                isStopped = false;
                timerIds.push(setInterval(this.showNext.bind(this), speed));
        };
        
        this.pause = function() {
                isStopped = true;
                var i = length;
                while (--i >= 0) {
                        clearInterval(timerIds[i]);
                        timerIds.splice(i, 1);
                }
        };
        
        var i = length;
        while (--i >= 0) {
                addEvent(menus[i], eventName, this.change.bind(menus[i]));
                if (interval > 0) {
                        addEvent(menus[i], "mouseover", this.pause);
                        addEvent(menus[i], "mouseout", this.play.bind(this, interval));
                }
        }
        if (interval > 0) {
                this.play(interval);
        }
    }
    var focusImg = new Slide($("focusMenu").getElementsByTagName("li"), $("focusLeft").getElementsByTagName("li"), "current", "mouseover", 3000);