var Tate = {};

Tate.WindowGridManager = new Class({
    options: {
        snapToGrid: false
    },
    presets: {
        CONTAINER_ID: 'tate_doc'
    },
    initialize: function (options) {
        this.setOptions(options);
        window.addEvent('domready', this.doOnLoad.bind(this));
    },
    doOnLoad: function () {
        this.resizeNode = $(this.presets.CONTAINER_ID);
        this.widthFX = new Fx.Style(this.resizeNode, 'width', {
            wait: false,
            duration: 500,
            transition: Fx.Transitions.Quart.easeOut
        })
        this.resizeTimer = new Tate.Timer(0);
        this.resizeTimer.addEvent('onExpire', this.doGridResize.bind(this));
        window.addEvent('resize', this.resizeTimer.restart.bind(this.resizeTimer));
        if (window.ie == true) {
            this.doGridResize();
            window.onbeforeprint = this.doBeforePrint.bind(this);
            window.onafterprint = this.doAfterPrint.bind(this);
        }
    },
    doBeforePrint: function () {
        try {
            this.resizeNode.setStyle('width', 'auto');
        } catch (e) {}
    },
    doAfterPrint: function () {
        this.doGridResize();
    },
    getGridWidth: function (state) {
        var offset = 0;
        if (state == 'init') {
            offset = (window.webkit == true) ? 15 : 17;
        }
        var bw = window.getWidth();
        bw = bw - offset;
        var gw = 0;
        if (this.options.snapToGrid == true) {
            if (bw < 1062) {
                gw = 910;
            } else if (bw < 1138) {
                gw = 986;
            } else if (bw < 1214) {
                gw = 1062;
            } else {
                gw = 1138;
            }
        } else {
            if (bw < 987) {
                gw = 987;
            } else if (bw > 1280) {
                gw = 1280;
            } else {
                if (state == 'init') gw = null;
                else
                gw = bw;
            }
        }
        return gw;
    },
    doGridResize: function () {
        var gw = this.getGridWidth('resize');
        this.widthFX.stop();
        if (gw) this.widthFX.start(gw);
    },
    doInitPageLoad: function () {
        document.write('<style type="text/css"> #' + this.presets.CONTAINER_ID + ' { width: ' + this.getGridWidth('init') + 'px;}</style>');
    }
});
Tate.WindowGridManager.implement(new Options);

Tate.ToolTip = new Class({
    initialize: function (el) {
        this.trigger = el;
        this.trigger_container = el.getParent();
        this.tooltip = $E('.tate_tooltip', this.trigger_container);
        if ($defined($('tate_tooltip_container'))) {
            this.container = $('tate_tooltip_container');
        } else {
            this.container = new Element('div', {
                'id': 'tate_tooltip_container'
            }).inject(document.body);
        }
        this.trigger.addEvent('mouseenter', this.show.bind(this));
        this.trigger.addEvent('mouseleave', this.hide.bind(this));
        this.container.addEvent('mouseleave', this.hide.bind(this));
        this.trigger.onclick = function (event) {
            var evt = new Event(event);
            evt.preventDefault();
        }
    },
    show: function (event) {
        var event = new Event(event);
        var position = this.trigger_container.getCoordinates();
        if ($E('.tate_tooltip', this.container)) {
            $E('.tate_tooltip', this.container).remove();
        }
        this.container.removeAttribute('style');
        this.tooltip.clone().injectTop(this.container);
        var toolPosition = $E('.tate_tooltip', this.container).getCoordinates();
        if (position.left + toolPosition.width + 20 < $('tate_doc').getSize().size.x) {
            this.container.setStyles({
                'left': position.left + 15,
                'top': position.top + 15
            });
        } else {
            this.container.setStyles({
                'left': position.left - 110,
                'top': position.top + 15
            });
        }
        this.container.addClass('active');
    },
    hide: function (e) {
        if (!this.container.hasChild(e.relatedTarget) && !this.trigger_container.hasChild(e.relatedTarget)) {
            this.container.removeClass('active');
            if ($E('.tate_tooltip', this.container)) {
                $E('.tate_tooltip', this.container).remove();
            }
            this.container.removeAttribute('style');
        }
    }
})

Tate.Timer = new Class({
    msecs: 1000,
    onExpire: Class.empty,
    isRunning: false,
    initialize: function (msecs) {
        ($defined(msecs)) ? this.msecs = msecs : null;
    },
    start: function () {
        var ref = this;
        this.isRunning = true;
        this.interval = setTimeout(function () {
            ref.fireExpire();
        }, this.msecs);
        return true;
    },
    stop: function () {
        this.isRunning = false;
        clearTimeout(this.interval);
        return true;
    },
    restart: function () {
        this.stop();
        this.start();
        return true;
    },
    fireExpire: function () {
        this.stop();
        this.fireEvent('onExpire');
        return true;
    }
});
Tate.Timer.implement(new Events);
Tate.TextFileLoader = XHR.extend({
    fileContent: '',
    onFileLoad: Class.empty,
    onSuccess: function () {
        this.doTest();
    },
    onFailure: function () {
        this.doTest();
    },
    doFileLoad: function (url) {
        this.send(url);
    },
    doTest: function () {
        if ($defined(this.transport.responseText)) {
            this.fileContent = this.transport.responseText;
            this.fireEvent('onFileLoad');
        } else {
            this.fileContent = 'Could not load';
            this.fireEvent('onFailure');
        }
    },
    evalScripts: function () {
        var scripts = [];
        var regexp = /<script[^>]*>([\s\S]*?)<\/script>/gi;
        while ((script = regexp.exec(this.fileContent))) scripts.push(script[1]);
        scripts = scripts.join('\n');
        if (scripts)(window.execScript) ? window.execScript(scripts) : window.setTimeout(scripts, 0);
    },
    evalStyles: function () {
        var styles = [];
        var styregexp = /<style[^>]*>([\s\S]*?)<\/style>/gi;
        while ((style = styregexp.exec(this.fileContent))) styles.push(style[1]);
        styles = styles.join('\n');
        if (styles) {
            var snode = new Element('style', {
                'type': 'text/css'
            });
            snode.setHTML(styles);
            $$('body')[0].adopt(snode)
        }
    }
});

Tate.TextDrawer = new Class({
    presets: {
        HANDLE_SELECTOR: '.tate_td_hed',
        CONTAINER_SELECTOR: '.tate_td_content'
    },
    initialize: function (elem) {
        this.contentContainer = elem.getElements(this.presets.CONTAINER_SELECTOR)[0];
        this.slideTrans = new Fx.Slide(this.contentContainer, {
            duration: 500
        });
        this.slideTrans.hide();
        this.handle = elem.getElements(this.presets.HANDLE_SELECTOR)[0];
        this.handle.addEvent('click', this.doToggle.bind(this));
    },
    doToggle: function () {
        this.slideTrans.stop();
        this.slideTrans.toggle();
    }
});

Tate.SortTable = new Class({
    options: {
        sortStart: 0,
        sortBy: 'ASC',
        hasFilter: true
    },
    initialize: function (table, options) {
        this.setOptions(options);
        this.table = table;
        this.tableHead = this.table.getElement('#tate_sortTable_thead');
        this.tBody = this.table.getElement('#tate_sortTable_tbody');
        this.th = $$('.tate_sortTable_sortRow li.tate_sortTable_th');
        this.tr = $$('.tate_sortTable_tr');
        this.sortRows = $$('.tate_sortTable_titleRow');
        for (var i = 0; i < this.sortRows.length; i++) {
            var cells = this.sortRows[i].getElements('li');
            this.sortRows[i].dataVals = [];
            for (var j = 0; j < cells.length; j++) {
                this.sortRows[i].dataVals.push(cells[j].getText().trim())
            }
        }
        this.filterDrops = [];
        this.noResultsMsgRow = $$('.tate_sortTable_noResults');
        if (this.options.hasFilter) {
            var dds = $$('.tate_sortTable_ddFilter');
            for (var i = 0; i < dds.length; i++) {
                var dd = new Tate.DropDown(dds[i]);
                dd.addEvent('onChange', this.runFilter.pass([dd], this));
                this.filterDrops.push(dd);
            }
        }
        for (var i = 0; i < this.th.length; i++) {
            this.th[i].getElements('a')[0].onclick = function (event) {
                var evt = new Event(event);
                evt.preventDefault();
            }
        }
        this.th.each(function (el, i) {
            if (el.hasClass('string') || el.hasClass('date') || el.hasClass('number')) {
                el.getElements('a')[0].addEvent('click', this.sort.bind(this, i));
                el.getdate = function (str) {
                    var strDateVal = new Date(str);
                    return strDateVal.valueOf();
                }
                el.findData = function (elem) {
                    var child = elem.getFirst();
                    if (child) {
                        return el.findData(child);
                    } else {
                        return elem.innerHTML.trim();
                    }
                }
                el.compare = function (a, b) {
                    var1 = el.findData(a.getChildren(el)[i]);
                    var2 = el.findData(b.getChildren(el)[i]);
                    if (el.hasClass('number')) {
                        var1 = parseFloat(var1);
                        var2 = parseFloat(var2);
                        if (el.sortBy == 'ASC') {
                            return var1 - var2;
                        } else {
                            return var2 - var1;
                        }
                    } else if (el.hasClass('string')) {
                        var1 = var1.toUpperCase();
                        var2 = var2.toUpperCase();
                        if (var1 == var2) return 0;
                        if (el.sortBy == 'ASC') {
                            if (var1 < var2) return -1;
                        } else {
                            if (var1 > var2) return -1;
                        }
                        return 1;
                    } else if (el.hasClass('date')) {
                        var1 = parseFloat(el.getdate(var1));
                        var2 = parseFloat(el.getdate(var2));
                        if (el.sortBy == 'ASC') {
                            return var1 - var2;
                        } else {
                            return var2 - var1;
                        }
                    }
                }
            }
        }, this);
    },
    sort: function (index) {
        this.options.sortStart = index;
        var el = this.th[index];
        this.th.each(function (e, i) {
            if (i != index) {
                e.removeClass('tate_sortTable_sortedASC');
                e.removeClass('tate_sortTable_sortedDESC');
            }
        });
        if (el.hasClass('tate_sortTable_sortedASC')) {
            el.removeClass('tate_sortTable_sortedASC');
            el.addClass('tate_sortTable_sortedDESC');
            el.sortBy = 'DESC';
        } else if (el.hasClass('tate_sortTable_sortedDESC')) {
            el.removeClass('tate_sortTable_sortedDESC');
            el.addClass('tate_sortTable_sortedASC');
            el.sortBy = 'ASC';
        } else {
            if (this.options.sortBy == 'ASC') {
                el.addClass('tate_sortTable_sortedASC');
                el.sortBy = 'ASC';
            } else if (this.options.sortBy == 'DESC') {
                el.addClass('tate_sortTable_sortedDESC');
                el.sortBy = 'DESC';
            }
        }
        this.sortRows.sort(el.compare);
        this.sortRows.getParent().injectInside(this.tBody);
    },
    runFilter: function (dd) {
        if (dd.value == 'Show All') {
            for (var i = 0; i < this.sortRows.length; i++) {
                this.sortRows[i].getParent().removeClass('subListHide');
                this.sortRows[i].removeClass('tate_sortTable_hide');
            }
        } else {
            var filterVars = [];
            var showNoFilterResults = true;
            for (var j = 0; j < this.sortRows.length; j++) {
                if (this.doFilter(this.sortRows[j], dd.value) == true) {
                    showNoFilterResults = false;
                }
            }
            if (showNoFilterResults == true) {
                this.noResultsMsgRow.setStyle('display', 'block');
            } else {
                this.noResultsMsgRow.setStyle('display', 'none');
            }
        }
    },
    doFilter: function (el, filterValue) {
        var weGotOne = false;
        for (i = 0; i < el.dataVals.length; i++) {
            if (el.dataVals[i] == filterValue) {
                weGotOne = true;
            }
        }
        if (weGotOne == true) {
            el.getParent().removeClass('subListHide');
            el.removeClass('tate_sortTable_hide');
            return true;
        } else {
            el.getParent().addClass('subListHide');
            el.addClass('tate_sortTable_hide');
            return false
        }
    },
    clearFilter: function (el, optVal) {
        var unfilterAll = optVal.every(function (val) {
            return val == '0';
        });
        if (unfilterAll) el.removeClass('tate_sortTable_hide');
    }
});
Tate.SortTable.implement(new Options);

