/*************************************************************************
This code is from Dynamic Web Coding at dyn-web.com
Copyright 2008 by Sharon Paine 
See Terms of Use at www.dyn-web.com/business/terms.php
regarding conditions under which you may use this code.
This notice must be retained in the code as is!

unobtrusive event handling for use with dw_scroll.js
version date: Aug 2008
*************************************************************************/

/////////////////////////////////////////////////////////////////////
// two ways to add style sheet for capable browsers

dw_writeStyleSheet = function(file) {
    document.write('<link rel="stylesheet" href="' + file + '" media="screen" />');
}

function dw_addLinkCSS(file) {
    if (!document.createElement) return;
    var el = document.createElement("link");
    el.setAttribute("rel", "stylesheet");
    el.setAttribute("type", "text/css");
    el.setAttribute("media", "screen");
    el.setAttribute("href", file);
    document.getElementsByTagName('head')[0].appendChild(el);
}
/////////////////////////////////////////////////////////////////////

// Example class names: load_wn_lyr1, load_wn_lyr2_t2
dw_scrollObj.prototype.setUpLoadLinks = function(controlsId) {
    var wndoId = this.id; var el = document.getElementById(controlsId);
    var links = el.getElementsByTagName('a');
    var cls, parts;
    for (var i = 0; links[i]; i++) {
        cls = dw_scrollObj.get_DelimitedClass(links[i].className);
        parts = cls.split('_');
        if (parts[0] == 'load' && parts[1] == wndoId && parts.length > 2) {
            // no checks on lyrId, horizId
            var lyrId = parts[2]; var horizId = parts[3] ? parts[3] : null;
            dw_Event.add(links[i], 'click', function(wndoId, lyrId, horizId) {
                return function(e) {
                    dw_scrollObj.col[wndoId].load(lyrId, horizId);
                    if (e && e.preventDefault) e.preventDefault();
                    return false;
                }
            } (wndoId, lyrId, horizId)); // see Crockford js good parts pg 39
        }
    }
}