Tate.SelectBox = new Class({
    presets: {
        CONTAINER_CLASSNAME: 'tate_selectBox',
        TITLE_CLASSNAME: 'tate_sel_title',
        HANDLE_CLASSNAME: 'tate_sel_handle',
        DRAWER_CLASSNAME: 'tate_sel_drawer',
        OPTION_CLASSNAME: 'tate_sel_option',
        SELECTED_OPTION_CLASSNAME: 'tate_sel_selected'
    },
    options: {
        genericPrompt: 'Select',
        showGeneric: false
    },
    value: null,
    onChange: Class.empty,
    selectElement: null,
    initialize: function (selBox, options) {
        this.optionNodes = [];
        this.setOptions(options);
        this.mainNode = new Element('div', {
            'class': this.presets.CONTAINER_CLASSNAME
        });
        this.mainNode.addEvent('mouseleave', this.doCloseDrawer.bind(this));
        this.doc = $$('body')[0];
        this.titleNode = new Element('div', {
            'class': this.presets.TITLE_CLASSNAME
        });
        this.titleNode.addEvent('click', this.doToggleDrawer.bind(this));
        this.mainNode.adopt(this.titleNode);
        this.handleNode = new Element('div', {
            'class': this.presets.HANDLE_CLASSNAME
        });
        this.mainNode.adopt(this.handleNode);
        this.handleNode.addEvent('click', this.doToggleDrawer.bind(this));
        var clearer = new Element('div', {
            'class': 'tate_clearer'
        });
        this.mainNode.adopt(clearer);
        this.drawerNode = new Element('div', {
            'class': this.presets.DRAWER_CLASSNAME
        });
        this.drawerNode.isOpen = false;
        this.mainNode.adopt(this.drawerNode);
        if ($defined(selBox) == true) {
            if (selBox.getTag() == 'select') {
                this.selectElement = selBox;
                this.selectElement.setStyle('display', 'none')
            }
        }
        if (this.selectElement != null) {
            var selectedExists = false;
            this.staticOptionNodes = this.selectElement.getElements('option');
            for (var i = 0; i < this.staticOptionNodes.length; i++) {
                var son = this.staticOptionNodes[i];
                var s = son.getProperty('selected');
                var testResult = ((s == 'selected' || s == true) && (this.options.showGeneric == false));
                if (testResult == true) {
                    selectedExists = true
                }
                if (son.getProperty('disabled') != true) {
                    this.addOptionNode(son.getAttribute('value'), son.getText(), testResult, i);
                }
            }
            this.mainNode.injectBefore(this.selectElement);
            if (selectedExists == false) {
                this.doGeneric();
            }
        } else {
            this.doGeneric();
        }
    },
    doToggleDrawer: function () {
        (this.drawerNode.isOpen == true) ? this.doCloseDrawer() : this.doOpenDrawer();
    },
    doOpenDrawer: function () {
        var cds = this.mainNode.getCoordinates();
        var t = (cds.top + cds.height - 1) + 'px';
        var l = cds.left + 'px';
        this.drawerNode.setStyles({
            'display': 'block',
            'top': t,
            'left': l
        });
        this.drawerNode.isOpen = true;
    },
    doCloseDrawer: function () {
        if (this.drawerNode.isOpen == true) {
            this.drawerNode.setStyle('display', 'none');
            this.drawerNode.isOpen = false;
        }
    },
    doOptionMouseEnter: function (option) {
        option.setStyle('background-color', '#e6e6e6');
    },
    doOptionMouseLeave: function (option) {
        option.setStyle('background-color', '#ffffff');
    },
    addOptionNode: function (val, title, selected, index) {
        var option = new Element('div', {
            'class': this.presets.OPTION_CLASSNAME
        });
        option.sel_value = val;
        option.sel_title = title;
        option.setText(title);
        option.sel_isSelected = selected;
        option.sel_index = ($defined(index) == true) ? index : 0;
        option.addEvent('click', this.doSelect.pass([option], this));
        option.addEvent('mouseenter', this.doOptionMouseEnter.pass([option], this));
        option.addEvent('mouseleave', this.doOptionMouseLeave.pass([option], this));
        this.drawerNode.adopt(option);
        this.optionNodes.push(option);
        if (option.sel_isSelected == true) {
            this.doSelect(this.optionNodes.getLast());
        }
    },
    doGeneric: function () {
        this.titleNode.setText(this.options.genericPrompt);
        for (var i = 0; i < this.optionNodes.length; i++) {
            this.optionNodes[i].removeClass(this.presets.SELECTED_OPTION_CLASSNAME);
            this.optionNodes[i].isSelected = false;
            (this.drawerNode.isOpen == true) ? this.doCloseDrawer() : null;
        }
        if (this.selectElement != null) {
            for (j = 0; j < this.staticOptionNodes.length; j++) {
                this.staticOptionNodes[j].removeProperty('selected');
            }
        }
    },
    doSelect: function (option) {
        if ($defined(option) == false) {
            this.doGeneric();
        } else {
            this.value = option.sel_value;
            for (var i = 0; i < this.optionNodes.length; i++) {
                if (option == this.optionNodes[i]) {
                    this.titleNode.setText(this.optionNodes[i].sel_title);
                    this.optionNodes[i].addClass(this.presets.SELECTED_OPTION_CLASSNAME);
                    this.optionNodes[i].isSelected = true;
                    if (this.selectElement != null) {
                        for (j = 0; j < this.staticOptionNodes.length; j++) {
                            (j == this.optionNodes[i].sel_index) ? this.staticOptionNodes[j].setProperty('selected', true) : this.staticOptionNodes[j].setProperty('selected', false);
                        }
                    }
                } else {
                    this.optionNodes[i].removeClass(this.presets.SELECTED_OPTION_CLASSNAME);
                    this.optionNodes[i].isSelected = false;
                }
            }(this.drawerNode.isOpen == true) ? this.doCloseDrawer() : null;
            this.fireEvent('onChange');
        }
    }
});
Tate.SelectBox.implement(new Events, new Options);

Tate.PrintPage = new Class({
    initialize: function (elem) {
        this.element = elem;
        this.element.addEvent('click', function () {
            window.print();
        });
        this.element.addEvent('mouseenter', this.doOn.bind(this));
        this.element.addEvent('mouseleave', this.doOff.bind(this));
    },
    doOn: function () {
        this.element.setStyle('color', '#999');
    },
    doOff: function () {
        this.element.setStyle('color', '#fff');
    }
});

Tate.PreviewPane = new Class({
    cols: [],
    options: {
        introColClosedWidth: 0,
        openBGPos: '0px 0px',
        openWidth: 760,
        closedWidth: 75
    },
    presets: {
        CONTENT_NODE_SELECTOR: '.tate_pp_content',
        TITLE_NODE_SELECTOR: '.tate_pp_title',
        SLIDE_DURATION: 500
    },
    initialize: function (main, cols, options) {
        this.setOptions(options)
        this.main = main;
        for (var i = 0; i < cols.length; i++) {
            var col = cols[i];
            if (i == 0) {
                col.closedWidth = this.options.introColClosedWidth;
                col.initWidth = col.getStyle('width').toInt();
            } else {
                col.openBGPos = this.options.openBGPos;
                col.openWidth = this.options.openWidth;
                col.closedWidth = this.options.closedWidth;
                col.initWidth = col.getStyle('width').toInt();
                col.titleNode = col.getElements(this.presets.TITLE_NODE_SELECTOR)[0];
                col.addEvent('mouseenter', this.doShowCol.pass([col], this));
            }
            col.content = col.getElements(this.presets.CONTENT_NODE_SELECTOR)[0];
            col.state = 'init';
            this.cols.push(col);
        }
        this.main.addEvent('mouseleave', this.doReinit.bind(this));
        this.fxSlide = new Fx.Elements(this.cols, {
            wait: false,
            duration: this.presets.SLIDE_DURATION
        });
        this.fxSlide.addEvent('onComplete', this.doSetColVisible.bind(this));
    },
    doReinit: function () {
        var obj = {};
        for (var i = 0, cols = this.cols; i < cols.length; i++) {
            col = cols[i];
            var w = col.getStyle("width").toInt();
            var h = col.getStyle("height").toInt();
            if (i == 0) {
                if (col.state != 'init') {
                    col.content.setStyle('display', 'none');
                } else {
                    break;
                }
            } else {
                col.titleNode.setStyle('display', 'none');
                col.content.setStyle('display', 'none');
            }
            obj[i] = {
                width: [w, col.initWidth]
            };
            col.state = 'init';
        }
        this.fxSlide.start(obj);
    },
    doShowCol: function (active) {
        var obj = {};
        for (var i = 0, cols = this.cols; i < cols.length; i++) {
            col = cols[i];
            var w = col.getStyle("width").toInt();
            var h = col.getStyle("height").toInt();
            col.content.setStyle('display', 'none');
            if (i == 0) {
                obj[i] = {
                    width: [w, col.closedWidth]
                };
                col.state = 'closed';
            } else {
                if (col == active) {
                    col.titleNode.setStyle('display', 'block');
                    obj[i] = {
                        width: [w, col.openWidth]
                    };
                    col.state = 'open';
                } else {
                    col.titleNode.setStyle('display', 'none');
                    obj[i] = {
                        width: [w, col.closedWidth]
                    };
                    col.state = 'closed';
                }
            }
        }
        this.fxSlide.start(obj);
    },
    doSetColVisible: function () {
        for (var i = 0, cols = this.cols; i < cols.length; i++) {
            col = cols[i];
            if (i == 0) {
                if (col.state == 'init') {
                    col.content.setStyle('display', 'block');
                }
            } else {
                if (col.state == 'open') {
                    col.titleNode.setStyle('display', 'block');
                    col.content.setStyle('display', 'block');
                } else if (col.state == 'init') {
                    col.titleNode.setStyle('display', 'block');
                    col.content.setStyle('display', 'none');
                } else {
                    col.titleNode.setStyle('display', 'none');
                    col.content.setStyle('display', 'none');
                }
            }
        }
    }
});
Tate.PreviewPane.implement(new Options);

function initializePositionsSelector() {
    var hbxs = [];
    var hltOl = $$('.tate_ol_select');
    for (var i = 0; i < hltOl.length; i++) {
        hbxs.push(new Tate.HighlightBox(hltOl[i], {
            showTxtColor: '#fff',
            showBgColor: '#666',
            hideTxtColor: '#000',
            hideBgColor: '#e5e5e5'
        }));
    }
    var olt = $A(document.getElementsByTagName('a')).filter(function (item) {
        return item.href.indexOf('pll=t') > 0;
    });
    Tate.PositionsOverlay = {
        active: {},
        getCookie: function () {
            return Cookie.get('position');
        },
        setCookie: function (id) {
            Cookie.set('position', id, {
                domain: 'Tate.com',
                path: '/'
            });
        },
        doShow: function (event) {
            var positions = event.target.positions;
            if (!positions) return;
            var cookie = Tate.PositionsOverlay.getCookie();
            if (positions[cookie]) {
                window.location.href = positions[cookie];
                throw "redirecting";
            } else {
                Tate.PositionsOverlay.active = positions;
            }
        },
        doHide: function (event) {
            if (event && event.target && Tate.PositionsOverlay.active) {
                var id = event.target.id;
                if (id) {
                    var cookie = Tate.PositionsOverlay.setCookie(id);
                    window.location.href = Tate.PositionsOverlay.active[id];
                    throw "redirecting";
                }
            }
        }
    };
    for (var i = 0; i < olt.length; i++) {
        var trigger = olt[i];
        var o = {};
        var href = trigger.href;
        trigger.href = href.substring(0, href.indexOf('?'));
        href = href.substring(href.indexOf('?') + 1, href.length);
        var params = href.split("&");
        for (var x = 0; x < params.length; x++) {
            var sub = params[x].split('=');
            if (sub[0] && sub[0] != '') o[sub[0]] = unescape(sub[1]);
        }
        trigger.positions = o;
        var mo = new Tate.ModalOverlay(trigger, 'olBox1');
        mo.addEvent('doShow', Tate.PositionsOverlay.doShow);
        mo.addEvent('doHide', Tate.PositionsOverlay.doHide);
    }
}

Tate.OverlayLink = new Class({
    options: {
        type: 'standard'
    },
    hardTop: null,
    initialize: function (elem, options) {
        this.setOptions(options);
        this.loadUrl = elem.href
        elem.addEvent('click', this.doOverlay.bind(this));
        elem.onclick = function (event) {
            var evt = new Event(event);
            evt.preventDefault();
        }
        if (options.name) {
            this.name = options.name;
            Tate.OverlayLink.links[this.name] = this;
        }
    },
    doOverlay: function () {
        if (this.options.type == 'video') {
            var ol = new Tate.VideoOverlay(this.loadUrl);
        } else {
            var ol = new Tate.PageOverlay(this.loadUrl);
        }
    }
});
Tate.OverlayLink.implement(new Options);
Tate.OverlayLink.links = {}
Tate.OverlayLink.init = function () {
    try {
        var href = window.location.href;
        var overlay = href.match(/overlay=([^&]*)(&?)(.*)$/)[1];
        if (Tate.OverlayLink.links[overlay]) Tate.OverlayLink.links[overlay].doOverlay();
    } catch (e) {}
}

Tate.PageOverlay = new Class({
    synonyms: {},
    options: {
        topOffset: 150,
        fadeContentIn: true,
        targetHeight: 200
    },
    presets: {
        CONTAINER_ID: 'tate_doc',
        OVERLAY_BG_CLASSNAME: 'tate_ol_bg',
        CONTENT_OUTER_CONTAINER_CLASSNAME: 'tate_ol_contain',
        CONTENT_INNER_CONTAINER_CLASSNAME: 'tate_ol_content',
        CLOSE_BUTTON_CLASSNAME: 'tate_ol_close',
        LOADING_IMG_CLASSNAME: 'tate_loading',
        LOADING_IMG_URL: 'img/overlay/loadingImg.gif'
    },
    initialize: function (url) {
        if ($defined(url)) {
            this.url = url;
            var bod = $$('body')[0];
            this.overlayBG = new Element('div', {
                'class': this.presets.OVERLAY_BG_CLASSNAME
            });;
            this.overlayBGEffect = new Fx.Style(this.overlayBG, 'opacity', {
                duration: 400
            });
            this.overlayBGEffect.addEvent('onComplete', this.loadContent.bind(this));
            this.overlayBGEffect.set(0);
            this.overlayBG.addEvent('click', this.destroy.bind(this));
            bod.adopt(this.overlayBG);
            this.overlayContainer = new Element('div', {
                'class': this.presets.CONTENT_OUTER_CONTAINER_CLASSNAME
            });
            this.overlayContainerFadeEffect = new Fx.Style(this.overlayContainer, 'opacity', {
                duration: 250
            });
            this.overlayContainerFadeEffect.set(0);
            bod.adopt(this.overlayContainer);
            this.closeButton = new Element('div', {
                'class': this.presets.CLOSE_BUTTON_CLASSNAME
            });
            this.closeButton.addEvent('click', this.destroy.bind(this));
            this.overlayContainer.adopt(this.closeButton);
            this.overlayContent = new Element('div', {
                'class': this.presets.CONTENT_INNER_CONTAINER_CLASSNAME
            });
            this.overlayContainer.adopt(this.overlayContent);
            if (this.doPosition() == true) {
                window.addEvent('resize', this.doPosition.bind(this));
            }
            this.overlayBGEffect.start(0, 0.6);
            this.register(url);
        }
    },
    register: function (url) {
        try {
            if ($defined(window._hbPageView) && $defined(url) && (url = url.trim()) != "") {
                var location = window.location.href;
                var p1 = location.split("/");
                var p2 = url.split('/');
                var i1 = 0;
                i2 = 0;
                var match = function (s1, s2) {
                    if (s1 == s2) return true;
                    else if (this.synonyms && this.synonyms[s1]) {
                        var a = this.synonyms[s1];
                        for (var i = 0; i < a.length; i++) {
                            if (a[i] == s2) return true;
                        }
                        return false;
                    }
                }.bind(this);
                for (; i1 < p1.length && i2 < p2.length;) {
                    if (match(p1[i1], p2[i2])) {
                        i1++;
                        i2++;
                    } else
                    break;
                }
                var s = p2.slice(i2).join('/');
                var href = window.location.href;
                var idx = href.lastIndexOf('/');
                href = href.substring(0, idx);
                if (href.indexOf('http://') == 0) href = (href = href.substring(7)).substring(href.indexOf('/'));
                var title = document.title;
                if (title.indexOf('|') > 0) title = '/' + title.substring(title.indexOf('|') + 2);
                else title = '';
                _hbPageView('openoverlay', href + title + "[" + s + "]");
            }
        } catch (e) {}
    },
    loadContent: function () {
        this.contentLoader = new Tate.TextFileLoader({
            'method': 'get'
        });
        this.contentLoader.addEvent('onFileLoad', this.handleLoadContent.bind(this));
        this.contentLoader.send(this.url);
    },
    handleLoadContent: function () {
        this.overlayContent.setHTML(this.contentLoader.fileContent);
        this.overlayBG.setStyle('background-image', 'none')
        if (this.options.fadeContentIn == false || window.ie6 == true) {
            this.overlayContainerFadeEffect.set(1);
        } else {
            this.overlayContainerFadeEffect.start(0, 1);
        }
        this.contentLoader.evalScripts();
    },
    doPosition: function () {
        var ww = window.getWidth()
        var wh = window.getHeight();
        var sos = window.getScrollTop();
        var bh = $(this.presets.CONTAINER_ID).getCoordinates().height;
        var contTarg = (ww <= 984) ? '984px' : ww + 'px';
        var bgTarg = (ww <= 984) ? '984px' : '100%';
        if (this.hardTop == null) {
            if (sos <= this.options.topOffset) {
                this.hardTop = (sos + this.options.topOffset) + 'px';
            } else {
                this.hardTop = ((wh - this.options.topOffset) < (this.options.targetHeight + this.options.topOffset)) ? sos + 'px' : (sos + this.options.topOffset) + 'px';
            }
        }
        this.overlayBG.setStyles({
            height: bh + 'px',
            width: bgTarg,
            position: 'absolute',
            top: '0',
            left: '0',
            'background-position': 'center ' + (sos + this.options.topOffset + 50) + 'px'
        });
        this.overlayContainer.setStyles({
            width: contTarg,
            position: 'absolute',
            top: this.hardTop,
            left: '0'
        });
        return true;
    },
    destroy: function () {
        this.overlayContainer.innerHTML = ' removing ';
        window.removeEvent('resize', this.doPosition.bind(this));
        this.overlayBG.remove();
        this.overlayContainer.remove();
    }
});
Tate.PageOverlay.implement(new Options);
Tate.VideoOverlay = Tate.PageOverlay.extend({
    presets: {
        CONTAINER_ID: 'tate_doc',
        OVERLAY_BG_CLASSNAME: 'tate_ol_bg',
        CONTENT_OUTER_CONTAINER_CLASSNAME: 'tate_ol_contain_vid',
        CONTENT_INNER_CONTAINER_CLASSNAME: 'tate_ol_content',
        CLOSE_BUTTON_CLASSNAME: 'tate_ol_close',
        LOADING_IMG_CLASSNAME: 'tate_loading',
        LOADING_IMG_URL: 'img/overlay/loadingImg_bk.gif'
    },
    options: {
        topOffset: 150,
        fadeContentIn: false,
        targetHeight: 400
    }
});

Tate.Overlay = new Class({
    presets: {
        SHADOW_CLASS: 'tate_ol_mainCont',
        BOX_CONTAINER_CLASS: 'tate_ol_boxCont',
        CLOSE_BUTTON_CLASS: 'tate_ol_closeButton',
        MAIN_ID: 'tate_main'
    },
    onSelect: Class.empty,
    initialize: function (h, w, url, handle) {
        this.contentIsLoaded = false;
        var ref = this;
        this.url = url;
        this.targetHeight = h;
        this.targetWidth = w;
        this.handle = handle;
        this.contentLoader = new Tate.TextFileLoader({
            'method': 'get'
        });
        this.contentLoader.addEvent('onFileLoad', this.updateContent.bind(this));
        this.handle.addEvent('click', function () {
            ref.showOverLay.delay(0, ref);
        });
        this.handle.onclick = function (event) {
            var evt = new Event(event);
            evt.preventDefault();
        }
    },
    showOverLay: function () {
        if (this.contentIsLoaded == true) {
            this.doTransition()
        } else {
            var ref = this;
            this.wellToCover = $(this.presets.MAIN_ID);
            this.mainContainer = new Element('div', {
                'class': this.presets.SHADOW_CLASS
            });
            this.wellToCover.adopt(this.mainContainer);
            this.boxContainer = new Element('div', {
                'class': this.presets.BOX_CONTAINER_CLASS
            });
            this.wellToCover.adopt(this.boxContainer);
            this.closeButton = new Element('div', {
                'class': this.presets.CLOSE_BUTTON_CLASS
            });
            this.closeButton.setHTML('close');
            this.boxContainer.adopt(this.closeButton);
            this.closeButton.addEvent('click', this.hideOverlay.bind(this));
            this.contentContainer = new Element('div');
            this.boxContainer.adopt(this.contentContainer);
            this.shadowOpacEffect = new Fx.Style(this.mainContainer, 'opacity', {
                duration: 500,
                fps: 20
            });
            this.boxOpacEffect = new Fx.Style(this.boxContainer, 'opacity', {
                duration: 400,
                fps: 20
            });
            this.doTransition();
            this.contentLoader.doFileLoad(this.url);
            this.domanage = function () {
                ref.manageCoords(false);
            };
            window.addEvent('resize', this.domanage);
        }
    },
    doTransition: function () {
        var ref = this;
        if (this.manageCoords(true)) {
            this.shadowOpacEffect.start(0, 1).chain(function () {
                ref.boxOpacEffect.set(1)
            });
        }
    },
    manageCoords: function (opac) {
        if ($defined(opac)) {
            opac = (opac == true) ? 0 : 1;
        } else {
            opac = 1;
        }
        main = this.wellToCover.getCoordinates();
        this.wellToCover.setStyles({
            'position': 'relative',
            'top': '0',
            'left': '0'
        });
        this.mainContainer.setStyles({
            display: 'block',
            width: main.width,
            height: main.height,
            position: 'absolute',
            top: '0',
            left: '0',
            opacity: opac
        });
        this.boxContainer.setStyles({
            display: 'block',
            width: main.width,
            height: this.targetHeight,
            position: 'absolute',
            left: '0',
            top: '0',
            opacity: opac
        });
        return true;
    },
    hideOverlay: function () {
        window.removeEvent('resize', this.domanage);
        this.boxContainer.setStyle('display', 'none');
        this.mainContainer.setStyle('display', 'none');
    },
    updateContent: function () {
        this.contentIsLoaded = true;
        this.contentContainer.setHTML(this.contentLoader.fileContent);
        this.cWellManager = new Tate.DetailContentWell(this.contentContainer);
    }
});
Tate.Overlay.implement(new Events);

Tate.Navigation = new Class({
    presets: {
        DELAY_INTERVAL: 150,
        EXIT_INTERVAL: 300,
        HEAD_ID: 'tate_head',
        MAIN_ID: 'tate_nav',
        INDEX_LINK_ID: 'tate_nav_indexLink',
        HANDLE_SELECTOR: '.tate_nav_hdr_sect',
        SELECTED_HANDLE_CLASSNAME: 'tate_nav_hdr_sect_selected',
        //SEARCH_ID: 'tate_nav_search', //tate
        DROP_CONTAINER_ID: 'tate_nav_dd',
        DROPS_SELECTOR: '.tate_nav_sub_item',
        CONTAINER_ID: 'tate_doc',
        UTIL_NAV_ID: 'tate_utilNav',
        UTIL_NAV_HANDLE_SELECTOR: '.tate_utilNavItem_title',
        UTIL_NAV_DROP_SELECTOR: '.tate_utilNavDD',
        UTIL_NAV_NODROP_HANDLE_SELECTOR: '.tate_utilNav_label',
        HALO_CLASSNAME: 'tate_un_halo',
        WIDE_HALO_CLASSNAME: 'tate_un_wideHalo',
        OVERLAY_Z_INDEX: 550
    },
    options: {
        haloUtilNav: false,
        wideHalo: false,
        handleSelectorColor: '#fff'
    },
    modules: [],
    waitForTimer: false,
    pauseNav: false,
    showMouseovers: false,
    initialize: function (options) {
        this.setOptions(options);
        this.mainContainer = $(this.presets.MAIN_ID);
        this.headContainer = $(this.presets.HEAD_ID);
        this.exitTimer = new Tate.Timer(this.presets.EXIT_INTERVAL);
        this.exitTimer.addEvent('onExpire', this.reset.bind(this))
        this.mainContainer.addEvent('mouseleave', this.exitTimer.start.bind(this.exitTimer));
        this.mainContainer.addEvent('mouseenter', this.exitTimer.stop.bind(this.exitTimer));
        this.delayTimer = new Tate.Timer(this.presets.DELAY_INTERVAL);
        this.delayTimer.addEvent('onExpire', this.handleExpire.bind(this))
        var ib = $(this.presets.INDEX_LINK_ID);
        if ($defined(ib)) {
            this.modules.push(new Tate.NavigationIndexLink(ib, ib.hasClass(this.presets.SELECTED_HANDLE_CLASSNAME), this));
        }
        var hds = this.mainContainer.getElements(this.presets.HANDLE_SELECTOR);
        var dps = this.mainContainer.getElements(this.presets.DROPS_SELECTOR)
        for (var i = 0; i < hds.length; i++) {
            var flagAsSelected = hds[i].hasClass(this.presets.SELECTED_HANDLE_CLASSNAME);
            this.modules.push(new Tate.NavigationPair(hds[i], dps[i], flagAsSelected, this));
        }
        //this.modules.push(new Tate.NavigationSearchModule($(this.presets.SEARCH_ID), this)); //tate
        this.utilNav = $(this.presets.UTIL_NAV_ID);
        if ($defined(this.utilNav)) {
            if (this.options.haloUtilNav == true) {
                var halo = new Element('div', {
                    'class': (this.options.wideHalo == true) ? this.presets.WIDE_HALO_CLASSNAME : this.presets.HALO_CLASSNAME
                });
                this.headContainer.adopt(halo);
                if (window.ie6 == true) {
                    var bg = halo.getStyle('background-image');
                    var bg = bg.substring(5, (bg.length - 2));
                    halo.setStyles({
                        "background-image": "none",
                        "filter": "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + bg + "', sizingMethod='crop')"
                    });
                }
            }
            this.utilNav.addEvent('mouseleave', this.exitTimer.start.bind(this.exitTimer));
            this.utilNav.addEvent('mouseenter', this.exitTimer.stop.bind(this.exitTimer));
            var utilhandles = this.utilNav.getElements(this.presets.UTIL_NAV_HANDLE_SELECTOR);
            var utildrops = this.utilNav.getElements(this.presets.UTIL_NAV_DROP_SELECTOR);
            for (var i = 0; i < utilhandles.length; i++) {
                this.modules.push(new Tate.UtilityNavigationItem(utilhandles[i], utildrops[i]));
            }
            var utilNoDropHandles = this.utilNav.getElements(this.presets.UTIL_NAV_NODROP_HANDLE_SELECTOR);
            for (var i = 0; i < utilNoDropHandles.length; i++) {
                this.modules.push(new Tate.UtilityNavigationItem(utilNoDropHandles[i], null));
            }
        }
        for (var i = 0; i < this.modules.length; i++) {
            var ct = i;
            this.modules[i].handle.addEvent('mouseenter', this.initMousein.pass([ct], this));
            this.modules[i].handle.addEvent('mouseleave', this.initMouseout.pass([ct], this));
            this.modules[i].handle.addEvent('click', this.endPauseNav.pass([ct], this));
            if ((this.modules[i].modType == 'pair' || this.modules[i].modType == 'util') && this.modules[i].drop != null) {
                this.modules[i].drop.addEvent('mouseenter', this.cancelMouseOut.bind(this));
            }
            this.modules[i].addEvent('onImagesLoaded', this.checkMo.bind(this));
        }
        this.shadow = new Element('div');
        this.shadow.setStyles({
            'opacity': '0',
            'height': '0',
            'width': '0',
            'position': 'absolute',
            'top': '0',
            'left': '0',
            'background': '#000',
            'z-index': (this.presets.OVERLAY_Z_INDEX - 1)
        });
        this.shadowTrans = new Fx.Style(this.shadow, 'opacity', {
            'duration': 180
        });
        this.shadowTrans.addEvent('onComplete', this.handleExpire.bind(this));
        this.headContainer.adopt(this.shadow)
    },
    checkMo: function () {
        for (var i = 0; i < this.modules.length; i++) {
            if (this.modules[i].imagesAreLoaded == false) {
                return false;
            }
        }
        this.showMouseovers = true;
    },
    initMousein: function (i) {
        this.onDeckMod = this.modules[i];
        if (this.waitForTimer == false) {
            this.hidePage();
        } else {
            this.delayTimer.restart();
        }
    },
    initMouseout: function (i) {
        if (this.cancelShow == true) {
            this.cancelShow = false;
            this.waitForTimer = true;
            this.reset();
        } else {
            this.cancelShow = false;
            this.waitForTimer = true;
            this.delayTimer.restart();
        }
    },
    cancelMouseOut: function (i) {
        this.delayTimer.stop();
    },
    handleExpire: function () {
        this.cancelShow = false;
        if (this.pauseNav == false) {
            if (this.onDeckMod != null) {
                for (var i = 0, mds = this.modules; i < mds.length; i++) {
                    if (this.onDeckMod.modType == 'search' || this.onDeckMod.modType == 'index') {
                        if (mds[i] == this.onDeckMod) {
                            mds[i].doHot()
                        } else if (mds[i].modType == 'util') {
                            mds[i].doWarm();
                        } else {
                            mds[i].doCold()
                        };
                        this.waitForTimer = false;
                    } else if (this.onDeckMod.modType == 'util') {
                        if (mds[i] == this.onDeckMod) {
                            mds[i].doHot();
                        } else if (mds[i].modType == 'util') {
                            mds[i].doWarm();
                        } else {
                            mds[i].doCold();
                        }
                        this.waitForTimer = true;
                    } else {
                        if (mds[i] == this.onDeckMod) {
                            mds[i].doHot()
                        } else {
                            mds[i].doWarm()
                        };
                        this.waitForTimer = true;
                    }
                }
            } else {
                this.waitForTimer = false;
            }
            this.onDeckMod = null;
        }
    },
    reset: function () {
        this.waitForTimer = false;
        this.cancelShow = false;
        this.delayTimer.stop();
        this.showPage();
        for (var i = 0, mds = this.modules; i < mds.length; i++) {
            mds[i].doCold();
        }
    },
    doPauseNav: function () {
        this.pauseNav = true;
    },
    endPauseNav: function (i) {
        if ($defined(i)) {
            if (this.modules[i].modType != 'search') {
                this.pauseNav = false;
                this.onDeckMod = this.modules[i];
                this.handleExpire();
            }
        } else {
            this.pauseNav = false;
        }
    },
    hidePage: function () {
        this.cancelShow = true;
        this.shadowTrans.stop();
        var th = $(this.presets.CONTAINER_ID).getCoordinates().height
        var ww = window.getWidth()
        var contTarg = '';
        if (ww <= 984) {
            contTarg = '984px';
        } else if (ww >= 1280) {
            contTarg = '1280px';
        } else {
            contTarg = (window.gecko == true) ? (ww - 1) + 'px' : ww + 'px';
        }

        this.shadow.setStyles({
            'height': th + 'px',
            'width': contTarg
        });
        this.shadowTrans.start(0.6);
    },
    showPage: function () {
        this.shadowTrans.stop();
        this.delayTimer.stop();
        this.cancelShow = false;
        this.shadow.setStyles({
            'opacity': 0,
            'height': '0',
            'width': '0'
        });
    }
});
Tate.Navigation.implement(new Options);