dw_scrollObj.prototype.setUpScrollControls = function(controlsId, autoHide, axis) {
    var wndoId = this.id; var el = document.getElementById(controlsId);
    if (autoHide && axis == 'v' || axis == 'h') {
        dw_scrollObj.handleControlVis(controlsId, wndoId, axis);
        dw_Scrollbar_Co.addEvent(this, 'on_load', function() { dw_scrollObj.handleControlVis(controlsId, wndoId, axis); });
        dw_Scrollbar_Co.addEvent(this, 'on_update', function() { dw_scrollObj.handleControlVis(controlsId, wndoId, axis); });
    }

    var links = el.getElementsByTagName('a'), cls, eType;
    for (var i = 0; links[i]; i++) {
        cls = dw_scrollObj.get_DelimitedClass(links[i].className);
        eType = dw_scrollObj.getEv_FnType(cls.slice(0, cls.indexOf('_')));
        switch (eType) {
            case 'mouseover':
            case 'mousedown':
                dw_scrollObj.handleMouseOverDownLinks(links[i], wndoId, cls);
                break;
            case 'scrollToId':
                dw_scrollObj.handleScrollToId(links[i], wndoId, cls);
                break;
            case 'scrollTo':
            case 'scrollBy':
            case 'click':
                dw_scrollObj.handleClick(links[i], wndoId, cls);
                if (this.lyr.id == "lyr1") {
                    var oWidth = this.lyr.clientWidth - 611;
                    if (oWidth == 0) {
                        document.getElementById("imgMBRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";
                    }
                    else {
                        document.getElementById("imgMBRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";
                    }
                }
                
                if (this.lyr.id == "lyr2") {
                    var oWidth = this.lyr.clientWidth - 611;
                    if (oWidth <= 0) {
                        document.getElementById("imgMBHRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";
                    }
                    else {
                        document.getElementById("imgMBHRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";
                    }
                }   
                
                if (this.lyr.id == "lyr3") {
                    var oWidth2 = this.lyr.clientWidth - 611;
                    if (oWidth2 == 0) {
                        document.getElementById("imgMGMRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";
                        
                    }
                    else {
                        document.getElementById("imgMGMRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";
                    }
                }
             
                if (this.lyr.id == "lyr4") {
                    var oWidth2 = this.lyr.clientWidth - 611;
                    if (oWidth2 <= 0) {
                        document.getElementById("imgMGMRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";
                        
                    }
                    else {
                        document.getElementById("imgMGMRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";
                    }
                }
             
                
                if (this.lyr.id == "lyr5") {
                    var oWidth3 = this.lyr.clientWidth - 611;
                    if (oWidth3 == 0) {
                        document.getElementById("imgHOBRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";
                    }
                    else {
                        document.getElementById("imgHOBRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";
                    }
                }
                
                if (this.lyr.id == "lyr6") {
                    var oWidth3 = this.lyr.clientWidth - 611;
                    if (oWidth3 <= 0) {
                        document.getElementById("imgHOBRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";
                    }
                    else {
                        document.getElementById("imgHOBRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";
                    }
                }         
                
                break;
        }
    }
}

dw_scrollObj.handleMouseOverDownLinks = function(linkEl, wndoId, cls) {
    var parts = cls.split('_'); var eType = parts[0];
    var re = /^(mouseover|mousedown)_(up|down|left|right)(_[\d]+)?$/;

    if (re.test(cls)) {
        var eAlt = (eType == 'mouseover') ? 'mouseout' : 'mouseup';
        var dir = parts[1]; var speed = parts[2] || null;
        var deg = (dir == 'up') ? 90 : (dir == 'down') ? 270 : (dir == 'left') ? 180 : 0;

        dw_Event.add(linkEl, eType, function(e) { dw_scrollObj.col[wndoId].initScrollVals(deg, speed); });
        dw_Event.add(linkEl, eAlt, function(e) { dw_scrollObj.col[wndoId].ceaseScroll(); });

        if (eType == 'mouseover') {
            dw_Event.add(linkEl, 'mousedown', function(e) { dw_scrollObj.col[wndoId].speed *= 3; });
            dw_Event.add(linkEl, 'mouseup', function(e) {
                dw_scrollObj.col[wndoId].speed = dw_scrollObj.prototype.speed;
            });
        }
        dw_Event.add(linkEl, 'click', function(e) { if (e && e.preventDefault) e.preventDefault(); return false; });
    }
}

// scrollToId_smile, scrollToId_smile_100, scrollToId_smile_lyr1_100
dw_scrollObj.handleScrollToId = function(linkEl, wndoId, cls) {
    var parts = cls.split('_'); var id = parts[1], lyrId, dur;
    if (parts[2]) {
        if (isNaN(parseInt(parts[2]))) {
            lyrId = parts[2];
            dur = (parts[3] && !isNaN(parseInt(parts[3]))) ? parseInt(parts[3]) : null;
        } else {
            dur = parseInt(parts[2]);
        }
    }
    dw_Event.add(linkEl, 'click', function(e) {
        dw_scrollObj.scrollToId(wndoId, id, lyrId, dur);
        if (e && e.preventDefault) e.preventDefault();
        return false;
    });
}

// doesn't checks if lyrId in wndo, el in lyrId
dw_scrollObj.scrollToId = function(wndoId, id, lyrId, dur) {
    var wndo = dw_scrollObj.col[wndoId];
    var el = document.getElementById(id);
    if (el) {
        if (lyrId) {
            if (document.getElementById(lyrId) && wndo.lyrId != lyrId) {
                wndo.load(lyrId);
            }
        }
        var lyr = document.getElementById(wndo.lyrId);
        var x = dw_getLayerOffset(el, lyr, 'left');
        var y = dw_getLayerOffset(el, lyr, 'top');

        var xMax = lyr.clientWidth - 611;


        if (wndo.lyrId == "lyr1") {
            if (x == 0) {
                document.getElementById("imgMBLeftArrow").src = "images/layout/btn-ConrolArrowLeft-off.gif";
                document.getElementById("imgMBRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";

            }

            if (x > 0) {
                document.getElementById("imgMBLeftArrow").src = "images/layout/btn-ConrolArrowLeft-on.gif";
                document.getElementById("imgMBRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";
                
            }
            
            if (x == xMax) {
                document.getElementById("imgMBLeftArrow").src = "images/layout/btn-ConrolArrowLeft-on.gif";
                document.getElementById("imgMBRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";
                
            }

            if ((x == 0) && (x == xMax)) {
                document.getElementById("imgMBLeftArrow").src = "images/layout/btn-ConrolArrowLeft-off.gif";
                document.getElementById("imgMBRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";
 
            }

        }


        if (wndo.lyrId == "lyr2") {
            if (x == 0) {
                document.getElementById("imgMBHLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-off.gif";
                document.getElementById("imgMBHRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";    
            }

            if (x > 0) {
                document.getElementById("imgMBHLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-on.gif";
                document.getElementById("imgMBHRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";      
            }
            
            if (x == xMax) {
                document.getElementById("imgMBHLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-on.gif";
                document.getElementById("imgMBHRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";            
            }

            if ((x == 0) && (x == xMax)) {
                document.getElementById("imgMBHLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-off.gif";
                document.getElementById("imgMBHRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";     
            }

        }

        if (wndo.lyrId == "lyr3") {

            if (x == 0) {
                document.getElementById("imgMGMLeftArrow").src = "images/layout/btn-ConrolArrowLeft-off.gif";
                document.getElementById("imgMGMRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";

            }

            if (x > 0) {
                document.getElementById("imgMGMLeftArrow").src = "images/layout/btn-ConrolArrowLeft-on.gif";
                document.getElementById("imgMGMRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";

            }

            if (x == xMax) {
                document.getElementById("imgMGMLeftArrow").src = "images/layout/btn-ConrolArrowLeft-on.gif";
                document.getElementById("imgMGMRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";

            }

            if ((x == 0) && (x == xMax)) {
                document.getElementById("imgMGMLeftArrow").src = "images/layout/btn-ConrolArrowLeft-off.gif";
                document.getElementById("imgMGMRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";

            }

        }

        if (wndo.lyrId == "lyr4") {

            if (x == 0) {
                document.getElementById("imgMGMLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-off.gif";
                document.getElementById("imgMGMRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";
            }

            if (x > 0) {
                document.getElementById("imgMGMLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-on.gif";
                document.getElementById("imgMGMRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";
            }

            if (x == xMax) {
                document.getElementById("imgMGMLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-on.gif";
                document.getElementById("imgMGMRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";
            }

            if ((x == 0) && (x == xMax)) {
                document.getElementById("imgMGMLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-off.gif";
                document.getElementById("imgMGMRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";
            }

        }

        if (wndo.lyrId == "lyr5") {
            if (x == 0) {
                document.getElementById("imgHOBLeftArrow").src = "images/layout/btn-ConrolArrowLeft-off.gif";
                document.getElementById("imgHOBRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";
            }

            if (x > 0) {
                document.getElementById("imgHOBLeftArrow").src = "images/layout/btn-ConrolArrowLeft-on.gif";
                document.getElementById("imgHOBRightArrow").src = "images/layout/btn-ConrolArrowRight-on.gif";
            }

            if (x == xMax) {
                document.getElementById("imgHOBLeftArrow").src = "images/layout/btn-ConrolArrowLeft-on.gif";
                document.getElementById("imgHOBRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";
            }

            if ((x == 0) && (x == xMax)) {
                document.getElementById("imgHOBLeftArrow").src = "images/layout/btn-ConrolArrowLeft-off.gif";
                document.getElementById("imgHOBRightArrow").src = "images/layout/btn-ConrolArrowRight-off.gif";
            }

        }


        if (wndo.lyrId == "lyr6") {
            if (x == 0) {
                document.getElementById("imgHOBLeftArrowTmb").src = "images/layout/btn-ConrolArrowLef2t-off.gif";
                document.getElementById("imgHOBRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";
            }

            if (x > 0) {
                document.getElementById("imgHOBLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-on.gif";
                document.getElementById("imgHOBRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-on.gif";
            }

            if (x == xMax) {
                document.getElementById("imgHOBLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-on.gif";
                document.getElementById("imgHOBRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";
            }

            if ((x == 0) && (x == xMax)) {
                document.getElementById("imgHOBLeftArrowTmb").src = "images/layout/btn-ConrolArrowLeft2-off.gif";
                document.getElementById("imgHOBRightArrowTmb").src = "images/layout/btn-ConrolArrowRight2-off.gif";
            }

        }

        wndo.initScrollToVals(x, y, dur);
    }
}

dw_scrollObj.handleClick = function(linkEl, wndoId, cls) {
    var wndo = dw_scrollObj.col[wndoId];
    var parts = cls.split('_'); var eType = parts[0];
    var dur_re = /^([\d]+)$/; var fn, re, x, y, dur;

    switch (eType) {
        case 'scrollTo':
            fn = 'scrollTo'; re = /^(null|end|[\d]+)$/;
            x = re.test(parts[1]) ? parts[1] : '';
            y = re.test(parts[2]) ? parts[2] : '';
            dur = (parts[3] && dur_re.test(parts[3])) ? parts[3] : null;
            break;
        case 'scrollBy': // scrollBy_m30_m40, scrollBy_null_m100, scrollBy_100_null
            fn = 'scrollBy'; re = /^(([m]?[\d]+)|null)$/;
            x = re.test(parts[1]) ? parts[1] : '';
            y = re.test(parts[2]) ? parts[2] : '';

            // negate numbers (m not - but vice versa) 
            if (!isNaN(parseInt(x))) {
                x = -parseInt(x);
            } else if (typeof x == 'string') {
                x = x.indexOf('m') != -1 ? x.replace('m', '') : x;
            }
            if (!isNaN(parseInt(y))) {
                y = -parseInt(y);
            } else if (typeof y == 'string') {
                y = y.indexOf('m') != -1 ? y.replace('m', '') : y;
            }

            dur = (parts[3] && dur_re.test(parts[3])) ? parts[3] : null;
            break;

        case 'click':
            var o = dw_scrollObj.getClickParts(cls);
            fn = o.fn; x = o.x; y = o.y; dur = o.dur;
            break;
    }
    if (x !== '' && y !== '') {
        if (x == 'end') { x = wndo.maxX; }
        if (y == 'end') { y = wndo.maxY; }
        if (x === 'null' || x === null) { x = wndo.x; }
        if (y === 'null' || y === null) { y = wndo.y; }

        x = parseInt(x); y = parseInt(y);
        dur = !isNaN(parseInt(dur)) ? parseInt(dur) : null;

        if (fn == 'scrollBy') {
            dw_Event.add(linkEl, 'click', function(e) {
                dw_scrollObj.col[wndoId].initScrollByVals(x, y, dur, wndoId);
                if (e && e.preventDefault) e.preventDefault();
                return false;
            });
        } else if (fn == 'scrollTo') {
            dw_Event.add(linkEl, 'click', function(e) {
                dw_scrollObj.col[wndoId].initScrollToVals(x, y, dur);
                if (e && e.preventDefault) e.preventDefault();
                return false;
            });
        }
    }
}

// get info from className (e.g., click_down_by_100)
dw_scrollObj.getClickParts = function(cls) {
    var parts = cls.split('_');
    var re = /^(up|down|left|right)$/;
    var dir, fn = '', dur, ar, val, x = '', y = '';

    if (parts.length >= 4) {
        ar = parts[1].match(re);
        dir = ar ? ar[1] : null;

        re = /^(to|by)$/;
        ar = parts[2].match(re);
        if (ar) {
            fn = (ar[0] == 'to') ? 'scrollTo' : 'scrollBy';
        }

        val = parts[3]; // value on x or y axis
        re = /^([\d]+)$/;
        dur = (parts[4] && re.test(parts[4])) ? parts[4] : null;

        switch (fn) {
            case 'scrollBy':
                if (!re.test(val)) {
                    x = ''; y = ''; break;
                }
                switch (dir) { // 0 for unspecified axis 
                    case 'up': x = 0; y = val; break;
                    case 'down': x = 0; y = -val; break;
                    case 'left': x = val; y = 0; break;
                    case 'right': x = -val; y = 0;
                }
                break;
            case 'scrollTo':
                re = /^(end|[\d]+)$/;
                if (!re.test(val)) {
                    x = ''; y = ''; break;
                }
                switch (dir) { // null for unspecified axis 
                    case 'up': x = null; y = val; break;
                    case 'down': x = null; y = (val == 'end') ? val : -val; break;
                    case 'left': x = val; y = null; break;
                    case 'right': x = (val == 'end') ? val : -val; y = null;
                }
                break;
        }
    }
    return { fn: fn, x: x, y: y, dur: dur }
}

dw_scrollObj.getEv_FnType = function(str) {
    var re = /^(mouseover|mousedown|scrollBy|scrollTo|scrollToId|click)$/;
    if (re.test(str)) {
        return str;
    }
    return '';
}

// return class name with underscores in it
dw_scrollObj.get_DelimitedClass = function(cls) {
    if (cls.indexOf('_') == -1) {
        return '';
    }
    var whitespace = /\s+/;
    if (!whitespace.test(cls)) {
        return cls;
    } else {
        var classes = cls.split(whitespace);
        for (var i = 0; classes[i]; i++) {
            if (classes[i].indexOf('_') != -1) {
                return classes[i];
            }
        }
    }
}

dw_scrollObj.handleControlVis = function(controlsId, wndoId, axis) {
    var wndo = dw_scrollObj.col[wndoId];
    var el = document.getElementById(controlsId);
    if ((axis == 'v' && wndo.maxY > 0) || (axis == 'h' && wndo.maxX > 0)) {
        el.style.visibility = 'visible';
    } else {
        el.style.visibility = 'hidden';
    }
}