Tate.NavigationIndexLink = new Class({
    onImagesLoaded: Class.empty,
    imagesAreLoaded: false,
    modType: 'index',
    initialize: function (elem, isSelected, container) {
		alert(elem);
        this.handle = elem;
        this.imageManager = new Tate.NavigationImageManager(this.handle.getElements('img')[0], isSelected);
        this.imageManager.addEvent('onImagesLoaded', this.doImagesLoaded.bind(this));
        this.container = container;
    },
    doImagesLoaded: function () {
        this.imagesAreLoaded = true;
        this.fireEvent('onImagesLoaded');
    },
    doHot: function () {
        if (this.container.showMouseovers == true) {
            this.imageManager.doHot();
        }
    },
    doWarm: function () {
        if (this.container.showMouseovers == true) {
            this.imageManager.doWarm();
        }
    },
    doCool: function () {
        if (this.container.showMouseovers == true) {
            this.imageManager.doCool();
        }
    },
    doCold: function () {
        if (this.container.showMouseovers == true) {
            this.imageManager.doCold();
        }
    }
});
Tate.NavigationIndexLink.implement(new Events);

Tate.NavigationPair = new Class({
    onImagesLoaded: Class.empty,
    imagesAreLoaded: false,
    modType: 'pair',
    initialize: function (hdl, dp, sel, container) {
        this.handle = hdl;
        this.drop = dp;
        this.isSelected = sel;
        this.container = container
        this.handleImage = new Tate.NavigationImageManager(this.handle.getElements('img')[0], this.isSelected)
        this.handleImage.addEvent('onImagesLoaded', this.doImagesLoaded.bind(this))
    },
    doImagesLoaded: function () {
        this.imagesAreLoaded = true;
        this.fireEvent('onImagesLoaded');
    },
    doHot: function () {
        if (this.container.showMouseovers == true) {
            this.handleImage.doHot();
        }
        this.drop.setStyle('display', 'block');
    },
    doWarm: function () {
        if (this.container.showMouseovers == true) {
            this.handleImage.doWarm();
        }
        this.drop.setStyle('display', 'none');
    },
    doCold: function () {
        if (this.container.showMouseovers == true) {
            this.handleImage.doCold();
        }
        this.drop.setStyle('display', 'none');
    },
    doCool: function () {
        if (this.container.showMouseovers == true) {
            this.handleImage.doCool();
        }
        this.drop.setStyle('display', 'none');
    }
})
Tate.NavigationPair.implement(new Events);

Tate.NavigationSearchModule = new Class({
    onImagesLoaded: Class.empty,
    imagesAreLoaded: false,
    modType: 'search',
    keepOn: false,
    initialize: function (elem, cont) {
        this.handle = elem;
        this.container = cont;
        var inputs = this.handle.getElements('input');
        (inputs[0].type == 'image') ? inputs.reverse() : null;
        this.inputField = inputs[0];
        this.searchString = this.inputField.value;
        this.submitButton = new Tate.NavigationImageManager(inputs[1], false);
        this.submitButton.addEvent('onImagesLoaded', this.doImagesLoaded.bind(this));
        if (window.webkit419) this.inputField.setStyles('background-color:#fff;');
        this.inputField.addEvent('click', this.manageKeep.pass(['click'], this));
        this.inputField.addEvent('blur', this.manageKeep.pass(['blur'], this));
    },
    doImagesLoaded: function () {
        this.imagesAreLoaded = true;
        this.fireEvent('onImagesLoaded');
    },
    doHot: function () {
        if (this.container.showMouseovers == true) {
            if (this.container.showMouseovers == true) {
                this.submitButton.doWarm();
            }
            this.handle.setStyle('background-color', '#fff');
            this.inputField.setStyle('background-color', '#fff');
        }
    },
    doWarm: function () {
        this.doHot();
    },
    doCool: function () {
        if (this.keepOn == false) {
            this.handle.setStyle('background-color', '#444');
            if (window.webkit419) {
                this.inputField.setStyles('background-color:#fff;')
            } else {
                this.inputField.setStyle('background-color', '#444');
            }
            this.submitButton.doCool();
        }
    },
    doCold: function () {
        this.doCool();
    },
    manageKeep: function (evt) {
        if (evt == 'click') {
            if (this.inputField.value == this.searchString) {
                this.inputField.value = '';
            }
            this.container.doPauseNav();
            this.keepOn = true;
        } else {
            if (this.inputField.value == '') {
                this.inputField.value = this.searchString;
            }
            this.keepOn = false;
            this.container.endPauseNav();
            this.doCool();
        }
    }
});
Tate.NavigationSearchModule.implement(new Events);

Tate.NavigationImageManager = new Class({
    onImagesLoaded: Class.empty,
    isLoaded: false,
    isSelected: false,
    skip: false,
    initialize: function (elem, isSelected) {
        this.element = elem;
        this.isSelected = isSelected;
        this.element.setProperty('title', '');
        var source = elem.getProperty('src');
        var baseUrl = source.substr(0, source.lastIndexOf('_o'));
        var extension = source.substr(source.lastIndexOf('.'), 4);
        var imgs = new Asset.images([baseUrl + '_off' + extension, baseUrl + '_off_active' + extension, baseUrl + '_on' + extension, baseUrl + '_on_active' + extension], {
            onComplete: this.doImagesLoaded.bind(this)
        });
        this.coldImg = imgs[0];
        this.coolImg = imgs[1];
        this.warmImg = imgs[2];
        this.hotImg = imgs[3];
    },
    doImagesLoaded: function () {
        this.fireEvent('onImagesLoaded');
    },
    doHot: function () {
        (this.skip == true) ? null : this.element.src = this.hotImg.src;
    },
    doWarm: function () {
        (this.skip == true) ? null : this.element.src = this.warmImg.src;
    },
    doCool: function () {
        (this.skip == true) ? null : this.element.src = this.coolImg.src;
    },
    doCold: function () {
        if (this.isSelected == true) {
            (this.skip == true) ? null : this.element.src = this.coolImg.src;
        } else {
            (this.skip == true) ? null : this.element.src = this.coldImg.src;
        }
    }
});
Tate.NavigationImageManager.implement(new Events);

Tate.UtilityNavigationItem = new Class({
    presets: {
        LANG_IMAGE_SELECTOR: '.tate_utilNav_langImage'
    },
    onImagesLoaded: Class.empty,
    imagesAreLoaded: true,
    modType: 'util',
    initialize: function (hdl, dp) {
        this.handle = hdl;
        if (dp != null) {
            this.drop = dp;
            var imgs = this.drop.getElements(this.presets.LANG_IMAGE_SELECTOR);
            this.langImages = [];
            for (var i = 0; i < imgs.length; i++) {
                this.langImages.push(new Tate.ImageMouseover(imgs[i], {
                    'listenToParent': true
                }));
            }
        } else {
            this.drop = null;
        }
    },
    doHot: function () {
        (this.drop != null) ? this.drop.setStyle('display', 'block') : null;
        this.handle.setStyle('color', '#999');
    },
    doWarm: function () {
        (this.drop != null) ? this.drop.setStyle('display', 'none') : null;
        this.handle.setStyle('color', '#fff');
    },
    doCold: function () {
        (this.drop != null) ? this.drop.setStyle('display', 'none') : null;
        this.handle.setStyle('color', '');
    },
    doCool: function () {
        (this.drop != null) ? this.drop.setStyle('display', 'none') : null;
        this.handle.setStyle('color', '');
    }
})
Tate.UtilityNavigationItem.implement(new Events);
Tate.MultipleOpenAccordion = Fx.Elements.extend({
    options: {
        openAll: true,
        allowMultipleOpen: true,
        firstElementsOpen: [0],
        hasOpenCloseAllToggle: false,
        start: 'open-first',
        fixedHeight: false,
        fixedWidth: false,
        alwaysHide: true,
        wait: false,
        onActive: Class.empty,
        onBackground: Class.empty,
        height: true,
        opacity: true,
        width: false
    },
    initialize: function (togglers, elements, onOffToggle, options) {
        this.parent(elements, options);
        this.setOptions(options);
        this.previousClick = null;
        this.elementsVisible = [];
        togglers.each(function (tog, i) {
            $(tog).addEvent('click', function () {
                this.toggleSection(i)
            }.bind(this));
        }, this);
        this.togglers = togglers;
        this.h = {};
        this.w = {};
        this.o = {};
        this.now = [];
        this.opacVal = (window.gecko) ? 0.99 : 1;
        this.hideAll();
        if (this.options.hasOpenCloseAllToggle) {
            this.allOpen = false;
            this.onOffToggle = onOffToggle;
            this.onOffToggle.addEvent('click', function () {
                this.toggleAllSections();
            }.bind(this));
            this.onOffToggle.onclick = function (event) {
                var evt = new Event(event);
                evt.preventDefault();
            }
        }
        this.elements.each(function (el, i) {
            el = $(el);
            this.now[i] = {};
            el.setStyle('overflow', 'hidden');
            if (!(this.options.openAll && this.options.allowMultipleOpen)) el.setStyle('height', 0);
        }, this);
        if (!this.options.openAll || !this.options.allowMultipleOpen) {
            switch (this.options.start) {
            case 'first-open':
                this.showSection(this.options.firstElementsOpen[0]);
                break;
            case 'open-first':
                this.toggleSection(this.options.firstElementsOpen[0]);
                break;
            }
        }
        if (this.options.openAll && this.options.allowMultipleOpen) this.showAll();
        else if (this.options.allowMultipleOpen) this.openSections(this.options.firstElementsOpen);
    },
    hideThis: function (i) {
        this.elementsVisible[i] = false;
        if (this.options.height) this.h = {
            'height': [this.elements[i].offsetHeight, 0]
        };
        if (this.options.width) this.w = {
            'width': [this.elements[i].offsetWidth, 0]
        };
        if (this.options.opacity) this.o = {
            'opacity': [this.now[i]['opacity'] || this.opacVal, 0]
        };
        this.fireEvent("onBackground", [this.togglers[i], this.elements[i]]);
    },
    showThis: function (i) {
        this.elementsVisible[i] = true;
        if (this.options.height) this.h = {
            'height': [this.elements[i].offsetHeight, this.options.fixedHeight || this.elements[i].scrollHeight]
        };
        if (this.options.width) this.w = {
            'width': [this.elements[i].offsetWidth, this.options.fixedWidth || this.elements[i].scrollWidth]
        };
        if (this.options.opacity) this.o = {
            'opacity': [this.now[i]['opacity'] || 0, this.opacVal]
        };
        this.fireEvent("onActive", [this.togglers[i], this.elements[i]]);
    },
    toggleSection: function (iToToggle) {
        if (iToToggle != this.previousClick || this.options.alwaysHide || this.options.allowMultipleOpen) {
            this.previousClick = iToToggle;
            var objObjs = {};
            var err = false;
            this.elements.each(function (el, i) {
                var update = false;
                this.now[i] = this.now[i] || {};
                if (i == iToToggle) {
                    if (this.elementsVisible[i] && (this.options.allowMultipleOpen || this.options.alwaysHide)) {
                        if (!(this.options.wait && this.timer)) {
                            update = true;
                            this.hideThis(i);
                        } else {
                            this.previousClick = null;
                            err = true;
                        }
                    } else if (!this.elementsVisible[i]) {
                        if (!(this.options.wait && this.timer)) {
                            update = true;
                            this.showThis(i);
                        } else {
                            this.previousClick = null;
                            err = true;
                        }
                    }
                } else if (this.elementsVisible[i] && !this.options.allowMultipleOpen) {
                    if (!(this.options.wait && this.timer)) {
                        update = true;
                        this.hideThis(i);
                    } else {
                        this.previousClick = null;
                        err = true;
                    }
                }
                if (update) objObjs[i] = $merge(this.h, $merge(this.o, this.w));
            }, this);
            if (err) return false;
            return this.custom(objObjs);
        }
        return false;
    },
    showSection: function (i, useFx) {
        if ($pick(useFx, false)) {
            if (!this.elementsVisible[i]) this.toggleSection(i);
        } else {
            this.setSectionStyle(i, $(this.elements[i]).scrollWidth, $(this.elements[i]).scrollHeight, 1);
            this.elementsVisible[i] = true;
            this.fireEvent("onActive", [this.togglers[i], this.elements[i]]);
        }
    },
    hideSection: function (i, useFx) {
        if ($pick(useFx, false)) {
            if (this.elementsVisible[i]) this.toggleSection(i);
        } else {
            this.setSectionStyle(i, 0, 0, 0);
            this.elementsVisible[i] = false;
            this.fireEvent("onBackground", [this.togglers[i], this.elements[i]]);
        }
    },
    setSectionStyle: function (i, w, h, o) {
        if (this.options.opacity) $(this.elements[i]).setOpacity(o);
        if (this.options.height) $(this.elements[i]).setStyle('height', h + 'px');
        if (this.options.width) $(this.elements[i]).setStyle('width', w + 'px');
    },
    showAll: function () {
        if (this.options.allowMultipleOpen) {
            this.elements.each(function (el, idx) {
                this.showSection(idx, false);
            }, this);
        }
    },
    hideAll: function () {
        if (this.options.allowMultipleOpen) {
            this.elements.each(function (el, idx) {
                this.hideSection(idx, false);
            }, this);
        }
    },
    openSections: function (sections) {
        if (this.options.allowMultipleOpen) {
            this.elements.each(function (el, idx) {
                if (sections.test(idx)) this.showSection(idx, false);
                else this.hideSection(idx, false);
            }, this);
        }
    },
    toggleAllSections: function (i) {
        if (this.options.hasOpenCloseAllToggle) {
            if (this.allOpen == false) {
                this.options.allowMultipleOpen = true;
                this.onOffToggle.setText('CLOSE ALL');
                this.showAll();
                this.allOpen = true;
            } else {
                this.options.allowMultipleOpen = true;
                this.hideAll();
                this.onOffToggle.setText('SEE ALL');
                this.allOpen = false;
            }
        }
    }
});
Tate.MultipleOpenAccordion.implement(new Options);
Tate.MultipleOpenAccordion.implement(new Events);

Tate.ModalOverlay = new Class({
    presets: {
        OVERLAY_MASK_ID: 'tate_ol_mask',
        OVERLAY_CLOSE: '.tate_ol_close_marker',
        SCR_THRESHHOLD: 1005
    },
    options: {
        trans: Fx.Transitions.Quad.easeIn,
        transDuration: 200,
        fps: 20,
        opac: 0.6
    },
    initialize: function (trigger, overlay, options) {
        this.olMask = $(this.presets.OVERLAY_MASK_ID);
        this.trigger = $(trigger);
        this.overlay = $(overlay);
        var olClose = this.overlay.getElements(this.presets.OVERLAY_CLOSE);
        this.setOptions(options);
        this.maskTrans = new Fx.Style(this.olMask, 'opacity', {
            wait: false,
            transition: this.options.trans,
            duration: this.options.transDuration,
            fps: this.options.fps
        })
        this.olTrans = new Fx.Style(this.overlay, 'opacity', {
            wait: false,
            transition: this.options.trans,
            duration: this.options.transDuration,
            fps: this.options.fps
        })
        this.trigger.addEvent('click', this.doShow.bind(this));
        this.trigger.onclick = function () {
            return false;
        };
        for (var i = 0; i < olClose.length; i++) {
            olClose[i].addEvent('click', this.doHide.bind(this));
            olClose[i].onclick = function (event) {
                var evt = new Event(event);
                evt.preventDefault();
            }
        }
        window.addEvent('resize', this.doOverlaySize.bind(this));
    },
    doShow: function (event) {
        try {
            var a = this.fireEvent('doShow', [new Event(event)]);
        } catch (e) {
            return;
        }
        this.doOverlaySize();
        this.olMask.setStyle('display', 'block');
        this.maskTrans.start(0.0, this.options.opac);
        this.olTrans.start(0.0, 1.0);
    },
    doHide: function (event) {
        try {
            this.fireEvent('doHide', [new Event(event)]);
        } catch (e) {
            return;
        }
        this.olTrans.start(1.0, 0.0);
        this.maskTrans.start(this.options.opac, 0.0);
    },
    doClose: function (event) {
        this.olTrans.start(1.0, 0.0);
        this.maskTrans.start(this.options.opac, 0.0);
    },
    doOverlaySize: function () {
        var wWid = getWidth();
        var scrHgt = getScrollHeight();
        var scrThrsh = this.presets.SCR_THRESHHOLD;
        if (wWid < scrThrsh) {
            this.olMask.setStyles({
                height: scrHgt,
                width: scrThrsh + 'px'
            });
            this.overlay.setStyle('width', +scrThrsh + 'px');
        } else {
            this.olMask.setStyles({
                height: scrHgt,
                width: '100%'
            });
            this.overlay.setStyle('width', '100%');
        }
    }
});
Tate.ModalOverlay.implement(new Options, new Events);

Tate.LocationsLandingBlock = new Class({
    presets: {
        LIST_SELECTOR: '.tate_loc_panelList',
        TITLE_SELECTOR: '.tate_loc_panelTitle'
    },
    initialize: function (cont, options) {
        this.setOptions(options);
        this.container = cont;
        this.list = cont.getElements(this.presets.LIST_SELECTOR)[0];
        this.title = cont.getElements(this.presets.TITLE_SELECTOR)[0];
        this.container.addEvent('mouseenter', this.doOver.bind(this));
        this.container.addEvent('mouseleave', this.doOut.bind(this));
        if (window.webkit419) {
            this.list.setStyle('display', 'block');
            this.slideFx = new Fx.Style(this.list, 'opacity', {
                duration: 400,
                transition: Fx.Transitions.Quad.easeInOut
            });
            this.list.setStyle('display', 'none');
        } else {
            this.slideFx = new Fx.Style(this.list, 'opacity', {
                duration: 400,
                transition: Fx.Transitions.Quad.easeInOut
            });
        }
        this.slideFx.addEvent('onComplete', this.doFinishSlide.bind(this));
        this.list.setStyle('opacity', 0);
        this.list.setStyle('display', 'block');
        this.slideFx.hide();
    },
    doOver: function () {
        this.title.setStyle('display', 'none');
        this.slideFx.stop();
        this.slideFx.start(0.99);
        this.state = 'opening';
    },
    doOut: function () {
        this.title.setStyle('display', 'none');
        this.slideFx.stop();
        this.slideFx.start(0);
        this.state = 'closing';
    },
    doFinishSlide: function () {
        if (this.state == 'closing') {
            this.title.setStyle('display', 'block');
            this.state = 'closed';
        } else {
            this.title.setStyle('display', 'none');
            this.state = 'opened';
        }
    }
});
Tate.LocationsLandingBlock.implement(new Options);

Tate.IndexGrid = new Class({
    hotSpots: [],
    presets: {
        PC_CLASS: 'tate_ig_previewContainer',
        PW_CLASS: 'tate_ig_previewWell'
    },
    type: 'generic',
    initialize: function (data) {
        var ref = this;
        this.mainContainer = data[0].element;
        this.mainContainer.addEvent('mouseleave', this.doCloseOut.bind(this));
        this.mainContainer.addEvent('mouseenter', this.doOpenUp.bind(this));
        this.previewContainer = new Element('div', {
            'class': this.presets.PC_CLASS
        });
        if (this.type == 'divisions') {
            this.previewContainer.addEvent('mouseenter', this.doCloseOut.bind(this));
        }
        this.slideContainer = new Element('div');
        this.previewContainer.adopt(this.slideContainer);
        this.previewWell = new Element('div', {
            'class': this.presets.PW_CLASS
        });
        if (this.type == 'people') {
            if (window.webkit419) {
                this.previewContainer.setStyle('width', '298px');
                this.previewContainer.setStyle('overflow', 'hidden');
            }
        }
        $$('body')[0].adopt(this.previewContainer);
        $$('body')[0].adopt(this.previewWell);
        this.slideEffect = new Fx.Slide(this.slideContainer, {
            duration: 225,
            fps: 40,
            wait: true
        });
        for (var i = 1; i < data.length; i++) {
            var d = data[i];
            var hs = new Tate.IndexGridSpot(d.element, d.hook, d.previewUrl, this);
            this.previewWell.adopt(hs.contentContainer);
            this.hotSpots.push(hs);
        }
        this.slideEffect.hide();
        this.hidePreview(this.hotSpots[0]);
    },
    showPreview: function (hs) {
        if (hs.isOn == false) {
            for (var i = 0; i < this.hotSpots.length; i++) {
                this.hidePreview(this.hotSpots[i])
                if (this.type == 'people') {
                    this.hotSpots[i].handle.removeClass('tate_ppl_arrDown');
                    this.hotSpots[i].handle.removeClass('tate_ppl_arrUp');
                }
            }
            for (var i = 0; i < this.hotSpots.length; i++) {
                var a = this.hotSpots[i];
                if (a == hs) {
                    if (hs.manageCoords() == true) {
                        if (this.type == 'people') {
                            if (hs.arrowDirection == 'down') {
                                hs.handle.addClass('tate_ppl_arrDown');
                            } else {
                                hs.handle.addClass('tate_ppl_arrUp');
                            }
                        }
                        this.slideContainer.adopt(hs.contentContainer)
                        this.previewContainer.setStyles({
                            display: 'block',
                            top: hs.yPos,
                            left: hs.xPos
                        });
                        this.slideEffect.element.getParent().setStyle('overflow', 'hidden')
                        var ref = this;
                        this.slideEffect.show().chain(function () {

                            ref.slideEffect.element.getParent().setStyle('overflow', 'visible');
                        });
                        hs.isOn = true;
                        (hs.contentLoaded == false) ? hs.loadData() : null;
                    }
                } else {
                    this.hidePreview(a);
                }
            }
        }
    },
    hidePreview: function (hs) {
        if (hs.isOn == true) {
            this.previewWell.adopt(hs.contentContainer)
            hs.isOn = false;
            this.slideEffect.hide();
            if (this.type == 'people') {
                hs.handle.removeClass('tate_ppl_arrDown');
                hs.handle.removeClass('tate_ppl_arrUp');
            }
        }
    },
    doCloseOut: function () {
        this.previewContainer.setStyles({
            display: 'none',
            top: '-500px',
            left: '-500px'
        });
        this.slideEffect.hide();
    },
    doOpenUp: function () {
        return
    }
});
Tate.LocationsGrid = Tate.IndexGrid.extend({
    type: 'locations',
    presets: {
        PC_CLASS: 'tate_ig_peoplePreviewContainer',
        PW_CLASS: 'tate_ig_previewWell'
    }
});
Tate.PeopleGrid = Tate.IndexGrid.extend({
    type: 'people',
    presets: {
        PC_CLASS: 'tate_ig_peoplePreviewContainer',
        PW_CLASS: 'tate_ig_previewWell'
    }
});
Tate.DivisionsGrid = Tate.IndexGrid.extend({
    type: 'divisions',
    presets: {
        PC_CLASS: 'tate_ig_divisionsPreviewContainer',
        PW_CLASS: 'tate_ig_previewWell'
    },
    showPreview: function (hs) {
        if (hs.isOn == false) {
            for (var i = 0; i < this.hotSpots.length; i++) {
                this.hidePreview(this.hotSpots[i])
            }
            for (var i = 0; i < this.hotSpots.length; i++) {
                var a = this.hotSpots[i];
                if (a == hs) {
                    hs.handleImage.src = hs.onImg.src;
                    hs.handle.setStyle('background-color', '#ffffff');
                    this.slideEffect.hide();
                    if (hs.manageCoords() == true) {
                        this.slideContainer.adopt(hs.contentContainer)
                        this.previewContainer.setStyles({
                            display: 'block',
                            top: hs.yPos,
                            left: hs.xPos
                        });
                        this.slideEffect.element.getParent().setStyle('overflow', 'hidden')
                        var ref = this;
                        this.slideEffect.slideIn().chain(function () {
                            ref.slideEffect.element.getParent().setStyle('overflow', 'visible');
                        });
                        hs.isOn = true;
                        (hs.contentLoaded == false) ? hs.loadData() : null;
                    }
                } else {
                    this.hidePreview(a);
                }
            }
        }
    },
    hidePreview: function (hs) {
        if (hs.isOn == true) {
            hs.handle.setStyle('background-color', 'transparent');
            hs.handleImage.src = hs.offImg.src;
            this.previewWell.adopt(hs.contentContainer)
            hs.isOn = false;
            this.slideEffect.hide();
        }
    }
});

Tate.IndexGridSpot = new Class({
    presets: {
        HS_CLASS: 'tate_ig_prv',
        CLOSE_BUTTON_CLASS: 'tate_ig_close'
    },
    isOn: false,
    contentLoaded: false,
    overThisHandle: false,
    overThisContainer: false,
    initialize: function (htmlObject, hook, url, c) {
        if ($defined(htmlObject)) {
            var ref = this;
            this.handle = htmlObject;
            this.hook = hook;
            this.url = url;
            this.container = c;
            this.contentContainer = new Element('div', {
                'class': this.presets.HS_CLASS
            })
            this.dataRequest = new Tate.TextFileLoader({
                method: 'get'
            });
            if (this.container.type == 'divisions') {
                this.handleImage = this.handle.getElements('img')[0];
                this.offImg = new Asset.image(this.handleImage.src);
                this.onImg = new Asset.image(this.handleImage.src.substr(0, this.handleImage.src.lastIndexOf(".")) + '_on' + this.handleImage.src.substr(this.handleImage.src.lastIndexOf("."), 4));
                this.handleImage.title = '';
                if (window.webkit419) this.handle.setProperty('style', 'display: block; margin-bottom: 10px;');
            }
            if (this.container.type == 'locations') {
                this.handleImage = this.handle.getElements('img')[0];
                this.handleImage.title = '';
            }
            this.manageCoords();
            window.addEvent('resize', this.manageCoords.bind(this));
            this.dataRequest.addEvent('onFileLoad', this.handleDataLoad.bind(this));
            this.handle.addEvent('mouseenter', function () {
                ref.overThisHandle = true;
                ref.container.showPreview(ref);
            });
            this.handle.addEvent('mouseleave', function () {
                ref.overThisHandle = false;
                ref.testOff.delay(10, ref);
            });
        }
    },
    testOff: function () {
        if (this.overThisContainer == false && this.overThisHandle == false) {
            this.container.hidePreview(this);
        }
    },
    loadData: function () {
        this.dataRequest.doFileLoad(this.url);
    },
    manageCoords: function () {
        var ww = window.getWidth();
        var coords = this.hook.getCoordinates();
        if (this.container.type == 'divisions') {
            this.yPos = coords.top + coords.height;
            this.xPos = coords.left;
        } else if (this.container.type == 'people') {
            var tableCoords = this.container.mainContainer.getCoordinates()
            this.arrowDirection = 'down';
            this.yPos = coords.top - 124;
            var os = (window.webkit419) ? 298 : 302;
            this.xPos = coords.right - os;
            if (this.yPos < tableCoords.top + 36) {
                this.yPos = coords.top + coords.height;
                this.arrowDirection = 'up';
            }
            if (this.xPos < tableCoords.left + 290) {
                this.xPos = coords.left + 2;
            }
        } else if (this.container.type == 'locations') {
            this.yPos = coords.top - 52;
            this.xPos = coords.left - 310;
            if (this.xPos <= 0) {
                this.xPos = coords.right + 8;
            }
        } else {
            this.yPos = coords.top + coords.height;
            this.xPos = coords.left + coords.width;
        }
        return true;
    },
    handleDataLoad: function () {
        this.contentLoaded = true;
        this.contentContainer.adopt(new Element('div').setHTML(this.dataRequest.fileContent));
    }
});
Tate.IndexGridSpot.implement(new Events);

Tate.ImageMouseover = new Class({
    images: [],
    options: {
        listenToParent: false
    },
    initialize: function (i, options) {
        IMAGE_ON_SUFFIX = '_on';
        IMAGE_DISABLE_SUFFIX = '_dis';
        this.setOptions(options);
        this.image = i;
        this.parent = this.image.getParent();
        if (i.src.indexOf(IMAGE_ON_SUFFIX + '.') > 0) {
            this.image.overSrc = i.src;
        } else {
            this.image.overSrc = i.src.substr(0, i.src.lastIndexOf(".")) + IMAGE_ON_SUFFIX + i.src.substr(i.src.lastIndexOf("."), 4);
        }
        this.image.outImage = Asset.image(this.image.src);
        this.image.overImage = Asset.image(this.image.overSrc);
        this.image.isOn = false;
        this.enableMO();
    },
    doSwap: function () {
        if (this.image.isOn) {
            this.image.src = this.image.outImage.src;
            this.image.isOn = false;
        } else {
            this.image.src = this.image.overImage.src;
            this.image.isOn = true;
        }
    },
    enableMO: function () {
        (this.image.isOn) ? this.image.src = this.image.overImage.src : this.image.src = this.image.outImage.src;
        if (this.options.listenToParent == true) {
            this.parent.addEvent('mouseover', this.doSwap.bind(this));
            this.parent.addEvent('mouseout', this.doSwap.bind(this));
        } else {
            this.image.addEvent('mouseover', this.doSwap.bind(this));
            this.image.addEvent('mouseout', this.doSwap.bind(this));
        }
    },
    disableMO: function () {
        this.image.src = this.image.disableImage.src;
        if (this.options.listenToParent == true) {
            this.parent.removeEvent('mouseover', this.doSwap);
            this.parent.removeEvent('mouseout', this.doSwap);
        } else {
            this.image.removeEvent('mouseover', this.doSwap);
            this.image.removeEvent('mouseout', this.doSwap);
        }
    }
});
Tate.ImageMouseover.implement(new Options)

Tate.IFrameBuilder = new Class({
    options: {
        passUrlQueryString: true,
        className: 'tate_iframe',
        styles: {
            overflow: 'hidden',
            width: '100%'
        },
        resizeOnLoad: false,
        frameBorder: '0'
    },
    initialize: function (parent, url, options) {
        this.setOptions(options);
        this.id = this.options.id || "tate_iframe_" + new Date().getTime();
        this.parent = parent;
        this.url = url;
        $(this.parent).setStyle('background', "url(/a/pg/img/overlay/loadingImg_bk.gif) center no-repeat #000");
        this.index = Tate.IFrameBuilder.builtFrames.length;
        Tate.IFrameBuilder.builtFrames.push(this);
        var html = this.toHTML();
        this.parent.innerHTML = html;
        this.iframe = $(this.id);
        if (this.options.styles) this.iframe.setStyles(this.options.styles);
    },
    toHTML: function () {
        var url = this.url;
        if (this.options.passUrlQueryString && window.location.href.indexOf("?") > 0) {
            var qIndex = window.location.href.indexOf("?")
            var delim = url.indexOf("?") > 0 ? "&" : "?";
            url += delim + window.location.href.substring(qIndex + 1);
        }
        var callOnLoad = "onLoad=\"Tate.IFrameBuilder.builtFrames[" + this.index + "].onLoad()\"";
        var src = "<iframe " + callOnLoad + " scrolling=\"no\" id=\"" + this.id + "\" name=\"" + this.id + "\" src=\"" + url + "\" frameBorder=" + this.options.frameBorder + " class=\"" + this.options.className + "\"/>";
        return src;
    },
    onLoad: function () {
        $(this.parent).setStyle('background', 'white');
        if (this.options.resizeOnLoad) Tate.IFrameBuilder.builtFrames[this.index].resize();
    },
    resize: function () {
        try {
            this.iframe.height = window.frames[this.id].document.body.scrollHeight + "px";
            this.iframe.style.height = this.iframe.height;
            new Tate.Footer();
        } catch (e) {}
    }
});
Tate.IFrameBuilder.implement(new Options);
Tate.IFrameBuilder.builtFrames = [];

function resizeFrames() {
    try {
        $A(Tate.IFrameBuilder.builtFrames).each(function (f) {
            f.resize();
        });
    } catch (e) {}
}

Tate.HighlightBox = new Class({
    options: {
        swapImg: false,
        swapCSS: true,
        showTxtColor: '#000000',
        showBgColor: '#ffffff',
        hideTxtColor: '#ffffff',
        hideBgColor: '#000',
        transitionDuration: 150,
        allowBGTransition: true,
        allowTxtTransition: true,
        disableLinks: false
    },
    initialize: function (el, options) {
        this.element = el;
        this.setOptions(options);
        this.elementTxt = this.element.getElements('a')[0];
        if (this.options.swapImg) {
            var i = el.getElements('img')[0];
            var onI = new Asset.image(i.src.substr(0, i.src.lastIndexOf(".")) + '_on' + i.src.substr(i.src.lastIndexOf("."), 4));
            this.img = i;
            this.img.onSrc = onI.src;
            this.img.offSrc = i.src;
        }
        this.bgTrans = new Fx.Style(this.element, 'background-color', {
            wait: false,
            duration: this.options.transitionDuration,
            fps: 40
        })
        this.textTrans = new Fx.Style(this.elementTxt, 'color', {
            wait: false,
            duration: this.options.transitionDuration,
            fps: 40
        })
        if (this.options.disableLinks == true) {
            this.elementTxt.onclick = function (event) {
                var evt = new Event(event);
                evt.preventDefault();
            }
        }
        this.element.addEvent('mouseenter', this.doShow.bind(this));
        this.element.addEvent('mouseleave', this.doHide.bind(this));
    },
    doShow: function () {
        if (this.options.swapCSS) {
            if (this.options.allowBGTransition == true) {
                this.bgTrans.start(this.options.hideBgColor, this.options.showBgColor);
            }
            if (this.options.allowTxtTransition == true) {
                this.textTrans.start(this.options.hideTxtColor, this.options.showTxtColor);
            }
        }
        if (this.options.swapImg) {
            this.img.src = this.img.onSrc;
        }
    },
    doHide: function () {
        if (this.options.swapCSS) {
            if (this.options.allowBGTransition == true) {
                this.bgTrans.start(this.options.showBgColor, this.options.hideBgColor);
            }
            if (this.options.allowTxtTransition == true) {
                this.textTrans.start(this.options.showTxtColor, this.options.hideTxtColor);
            }
        }
        if (this.options.swapImg) {
            this.img.src = this.img.offSrc;
        }
    }
});
Tate.HighlightBox.implement(new Options);

Tate.Footer = new Class({
    presets: {
        DOC_ID: 'tate_doc',
        MAIN_ID: 'tate_main',
        TOP_PAD: 0
    },
    initialize: function () {
        this.mainElement = $(this.presets.MAIN_ID);
        this.docElement = $(this.presets.DOC_ID);
        this.browserOffset = (window.ie) ? 30 : 30;
        this.setHeight();
    },
    setHeight: function () {
        var tpad = this.presets.TOP_PAD;
        var wh = window.getHeight(),
            dh = this.docElement.getCoordinates().height,
            mh = this.mainElement.getCoordinates().height;
        if (wh - dh > 0) this.mainElement.setStyle('padding-bottom', (wh - dh + 1) + 'px');
        else
        this.mainElement.setStyle('padding-bottom', tpad + 'px');
    }
});

Tate.DropDown = new Class({
    options: {
        highlightOpts: true
    },
    value: 'Show All',
    onChange: Class.empty,
    initialize: function (selectBox, options) {
        this.setOptions(options);
        this.selectBox = selectBox;
        this.showDrop = true;
        this.selectBoxTrigger = selectBox.getElements('.tate_dd_dropDownTrig')[0];
        this.dropDown = selectBox.getElements('.tate_dd_dropDown')[0];
        this.dropDownOpts = this.dropDown.getElements('li a');
        this.dropDown.setStyle('display', 'none');
        this.selectBoxTrigger.addEvent('click', this.doDropToggle.bind(this));
        this.selectBoxTrigger.onclick = function (event) {
            this.doDisableLink(event)
        }.bind(this);
        this.selectBox.addEvent('mouseleave', this.doHideDrop.bind(this));
        this.dropDownOpts.each(function (opt) {
            opt.onclick = function (event) {
                this.doDisableLink(event)
            }.bind(this);
            if (this.options.highlightOpts) {
                opt.addEvent('mouseenter', this.doHiglightToggle.bind(this, opt));
                opt.addEvent('mouseleave', this.doHiglightToggle.bind(this, opt));
            }
            opt.addEvent('click', this.doSelectOption.bind(this, opt));
        }, this);
    },
    doDropToggle: function () {
        if (this.showDrop) {
            this.dropDown.setStyle('display', 'block');
            this.showDrop = false;
        } else {
            this.dropDown.setStyle('display', 'none');
            this.showDrop = true;
        }
    },
    doHideDrop: function () {
        this.dropDown.setStyle('display', 'none');
        this.showDrop = true;
    },
    doHiglightToggle: function (opt) {
        opt.toggleClass('tate_dd_optHlt');
    },
    doSelectOption: function (opt) {
        var optVal = opt.getText().trim();
        this.value = optVal;
        this.fireEvent('onChange');
        this.doHideDrop();
    },
    doDisableLink: function (event) {
        var evt = new Event(event);
        evt.preventDefault();
    }
});
Tate.DropDown.implement(new Options, new Events);

Tate.DataTableHighlight = new Class({
    options: {
        increase: 60
    },
    presets: {
        ON_CELL_CLASSNAME: 'tate_pplOn'
    },
    initialize: function (el, options) {
        this.setOptions(options);
        this.element = el;
        var rows = this.element.getElements('tbody tr');
        for (var i = 0; i < rows.length; i++) {
            var row = rows[i]
            row.cellNodes = row.getElements('th').concat(row.getElements('td'));
            row.outBgColor = row.cellNodes[0].getStyle('background-color');
            var rval = Math.round(eval('0x' + row.outBgColor.substring(1, 3)));
            var rhex = (rval + this.options.increase > 255) ? 255 : rval + this.options.increase;
            var gval = Math.round(eval('0x' + row.outBgColor.substring(3, 5)));
            var ghex = (gval + this.options.increase > 255) ? 255 : gval + this.options.increase;
            var bval = Math.round(eval('0x' + row.outBgColor.substring(5)));
            var bhex = (bval + this.options.increase > 255) ? 255 : bval + this.options.increase;
            row.overColor = '#' + rhex.toString(16) + ghex.toString(16) + bhex.toString(16);
            row.bgFx = new Fx.Elements(row.cellNodes, {
                duration: 250,
                wait: false
            })
            row.addEvent('mouseenter', this.doHighlight.pass([row], this));
            row.addEvent('mouseleave', this.doUnHighlight.pass([row], this));
        }
    },
    doHighlight: function (row) {
        var obj1 = {},
            obj2 = {};
        for (var i = 0, cls = row.cellNodes; i < cls.length; i++) {
            obj1[i] = {
                'background-color': [row.outBgColor, row.overColor]
            };
        }
        row.bgFx.start(obj1);
    },
    doUnHighlight: function (row) {
        var obj1 = {},
            obj2 = {};
        for (var i = 0, cls = row.cellNodes; i < cls.length; i++) {
            obj1[i] = {
                'background-color': [row.overColor, row.outBgColor]
            };
        }
        row.bgFx.start(obj1);
    }
});
Tate.DataTableHighlight.implement(new Options);
var Cookie = new Abstract({
    options: {
        domain: false,
        path: false,
        duration: false,
        secure: false
    },
    set: function (key, value, options) {
        options = $merge(this.options, options);
        value = encodeURIComponent(value);
        if (options.domain) value += '; domain=' + options.domain;
        if (options.path) value += '; path=' + options.path;
        if (options.duration) {
            var date = new Date();
            date.setTime(date.getTime() + options.duration * 24 * 60 * 60 * 1000);
            value += '; expires=' + date.toGMTString();
        }
        if (options.secure) value += '; secure';
        document.cookie = key + '=' + value;
        return $extend(options, {
            'key': key,
            'value': value
        });
    },
    get: function (key) {
        var value = document.cookie.match('(?:^|;)\\s*' + key.escapeRegExp() + '=([^;]*)');
        return value ? decodeURIComponent(value[1]) : false;
    },
    remove: function (cookie, options) {
        if ($type(cookie) == 'object') this.set(cookie.key, '', $merge(cookie, {
            duration: -1
        }));
        else this.set(cookie, '', $merge(options, {
            duration: -1
        }));
    }
});

Bio = new Class({
    initialize: function (trigger, container) {
        Bio.triggers.push(trigger);
        Bio.containers.push(container);
        trigger.addEvent('click', this.onClick.bind(this, Bio.triggers.length - 1));
    },
    onClick: function (count, e) {
        if (!Bio.isShowingAll) {
            for (var i = 0; i < Bio.triggers.length; i++)(i == count) ? Bio.show(i) : Bio.hide(i);
        }
    }
});
Bio.setSeeAll = function (trigger, text1, text2) {
    if (trigger) {
        Bio.seeAllTrigger = {
            element: trigger,
            'text1': text1 || "",
            'text2': text2 || ""
        }
        trigger.addEvent('click', function (e) {
            var event = new Event(e);
            event.stop();
            event.preventDefault();
            if (Bio.isShowingAll) Bio.hideAll();
            else
            Bio.showAll();
        });
    }
}
Bio.init = function () {
    var href = window.location.href;
    var hash = window.location.hash;
    hash = hash.length > 0 ? hash.substring(1) : "";
    if (hash.length > 0) {
        var name = hash;
        for (var i = 0; i < Bio.triggers.length; i++) {
            if (Bio.containers[i].getAttribute('name') == name) Bio.show(i);
            else
            Bio.hide(i);
        }
    } else {
        Bio.show(0);
        for (var i = 1; i < Bio.triggers.length; i++)
        Bio.hide(i);
    }
}
Bio.showAll = function () {
    for (var i = 0; i < Bio.triggers.length; i++)
    Bio.show(i, true);
    Bio.isShowingAll = true;
    if (Bio.seeAllTrigger) Bio.seeAllTrigger.element.innerHTML = Bio.seeAllTrigger.text2;
}
Bio.hideAll = function () {
    Bio.init();
    Bio.isShowingAll = false;
    if (Bio.seeAllTrigger) Bio.seeAllTrigger.element.innerHTML = Bio.seeAllTrigger.text1;
}
Bio.triggers = [];
Bio.containers = [];
Bio.show = function (i, style) {
    Bio.containers[i].setStyle('display', 'block');
    Bio.containers[i].setStyle('visibility', 'visible');
    if (style) {
        Bio.triggers[i].setStyle('color', '');
        Bio.triggers[i].setStyle('cursor', '');
    } else {
        Bio.triggers[i].setStyle('color', '#999');
        Bio.triggers[i].setStyle('cursor', 'text');
    }
};
Bio.hide = function (i) {
    Bio.containers[i].setStyle('display', 'none');
    Bio.containers[i].setStyle('visibility', 'hidden');
    Bio.triggers[i].setStyle('color', '');
    Bio.triggers[i].setStyle('cursor', '');
};

Tate.ArchiveTable = new Class({
    presets: {
        ROW_SELECTOR: 'tbody tr',
        MONTH_VAL_SELECTOR: '.tate_at_dateCell .tate_at_monthVal',
        YEAR_VAL_SELECTOR: '.tate_at_dateCell .tate_at_yearVal',
        SHOW_ALL_TITLE: 'Show All',
        SHOW_ALL_VALUE: 'show_all',
        ODD_ROW_CLASSNAME: 'tate_at_odd',
        EVEN_ROW_CLASSNAME: 'tate_at_even'
    },
    rows: [],
    initialize: function (tblEl, ops) {
        this.mainElement = tblEl;
        var possibleVals = [];
        var rowEls = this.mainElement.getElements(this.presets.ROW_SELECTOR);
        var options = ops || {
            onlyYear: false
        };
        this.mainElement.getParent().setStyle('height', (this.mainElement.getCoordinates().height + 74) + 'px')
        this.selectBox = new Tate.SelectBox();
        this.selectBox.mainNode.injectBefore(this.mainElement);
        this.selectBox.addOptionNode(this.presets.SHOW_ALL_VALUE, this.presets.SHOW_ALL_TITLE, true);
        for (var i = 0; i < rowEls.length; i++) {
            var row = rowEls[i];
            var month = row.getElements(this.presets.MONTH_VAL_SELECTOR)[0].getText()
            var year = row.getElements(this.presets.YEAR_VAL_SELECTOR)[0].getText();

            var title = options.onlyYear ? year : month + ', ' + year;
            var val = options.onlyYear ? year : month + '-' + year;
            var key = options.onlyYear ? year : month + year;
            this.rows.push({
                'rowEl': row,
                'value': val,
                'visible': true
            })
            if (possibleVals.contains(key) == false) {
                possibleVals.push(key);
                this.selectBox.addOptionNode(val, title, false);
            }
        }
        this.selectBox.addEvent('onChange', this.doFilter.bind(this));
    },
    doFilter: function () {
        var val = this.selectBox.value;
        var evenOddSig = 0;
        for (var i = 0; i < this.rows.length; i++) {
            if (val == this.rows[i].value || val == this.presets.SHOW_ALL_VALUE) {
                this.rows[i].rowEl.removeClass('hideMe');
                if (evenOddSig == 1) {
                    this.rows[i].rowEl.addClass(this.presets.ODD_ROW_CLASSNAME);
                    this.rows[i].rowEl.removeClass(this.presets.EVEN_ROW_CLASSNAME);
                    evenOddSig = 0;
                } else {
                    this.rows[i].rowEl.addClass(this.presets.EVEN_ROW_CLASSNAME);
                    this.rows[i].rowEl.removeClass(this.presets.ODD_ROW_CLASSNAME);
                    evenOddSig = 1;
                }
            } else {
                this.rows[i].rowEl.addClass('hideMe');
                this.rows[i].rowEl.removeClass(this.presets.ODD_ROW_CLASSNAME);
                this.rows[i].rowEl.removeClass(this.presets.EVEN_ROW_CLASSNAME);
            }
        }
    }
});




/*	sIFR v2.0.7
	Copyright 2004 - 2008 Mark Wubben and Mike Davidson. Prior contributions by Shaun Inman and Tomas Jogin.
	
	This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/

var hasFlash = function () {
    var a = 6;
    if (navigator.appVersion.indexOf("MSIE") != -1 && navigator.appVersion.indexOf("Windows") > -1) {
        document.write('<script language="VBScript"\> \non error resume next \nhasFlash = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash." & ' + a + '))) \n</script\> \n');
        if (window.hasFlash != null) return window.hasFlash
    }
    if (navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"] && navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin) {
        var b = (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description;
        return parseInt(b.substr(b.indexOf(".") - 2, 2), 10) >= a
    }
    return false
}();
String.prototype.normalize = function () {
    return this.replace(/\s+/g, " ")
};
if (Array.prototype.push == null) {
    Array.prototype.push = function () {
        var i = 0,
            a = this.length,
            b = arguments.length;
        while (i < b) {
            this[a++] = arguments[i++]
        }
        return this.length
    }
}
if (!Function.prototype.apply) {
    Function.prototype.apply = function (a, b) {
        var c = [];
        var d, e;
        if (!a) a = window;
        if (!b) b = [];
        for (var i = 0; i < b.length; i++) {
            c[i] = "b[" + i + "]"
        }
        e = "a.__applyTemp__(" + c.join(",") + ");";
        a.__applyTemp__ = this;
        d = eval(e);
        a.__applyTemp__ = null;
        return d
    }
}
function named(a) {
    return new named.Arguments(a)
}
named.Arguments = function (a) {
    this.oArgs = a
};
named.Arguments.prototype.constructor = named.Arguments;
named.extract = function (a, b) {
    var c, d;
    var i = a.length;
    while (i--) {
        d = a[i];
        if (d != null && d.constructor != null && d.constructor == named.Arguments) {
            c = a[i].oArgs;
            break
        }
    }
    if (c == null) return;
    for (e in c) if (b[e] != null) b[e](c[e]);
    return
};
var parseSelector = function () {
    var a = /^([^#.>`]*)(#|\.|\>|\`)(.+)$/;

    function r(s, t) {
        var u = s.split(/\s*\,\s*/);
        var v = [];
        for (var i = 0; i < u.length; i++) v = v.concat(b(u[i], t));
        return v
    }
    function b(c, d, e) {
        c = c.normalize().replace(" ", "`");
        var f = c.match(a);
        var g, h, i, j, k, n;
        var l = [];
        if (f == null) f = [c, c];
        if (f[1] == "") f[1] = "*";
        if (e == null) e = "`";
        if (d == null) d = document;
        switch (f[2]) {
        case "#":
            k = f[3].match(a);
            if (k == null) k = [null, f[3]];
            g = document.getElementById(k[1]);
            if (g == null || (f[1] != "*" && !o(g, f[1]))) return l;
            if (k.length == 2) {
                l.push(g);
                return l
            }
            return b(k[3], g, k[2]);
        case ".":
            if (e != ">") h = m(d, f[1]);
            else h = d.childNodes;
            for (i = 0, n = h.length; i < n; i++) {
                g = h[i];
                if (g.nodeType != 1) continue;
                k = f[3].match(a);
                if (k != null) {
                    if (g.className == null || g.className.match("(\\s|^)" + k[1] + "(\\s|$)") == null) continue;
                    j = b(k[3], g, k[2]);
                    l = l.concat(j)
                } else if (g.className != null && g.className.match("(\\s|^)" + f[3] + "(\\s|$)") != null) l.push(g)
            }
            return l;
        case ">":
            if (e != ">") h = m(d, f[1]);
            else h = d.childNodes;
            for (i = 0, n = h.length; i < n; i++) {
                g = h[i];
                if (g.nodeType != 1) continue;
                if (!o(g, f[1])) continue;
                j = b(f[3], g, ">");
                l = l.concat(j)
            }
            return l;
        case "`":
            h = m(d, f[1]);
            for (i = 0, n = h.length; i < n; i++) {
                g = h[i];
                j = b(f[3], g, "`");
                l = l.concat(j)
            }
            return l;
        default:
            if (e != ">") h = m(d, f[1]);
            else h = d.childNodes;
            for (i = 0, n = h.length; i < n; i++) {
                g = h[i];
                if (g.nodeType != 1) continue;
                if (!o(g, f[1])) continue;
                l.push(g)
            }
            return l
        }
    }
    function m(d, o) {
        if (o == "*" && d.all != null) return d.all;
        return d.getElementsByTagName(o)
    }
    function o(p, q) {
        return q == "*" ? true : p.nodeName.toLowerCase().replace("html:", "") == q.toLowerCase()
    }
    return r
}();
var sIFR = function () {
    var a = "http://www.w3.org/1999/xhtml";
    var b = false;
    var c = false;
    var d;
    var ah = [];
    var al = document;
    var ak = al.documentElement;
    var am = window;
    var au = al.addEventListener;
    var av = am.addEventListener;
    var f = function () {
        var g = navigator.userAgent.toLowerCase();
        var f = {
            a: g.indexOf("applewebkit") > -1,
            b: g.indexOf("safari") > -1,
            c: navigator.product != null && navigator.product.toLowerCase().indexOf("konqueror") > -1,
            d: g.indexOf("opera") > -1,
            e: al.contentType != null && al.contentType.indexOf("xml") > -1,
            f: true,
            g: true,
            h: null,
            i: null,
            j: null,
            k: null
        };
        f.l = f.a || f.c;
        f.m = !f.a && navigator.product != null && navigator.product.toLowerCase() == "gecko";
        if (f.m && g.match(/.*gecko\/(\d{8}).*/)) f.j = new Number(g.match(/.*gecko\/(\d{8}).*/)[1]);
        f.n = g.indexOf("msie") > -1 && !f.d && !f.l && !f.m;
        f.o = f.n && g.match(/.*mac.*/) != null;
        if (f.d && g.match(/.*opera(\s|\/)(\d+\.\d+)/)) f.i = new Number(g.match(/.*opera(\s|\/)(\d+\.\d+)/)[2]);
        if (f.n || (f.d && f.i < 7.6)) f.g = false;
        if (f.a && g.match(/.*applewebkit\/(\d+).*/)) f.k = new Number(g.match(/.*applewebkit\/(\d+).*/)[1]);
        if (am.hasFlash && (!f.n || f.o)) {
            var aj = (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description;
            f.h = parseInt(aj.substr(aj.indexOf(".") - 2, 2), 10)
        }
        if (g.match(/.*(windows|mac).*/) == null || f.o || f.c || (f.d && (g.match(/.*mac.*/) != null || f.i < 7.6)) || (f.b && f.h < 7) || (!f.b && f.a && f.k < 312) || (f.m && f.j < 20020523)) f.f = false;
        if (!f.o && !f.m && al.createElementNS) try {
            al.createElementNS(a, "i").innerHTML = ""
        } catch (e) {
            f.e = true
        }
        f.p = f.c || (f.a && f.k < 312);
        return f
    }();

    function at() {
        return {
            bIsWebKit: f.a,
            bIsSafari: f.b,
            bIsKonq: f.c,
            bIsOpera: f.d,
            bIsXML: f.e,
            bHasTransparencySupport: f.f,
            bUseDOM: f.g,
            nFlashVersion: f.h,
            nOperaVersion: f.i,
            nGeckoBuildDate: f.j,
            nWebKitVersion: f.k,
            bIsKHTML: f.l,
            bIsGecko: f.m,
            bIsIE: f.n,
            bIsIEMac: f.o,
            bUseInnerHTMLHack: f.p
        }
    }
    if (am.hasFlash == false || !al.getElementsByTagName || !al.getElementById || (f.e && (f.p || f.n))) return {
        UA: at()
    };

    function af(e) {
        if ((!k.bAutoInit && (am.event || e) != null) || !l(e)) return;
        b = true;
        for (var i = 0, h = ah.length; i < h; i++) j.apply(null, ah[i]);
        ah = []
    }
    var k = af;

    function l(e) {
        if (c == false || k.bIsDisabled == true || ((f.e && f.m || f.l) && e == null && b == false) || al.getElementsByTagName("body").length == 0) return false;
        return true
    }
    function m(n) {
        if (f.n) return n.replace(new RegExp("%\d{0}", "g"), "%25");
        return n.replace(new RegExp("%(?!\d)", "g"), "%25")
    }
    function as(p, q) {
        return q == "*" ? true : p.nodeName.toLowerCase().replace("html:", "") == q.toLowerCase()
    }
    function o(p, q, r, s, t) {
        var u = "";
        var v = p.firstChild;
        var w, x, y, z;
        if (s == null) s = 0;
        if (t == null) t = "";
        while (v) {
            if (v.nodeType == 3) {
                z = v.nodeValue.replace("<", "&lt;");
                switch (r) {
                case "lower":
                    u += z.toLowerCase();
                    break;
                case "upper":
                    u += z.toUpperCase();
                    break;
                default:
                    u += z
                }
            } else if (v.nodeType == 1) {
                if (as(v, "a") && !v.getAttribute("href") == false) {
                    if (v.getAttribute("target")) t += "&sifr_url_" + s + "_target=" + v.getAttribute("target");
                    t += "&sifr_url_" + s + "=" + m(v.getAttribute("href")).replace(/&/g, "%26");
                    u += '<a href="asfunction:_root.launchURL,' + s + '">';
                    s++
                } else if (as(v, "br")) u += "<br/>";
                if (v.hasChildNodes()) {
                    y = o(v, null, r, s, t);
                    u += y.u;
                    s = y.s;
                    t = y.t
                }
                if (as(v, "a")) u += "</a>"
            }
            w = v;
            v = v.nextSibling;
            if (q != null) {
                x = w.parentNode.removeChild(w);
                q.appendChild(x)
            }
        }
        return {
            "u": u,
            "s": s,
            "t": t
        }
    }
    function A(B) {
        if (al.createElementNS && f.g) return al.createElementNS(a, B);
        return al.createElement(B)
    }
    function C(D, E, z) {
        var p = A("param");
        p.setAttribute("name", E);
        p.setAttribute("value", z);
        D.appendChild(p)
    }
    function F(p, G) {
        var H = p.className;
        if (H == null) H = G;
        else H = H.normalize() + (H == "" ? "" : " ") + G;
        p.className = H
    }
    function aq(ar) {
        var a = ak;
        if (k.bHideBrowserText == false) a = al.getElementsByTagName("body")[0];
        if ((k.bHideBrowserText == false || ar) && a) if (a.className == null || a.className.match(/\bsIFR\-hasFlash\b/) == null) F(a, "sIFR-hasFlash")
    }
    function j(I, J, K, L, M, N, O, P, Q, R, S, r, T) {
        if (!l()) return ah.push(arguments);
        aq();
        named.extract(arguments, {
            sSelector: function (ap) {
                I = ap
            },
            sFlashSrc: function (ap) {
                J = ap
            },
            sColor: function (ap) {
                K = ap
            },
            sLinkColor: function (ap) {
                L = ap
            },
            sHoverColor: function (ap) {
                M = ap
            },
            sBgColor: function (ap) {
                N = ap
            },
            nPaddingTop: function (ap) {
                O = ap
            },
            nPaddingRight: function (ap) {
                P = ap
            },
            nPaddingBottom: function (ap) {
                Q = ap
            },
            nPaddingLeft: function (ap) {
                R = ap
            },
            sFlashVars: function (ap) {
                S = ap
            },
            sCase: function (ap) {
                r = ap
            },
            sWmode: function (ap) {
                T = ap
            }
        });
        var U = parseSelector(I);
        if (U.length == 0) return false;
        if (S != null) S = "&" + S.normalize();
        else S = "";
        if (K != null) S += "&textcolor=" + K;
        if (M != null) S += "&hovercolor=" + M;
        if (M != null || L != null) S += "&linkcolor=" + (L || K);
        if (O == null) O = 0;
        if (P == null) P = 0;
        if (Q == null) Q = 0;
        if (R == null) R = 0;
        if (N == null) N = "#FFFFFF";
        if (T == "transparent") if (!f.f) T = "opaque";
        else N = "transparent";
        if (T == null) T = "";
        var p, V, W, X, Y, Z, aa, ab, ac;
        var ad = null;
        for (var i = 0, h = U.length; i < h; i++) {
            p = U[i];
            if (p.className != null && p.className.match(/\bsIFR\-replaced\b/) != null) continue;
            V = p.offsetWidth - R - P;
            W = p.offsetHeight - O - Q;
            aa = A("span");
            aa.className = "sIFR-alternate";
            ac = o(p, aa, r);
            Z = "txt=" + m(ac.u).replace(/\+/g, "%2B").replace(/&/g, "%26").replace(/\"/g, "%22").normalize() + S + "&w=" + V + "&h=" + W + ac.t;
            F(p, "sIFR-replaced");
            if (ad == null || !f.g) {
                if (!f.g) {
                    if (!f.n) p.innerHTML = ['<embed class="sIFR-flash" type="application/x-shockwave-flash" src="', J, '" quality="best" wmode="', T, '" bgcolor="', N, '" flashvars="', Z, '" width="', V, '" height="', W, '" sifr="true"></embed>'].join("");
                    else p.innerHTML = ['<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" sifr="true" width="', V, '" height="', W, '" class="sIFR-flash"><param name="movie" value="', J, '"></param><param name="flashvars" value="', Z, '"></param><param name="quality" value="best"></param><param name="wmode" value="', T, '"></param><param name="bgcolor" value="', N, '"></param> </object>'].join('')
                } else {
                    if (f.d) {
                        ab = A("object");
                        ab.setAttribute("data", J);
                        C(ab, "quality", "best");
                        C(ab, "wmode", T);
                        C(ab, "bgcolor", N)
                    } else {
                        ab = A("embed");
                        ab.setAttribute("src", J);
                        ab.setAttribute("quality", "best");
                        ab.setAttribute("flashvars", Z);
                        ab.setAttribute("wmode", T);
                        ab.setAttribute("bgcolor", N)
                    }
                    ab.setAttribute("sifr", "true");
                    ab.setAttribute("type", "application/x-shockwave-flash");
                    ab.className = "sIFR-flash";
                    if (!f.l || !f.e) ad = ab.cloneNode(true)
                }
            } else ab = ad.cloneNode(true);
            if (f.g) {
                if (f.d) C(ab, "flashvars", Z);
                else ab.setAttribute("flashvars", Z);
                ab.setAttribute("width", V);
                ab.setAttribute("height", W);
                ab.style.width = V + "px";
                ab.style.height = W + "px";
                p.appendChild(ab)
            }
            p.appendChild(aa);
            if (f.p) p.innerHTML += ""
        }
        if (f.n && k.bFixFragIdBug) setTimeout(function () {
            al.title = d
        }, 0)
    }
    function ai() {
        d = al.title
    }
    function ae() {
        if (k.bIsDisabled == true) return;
        c = true;
        if (k.bHideBrowserText) aq(true);
        if (am.attachEvent) am.attachEvent("onload", af);
        else if (!f.c && (al.addEventListener || am.addEventListener)) {
            if (f.a && f.k >= 132 && am.addEventListener) am.addEventListener("load", function () {
                setTimeout("sIFR({})", 1)
            }, false);
            else {
                if (al.addEventListener) al.addEventListener("load", af, false);
                if (am.addEventListener) am.addEventListener("load", af, false)
            }
        } else if (typeof am.onload == "function") {
            var ag = am.onload;
            am.onload = function () {
                ag();
                af()
            }
        } else am.onload = af;
        if (!f.n || am.location.hash == "") k.bFixFragIdBug = false;
        else ai()
    }
    k.UA = at();
    k.bAutoInit = true;
    k.bFixFragIdBug = true;
    k.replaceElement = j;
    k.updateDocumentTitle = ai;
    k.appendToClassName = F;
    k.setup = ae;
    k.debug = function () {
        aq(true)
    };
    k.debug.replaceNow = function () {
        ae();
        k()
    };
    k.bIsDisabled = false;
    k.bHideBrowserText = true;
    return k
}();

if (typeof sIFR == "function" && !sIFR.UA.bIsIEMac && (!sIFR.UA.bIsWebKit || sIFR.UA.nWebKitVersion >= 100)) {
    sIFR.setup();
};


/*	sIFR 2.0.1 Official Add-ons 1.2
	Copyright 2005 Mark Wubben
	This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/

if (typeof sIFR == "function")(function () {
    var j = document;
    var h = j.documentElement;
    sIFR.removeDecoyClasses = function () {
        function a(b) {
            if (b && b.className != null) b.className = b.className.replace(/\bsIFR-hasFlash\b/, "")
        }
        return function () {
            a(h);
            a(j.getElementsByTagName("body")[0])
        }
    }();
    sIFR.preferenceManager = {
        storage: {
            sCookieId: "sifr",
            set: function (a) {
                var b = new Date();
                b.setFullYear(b.getFullYear() + 3);
                j.cookie = [this.sCookieId, "=", a, ";expires=", b.toGMTString(), ";path=/"].join("")
            },
            get: function () {
                var a = j.cookie.match(new RegExp(";?" + this.sCookieId + "=([^;]+);?"));
                if (a != null && a[1] == "false") return false;
                else
                return true
            },
            reset: function () {
                var a = new Date();
                a.setFullYear(a.getFullYear() - 1);
                j.cookie = [this.sCookieId, "=true;expires=", a.toGMTString(), ";path=/"].join("")
            }
        },
        disable: function () {
            this.storage.set(false)
        },
        enable: function () {
            this.storage.set(true)
        },
        test: function () {
            return this.storage.get()
        }
    };
    if (sIFR.preferenceManager.test() == false) {
        sIFR.bIsDisabled = true;
        sIFR.removeDecoyClasses()
    }
    sIFR.rollback = function () {
        function a(b) {
            var c, d, e, f, g, h;
            var l = parseSelector(b);
            var i = l.length - 1;
            var m = false;
            while (i >= 0) {
                c = l[i];
                l.length--;
                d = c.parentNode;
                if (c.getAttribute("sifr") == "true") {
                    h = 0;
                    while (h < d.childNodes.length) {
                        c = d.childNodes[h];
                        if (c.className == "sIFR-alternate") {
                            e = c;
                            h++;
                            continue
                        }
                        d.removeChild(c)
                    }
                    if (e != null) {
                        f = e.firstChild;
                        while (f != null) {
                            g = f.nextSibling;
                            d.appendChild(e.removeChild(f));
                            f = g
                        }
                        d.removeChild(e)
                    }
                    if (!sIFR.UA.bIsXML && sIFR.UA.bUseInnerHTMLHack) d.innerHTML += "";
                    d.className = d.className.replace(/\bsIFR\-replaced\b/, "")
                };
                m = true;
                i--
            }
            return m
        }
        return function (k) {
            named.extract(arguments, {
                sSelector: function (a) {
                    k = a
                }
            });
            if (k == null) k = "";
            else k += ">";
            sIFR.removeDecoyClasses();
            sIFR.bHideBrowserText = false;
            if (a(k + "embed") == false) a(k + "object")
        }
    }()
})()


/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if (typeof deconcept == "undefined") {
    var deconcept = new Object();
}
if (typeof deconcept.util == "undefined") {
    deconcept.util = new Object();
}
if (typeof deconcept.SWFObjectUtil == "undefined") {
    deconcept.SWFObjectUtil = new Object();
}
deconcept.SWFObject = function (_1, id, w, h, _5, c, _7, _8, _9, _a) {
    if (!document.getElementById) {
        return;
    }
    this.DETECT_KEY = _a ? _a : "detectflash";
    this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
    this.params = new Object();
    this.variables = new Object();
    this.attributes = new Array();
    if (_1) {
        this.setAttribute("swf", _1);
    }
    if (id) {
        this.setAttribute("id", id);
    }
    if (w) {
        this.setAttribute("width", w);
    }
    if (h) {
        this.setAttribute("height", h);
    }
    if (_5) {
        this.setAttribute("version", new deconcept.PlayerVersion(_5.toString().split(".")));
    }
    this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
    if (!window.opera && document.all && this.installedVer.major > 7) {
        deconcept.SWFObject.doPrepUnload = true;
    }
    if (c) {
        this.addParam("bgcolor", c);
    }
    var q = _7 ? _7 : "high";
    this.addParam("quality", q);
    this.setAttribute("useExpressInstall", false);
    this.setAttribute("doExpressInstall", false);
    var _c = (_8) ? _8 : window.location;
    this.setAttribute("xiRedirectUrl", _c);
    this.setAttribute("redirectUrl", "");
    if (_9) {
        this.setAttribute("redirectUrl", _9);
    }
};
deconcept.SWFObject.prototype = {
    useExpressInstall: function (_d) {
        this.xiSWFPath = !_d ? "expressinstall.swf" : _d;
        this.setAttribute("useExpressInstall", true);
    },
    setAttribute: function (_e, _f) {
        this.attributes[_e] = _f;
    },
    getAttribute: function (_10) {
        return this.attributes[_10];
    },
    addParam: function (_11, _12) {
        this.params[_11] = _12;
    },
    getParams: function () {
        return this.params;
    },
    addVariable: function (_13, _14) {
        this.variables[_13] = _14;
    },
    getVariable: function (_15) {
        return this.variables[_15];
    },
    getVariables: function () {
        return this.variables;
    },
    getVariablePairs: function () {
        var _16 = new Array();
        var key;
        var _18 = this.getVariables();
        for (key in _18) {
            _16[_16.length] = key + "=" + _18[key];
        }
        return _16;
    },
    getSWFHTML: function () {
        var _19 = "";
        if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) {
            if (this.getAttribute("doExpressInstall")) {
                this.addVariable("MMplayerType", "PlugIn");
                this.setAttribute("swf", this.xiSWFPath);
            }
            _19 = "<embed type=\"application/x-shockwave-flash\" src=\"" + this.getAttribute("swf") + "\" width=\"" + this.getAttribute("width") + "\" height=\"" + this.getAttribute("height") + "\" style=\"" + this.getAttribute("style") + "\"";
            _19 += " id=\"" + this.getAttribute("id") + "\" name=\"" + this.getAttribute("id") + "\" ";
            var _1a = this.getParams();
            for (var key in _1a) {
                _19 += [key] + "=\"" + _1a[key] + "\" ";
            }
            var _1c = this.getVariablePairs().join("&");
            if (_1c.length > 0) {
                _19 += "flashvars=\"" + _1c + "\"";
            }
            _19 += "/>";
        } else {
            if (this.getAttribute("doExpressInstall")) {
                this.addVariable("MMplayerType", "ActiveX");
                this.setAttribute("swf", this.xiSWFPath);
            }
            _19 = "<object id=\"" + this.getAttribute("id") + "\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"" + this.getAttribute("width") + "\" height=\"" + this.getAttribute("height") + "\" style=\"" + this.getAttribute("style") + "\">";
            _19 += "<param name=\"movie\" value=\"" + this.getAttribute("swf") + "\" />";
            var _1d = this.getParams();
            for (var key in _1d) {
                _19 += "<param name=\"" + key + "\" value=\"" + _1d[key] + "\" />";
            }
            var _1f = this.getVariablePairs().join("&");
            if (_1f.length > 0) {
                _19 += "<param name=\"flashvars\" value=\"" + _1f + "\" />";
            }
            _19 += "</object>";
        }
        return _19;
    },
    write: function (_20) {
        if (this.getAttribute("useExpressInstall")) {
            var _21 = new deconcept.PlayerVersion([6, 0, 65]);
            if (this.installedVer.versionIsValid(_21) && !this.installedVer.versionIsValid(this.getAttribute("version"))) {
                this.setAttribute("doExpressInstall", true);
                this.addVariable("MMredirectURL", escape(this.getAttribute("xiRedirectUrl")));
                document.title = document.title.slice(0, 47) + " - Flash Player Installation";
                this.addVariable("MMdoctitle", document.title);
            }
        }
        if (this.skipDetect || this.getAttribute("doExpressInstall") || this.installedVer.versionIsValid(this.getAttribute("version"))) {
            var n = (typeof _20 == "string") ? document.getElementById(_20) : _20;
            n.innerHTML = this.getSWFHTML();
            return true;
        } else {
            if (this.getAttribute("redirectUrl") != "") {
                document.location.replace(this.getAttribute("redirectUrl"));
            }
        }
        return false;
    }
};
deconcept.SWFObjectUtil.getPlayerVersion = function () {
    var _23 = new deconcept.PlayerVersion([0, 0, 0]);
    if (navigator.plugins && navigator.mimeTypes.length) {
        var x = navigator.plugins["Shockwave Flash"];
        if (x && x.description) {
            _23 = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
        }
    } else {
        if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0) {
            var axo = 1;
            var _26 = 3;
            while (axo) {
                try {
                    _26++;
                    axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + _26);
                    _23 = new deconcept.PlayerVersion([_26, 0, 0]);
                } catch (e) {
                    axo = null;
                }
            }
        } else {
            try {
                var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
            } catch (e) {
                try {
                    var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
                    _23 = new deconcept.PlayerVersion([6, 0, 21]);
                    axo.AllowScriptAccess = "always";
                } catch (e) {
                    if (_23.major == 6) {
                        return _23;
                    }
                }
                try {
                    axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                } catch (e) {}
            }
            if (axo != null) {
                _23 = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
            }
        }
    }
    return _23;
};
deconcept.PlayerVersion = function (_29) {
    this.major = _29[0] != null ? parseInt(_29[0]) : 0;
    this.minor = _29[1] != null ? parseInt(_29[1]) : 0;
    this.rev = _29[2] != null ? parseInt(_29[2]) : 0;
};
deconcept.PlayerVersion.prototype.versionIsValid = function (fv) {
    if (this.major < fv.major) {
        return false;
    }
    if (this.major > fv.major) {
        return true;
    }
    if (this.minor < fv.minor) {
        return false;
    }
    if (this.minor > fv.minor) {
        return true;
    }
    if (this.rev < fv.rev) {
        return false;
    }
    return true;
};
deconcept.util = {
    getRequestParameter: function (_2b) {
        var q = document.location.search || document.location.hash;
        if (_2b == null) {
            return q;
        }
        if (q) {
            var _2d = q.substring(1).split("&");
            for (var i = 0; i < _2d.length; i++) {
                if (_2d[i].substring(0, _2d[i].indexOf("=")) == _2b) {
                    return _2d[i].substring((_2d[i].indexOf("=") + 1));
                }
            }
        }
        return "";
    }
};
deconcept.SWFObjectUtil.cleanupSWFs = function () {
    var _2f = document.getElementsByTagName("OBJECT");
    for (var i = _2f.length - 1; i >= 0; i--) {
        _2f[i].style.display = "none";
        for (var x in _2f[i]) {
            if (typeof _2f[i][x] == "function") {
                _2f[i][x] = function () {};
            }
        }
    }
};
if (deconcept.SWFObject.doPrepUnload) {
    if (!deconcept.unloadSet) {
        deconcept.SWFObjectUtil.prepUnload = function () {
            __flash_unloadHandler = function () {};
            __flash_savedUnloadHandler = function () {};
            window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
        };
        window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
        deconcept.unloadSet = true;
    }
}
if (!document.getElementById && document.all) {
    document.getElementById = function (id) {
        return document.all[id];
    };
}
var getQueryParamValue = deconcept.util.getRequestParameter;
var FlashObject = deconcept.SWFObject;
var SWFObject = deconcept.SWFObject;
