// Namespace: SENDZA.MA511
(function() {
    // Private Members
    var _loggedIn = false;
    var _timeoutId = null;
    
    // Private Methods
    var _init = function() {
        var me = this;
        this.onInit.fire({
            my: this
        });
        this.onInit.unsubscribeAll();
        
        SENDZA.util.SendzaLoader.moduleRequire([
            'AudioPlayback',
            'base',
            'button',
            'ControlPanel',
            'Dialog',
            'DynamicImage',
            'fonts',
            'Help',
            'menu',
            'reset'
        ]);

        SENDZA.util.SendzaLoader.moduleInsert({
            onFailure: function() {
                SENDZA.util.alert('I\'m sorry.  There has been an error.  Please try again later.');
            },
            onSuccess: function() {
                _load.call(me);
            },
            onTimeout: function() {
                SENDZA.util.alert('I\'m sorry.  There has been an error.  Please try again later.');
            }
        });
    };

    var _load = function() {
        var me = this;

        this.util.ControlPanel = new SENDZA.util.ControlPanel();
        
        this.util.ControlPanel.onPanelLoad.subscribe(function(event, argsArray) {
            SENDZA.widget.registerTooltips();
            SENDZA.widget.drawButtons();
            me.util.Help.registerQuestionMarks();
            me.util.ga(argsArray[0].getId());
        });

        this.util.ControlPanel.onPanelProblem.subscribe(function(event, argsArray) {
            var id = argsArray[0];
            var problem = argsArray[1];

            if (id !== 'AccountInfo') {
                SENDZA.util.alert(problem + ': Redirecting to Home.');
                me.util.ControlPanel.loadPanel('AccountInfo');
            } else {
                SENDZA.util.alert(problem + ': Please try again later.');
                SENDZA.util.Animation.blindUp(me._loadingElement);
            }
        });

        SENDZA.util.Error.onError.subscribe(function(event, argsArray) {
            var code = argsArray[0];
            if (code != 'session_error' && code != 'account_error')
                return;

            var errorArgs = argsArray[1];
            if (typeof(errorArgs) != 'string')
                return;

            me.util.ControlPanel.loadPanel(errorArgs);

            var errorObject = argsArray[2];
            errorObject.display = false;
        });

        SENDZA.util.Marco.multiRequest([{
            command: {
                hand: 'ControlPanel',
                func: 'getAdvertisement'
            },
            success: function(args) {
                if (args.polo.errors.length)
                    return;

                var response = args.polo.getValue({
                    id: args.command.id
                });

                if (!response || !response.advertisement)
                    return;

                SENDZA.util.setProperty('banner-advertisement', 'innerHTML', response.advertisement);

                if (YAHOO.env.ua.ie > 0) {
                    // IE can't handle script tags...
                    var script = response.advertisement.substring(response.advertisement.indexOf('<script'));
                    if (script.length > 0)
                        setTimeout(script.substring(script.indexOf('>') + 1, script.lastIndexOf('<')), 0);
                } else {
                    var scripts = YAHOO.util.Dom.get('banner-advertisement').getElementsByTagName('script');
                    for (var i = 0; i < scripts.length; i++)
                        setTimeout(scripts[i].innerHTML, 0);
                }
            }
        }, {
            command: {
                hand: 'ControlPanel',
                func: 'getAdvertisementLinks'
            },
            success: function(args) {
                if (args.polo.errors.length)
                    return;

                var response = args.polo.getValue({
                    id: args.command.id
                });

                if (!response || !response.advertisement)
                    return;

                SENDZA.util.setProperty('advertisementLinks', 'innerHTML', response.advertisement);

                if (YAHOO.env.ua.ie > 0) {
                    // IE can't handle script tags...
                    var script = response.advertisement.substring(response.advertisement.indexOf('<script'));
                    if (script.length > 0)
                        setTimeout(script.substring(script.indexOf('>') + 1, script.lastIndexOf('<')), 0);
                } else {
                    var scripts = YAHOO.util.Dom.get('advertisementLinks').getElementsByTagName('script');
                    for (var i = 0; i < scripts.length; i++)
                        setTimeout(scripts[i].innerHTML, 0);
                }
            }
        }]);

        SENDZA.util.Marco.onSend.subscribe(function(event, argsArray) {
            if (_timeoutId != null) {
                clearTimeout(_timeoutId);
                _timeoutId = null;
            }
            if (_loggedIn)
                _timeoutId = setTimeout(function() {
                    SENDZA.util.confirm('For your security, you will be automatically logged out unless you press Yes within the next several minutes.', function(yes) {
                        if (!yes)
                            return;

                        SENDZA.util.Marco.multiRequest([{
                            command: {
                                hand: 'ControlPanel',
                                func: 'getModule',
                                args: {
                                    module: 'Timeout'
                                }
                            },
                            failure: function(args) {
                                SENDZA.util.Error.handlePoloFailure(args.command);
                            },
                            success: function(args) {
                                if (args.polo.errors.length)
                                    SENDZA.util.Error.handlePoloErrors(args.command, args.polo.errors)
                            }
                        }]);
                    });
                }, 1500000);
        });

        this.onLoad.fire({
            my: this
        });
        this.onLoad.unsubscribeAll();

        this.widget.topMenu = new YAHOO.widget.MenuBar('topMenu');
        this.widget.topMenu.addItems([{
            classname: 'snz-topmenu-home',
            onclick: {
                fn: function() {
                    SENDZA.MA511.widget.ContentMenu.setFocus('home');
                    SENDZA.MA511.util.ControlPanel.loadPanel('AccountInfo');
                }
            },
            text: 'Home'
        }, {
            classname: 'snz-topmenu-routes',
            onclick: {
                fn: function() {
                    SENDZA.MA511.widget.ContentMenu.setFocus('routes');
                    SENDZA.MA511.util.ControlPanel.loadPanel('Routes');
                }
            },
            text: 'Routes &amp; Alerts'
        }, {
            classname: 'snz-topmenu-helpAndFeedback',
            onclick: {
                fn: function() {
                    SENDZA.MA511.widget.ContentMenu.setFocus('helpAndFeedback');
                    SENDZA.MA511.util.ControlPanel.loadPanel('HelpAndFeedback');
                }
            },
            text: 'Help &amp; Feedback'
        }, {
            classname: 'snz-floatright',
            onclick: {
                fn: function() {
                    window.location = SENDZA.util.getHost() + '/logout.sws';
                }
            },
            text: 'Logout'
        }, {
            classname: 'snz-floatright snz-topmenu-settings',
            onclick: {
                fn: function() {
                    SENDZA.MA511.widget.ContentMenu.setFocus('settings');
                    SENDZA.MA511.util.ControlPanel.loadPanel('AccountSettings');
                }
            },
            text: 'Settings for <span id="settingsMenuPhoneNumber">' + (SENDZA.util.getProperty('ma511-session', 'value') != '' ? SENDZA.util.getProperty('ma511-session', 'value') : '') + '</span>'
        }]);
            
        this.widget.topMenu.render('content-menu');
        this.widget.topMenu.show();

        if (SENDZA.util.getProperty('ma511-session', 'value')) {
            SENDZA.util.Animation.blindDown('content-menu');
        }

        SENDZA.util.SendzaLoader.moduleRequire('Login');
        this.util.ControlPanel.loadPanel(SENDZA.util.getProperty('ma511-panel', 'value'));
        
        _detectIE6();

        SENDZA.util.SendzaLoader.moduleRequire('Login');

        var ma511_panel = SENDZA.util.getProperty('ma511-panel', 'value');
        this.util.ControlPanel.loadPanel(ma511_panel);

        if (ma511_panel != 'Login')
            _loggedIn = true;
    };

    var _detectIE6 = function() {
        if (YAHOO.env.ua.ie > 0 && YAHOO.env.ua.ie < 7) {
            var oldIE = '<div style="padding-top: 8px;">';
                oldIE += '<div class="snz-aligncenter snz-bold snz-padded" style="border-color: #FF0000; border-style: solid; border-width: 5px; margin-bottom: 5px;">';
                    oldIE += 'Mass511.com does not support your web browser.  Some features will not work correctly.';
                    oldIE += '<br />';
                    oldIE += 'Please upgrade your web browser or switch to the alternative browser of your choice.';
                    oldIE += '<br />';
                    oldIE += '<table class="snz-wide">';
                        oldIE += '<tr>';
                            oldIE += '<td>';
                                oldIE += '<a href="http://www.mozilla.com/firefox" target="_blank" style="background: url(\'images/FirefoxButton.png\'); display: block; height: 64px; margin: 0 auto; width: 64px;" onmouseover="YAHOO.util.Dom.setStyle(this, \'background-position\', \'0px -64px\');" onmouseout="YAHOO.util.Dom.setStyle(this, \'background-position\', \'0px 0px\');">';
                                oldIE += '</a>';
                                oldIE += '<br />';
                                oldIE += '<a href="http://www.mozilla.com/firefox" target="_blank">';
                                    oldIE += 'Mozilla Firefox';
                                oldIE += '</a>';
                            oldIE += '</td>';
                            oldIE += '<td>';
                                oldIE += '<a href="http://www.microsoft.com/windows/Internet-explorer/default.aspx" target="_blank" style="background: url(\'images/InternetExplorerButton.png\'); display: block; height: 64px; margin: 0 auto; width: 64px;" onmouseover="YAHOO.util.Dom.setStyle(this, \'background-position\', \'0px -64px\');" onmouseout="YAHOO.util.Dom.setStyle(this, \'background-position\', \'0px 0px\');">';
                                oldIE += '</a>';
                                oldIE += '<br />';
                                oldIE += '<a href="http://www.microsoft.com/windows/Internet-explorer/default.aspx" target="_blank">';
                                    oldIE += 'Microsoft Internet Explorer';
                                oldIE += '</a>';
                            oldIE += '</td>';
                            oldIE += '<td>';
                                oldIE += '<a href="http://www.google.com/chrome" target="_blank" style="background: url(\'images/ChromeButton.png\'); display: block; height: 64px; margin: 0 auto; width: 64px;" onmouseover="YAHOO.util.Dom.setStyle(this, \'background-position\', \'0px -64px\');" onmouseout="YAHOO.util.Dom.setStyle(this, \'background-position\', \'0px 0px\');">';
                                oldIE += '</a>';
                                oldIE += '<br />';
                                oldIE += '<a href="http://www.google.com/chrome" target="_blank">';
                                    oldIE += 'Google Chrome';
                                oldIE += '</a>';
                            oldIE += '</td>';
                        oldIE += '</tr>';
                    oldIE += '</table>';
                oldIE += '</div>';
            oldIE += '</div>';
            SENDZA.util.setProperty('content-messages', 'innerHTML', SENDZA.util.getProperty('content-messages', 'innerHTML') + oldIE);
        }
    };

    var MA511 = {
        // Public Members
        onInit: new YAHOO.util.CustomEvent('onInit'),
        onLoad: new YAHOO.util.CustomEvent('onLoad'),

        // Public Methods
        setLoggedIn: function(loggedIn) {
            _loggedIn = loggedIn;
        }
    };

    SENDZA.MA511 = MA511;
    YAHOO.util.Event.onDOMReady(function() {
        _init.call(SENDZA.MA511);
    });
})();

// Namespace: SENDZA.MA511.util
(function() {
    // Private Members
    var _loginUrl = '';

    // Private Methods
    var _includeUrl = function(base, container, file) {
        if (base && base.length > 0)
            base = base + '/';
        else
            base = '';
        if (container && container.length > 0)
            container = container + '/';
        else
            container = '';
        if (!file || file.length <= 0)
            file = '';
        return SENDZA.util.getHost() + '/include/' + base + container + file;
    };

    var util = {
        // Public Members
        ControlPanel: null,
        
        // Public Functions
        cssIncludeUrl: function(base, container, name) {
            if (typeof(name) == 'undefined')
                name = container;
            return _includeUrl(base, container, name + '.css');
        },
        ga: function(value) {
            var ga = document.createElement('iframe');
            YAHOO.util.Dom.addClass(ga, 'snz-hiddeninfo');
            document.body.appendChild(ga);
            YAHOO.util.Dom.setXY(ga, [-99999, -99999]);
            YAHOO.util.Event.addListener(ga, 'load', function() {
                YAHOO.lang.later(2000, null, function() {
                    document.body.removeChild(ga);
                });
            });
            SENDZA.util.setProperty(ga, 'src', SENDZA.util.getHost() + '/ga.sws?ga=' + value);
        },
        getLoginUrl: function() {
            return _loginUrl;
        },
        includeUrl: _includeUrl,
        jsIncludeUrl: function(base, container, name) {
            if (typeof(name) == 'undefined')
                name = container;
            return _includeUrl(base, container, name + '.js');
        },
        moduleDataUrl: function(module, data) {
            if (typeof(data) == 'undefined')
                data = module;
            return _includeUrl('module', module, data + 'Data.sws?');
        },
        setLoginUrl: function(loginUrl) {
            _loginUrl = loginUrl;
        }
    };

    SENDZA.MA511.util = util;
})();

// Namespace: SENDZA.MA511.widget
(function() {
    SENDZA.MA511.widget = {
        ContentMenu: {
            blur: function() {
                var buttons = YAHOO.util.Dom.getElementsByClassName('snz-topmenu-focus');
                for (var i = 0; i < buttons.length; i++)
                    YAHOO.util.Dom.removeClass(buttons[i], 'snz-topmenu-focus');
                YAHOO.util.Dom.addClass('menuCallout', 'snz-hidden');
            },
            setFocus: function(menuButton) {
                var buttons = YAHOO.util.Dom.getElementsByClassName('snz-topmenu-focus');
                for (var i = 0; i < buttons.length; i++)
                    YAHOO.util.Dom.removeClass(buttons[i], 'snz-topmenu-focus');
                buttons = YAHOO.util.Dom.getElementsByClassName('snz-topmenu-' + menuButton);
                for (var j = 0; j < buttons.length; j++) {
                    YAHOO.util.Dom.addClass(buttons[j], 'snz-topmenu-focus');
                    var region = YAHOO.util.Dom.getRegion(buttons[j]);
                    YAHOO.util.Dom.removeClass('menuCallout', 'snz-hidden');
                    YAHOO.util.Dom.setXY('menuCallout', [region.left + 5, region.bottom - 3]);
                    break;
                }
            }
        }
    };
})();

// Ma511 Modules
(function() {
    // Ma511 Core Modules
    SENDZA.util.SendzaLoader.moduleAdd({
        fullpath: SENDZA.MA511.util.jsIncludeUrl('util', 'Help'),
        name: 'Help',
        requires: ['container', 'dragdrop', 'resize'],
        type: 'js'
    });
    
    // Ma511 Modules
    SENDZA.MA511.onLoad.subscribe(function(type, args) {
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath: SENDZA.MA511.util.jsIncludeUrl('module', 'AccountInfo'),
            name: 'AccountInfo',
            requires: ['colorpicker', 'Event', 'Map'],
            type: 'js'
        });
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath:  SENDZA.MA511.util.jsIncludeUrl('module', 'AccountSettings'),
            name: 'AccountSettings',
            requires: ['cookie'],
            type: 'js'
        });
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath:  SENDZA.MA511.util.jsIncludeUrl('module', 'Android'),
            name: 'Android',
            type: 'js'
        });
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath: SENDZA.MA511.util.jsIncludeUrl('module', 'HelpAndFeedback'),
            name: 'HelpAndFeedback',
            requires: ['GetSatisfaction'],
            type: 'js'
        });
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath: SENDZA.MA511.util.jsIncludeUrl('module', 'Login'),
            name: 'Login',
            requires: ['cookie', 'Counter'],
            type: 'js'
        });
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath: SENDZA.MA511.util.jsIncludeUrl('module', 'Notifications'),
            name: 'Notifications',
            requires: ['DisplayTable', 'Icon'],
            type: 'js'
        });
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath: SENDZA.MA511.util.jsIncludeUrl('module', 'Routes'),
            name: 'Routes',
            requires: ['DisplayTable', 'Icon', 'Map'],
            type: 'js'
        });
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath: SENDZA.MA511.util.jsIncludeUrl('module', 'TrafficCameras'),
            name: 'TrafficCameras',
            requires: ['Ajaxslt', 'Event', 'event-mouseenter', 'Icon', 'Map', 'selector'],
            type: 'js'
        });
        SENDZA.MA511.util.ControlPanel.definePanel({
            fullpath:  SENDZA.MA511.util.jsIncludeUrl('module', 'WebApplication'),
            name: 'WebApplication',
            type: 'js'
        });
    });
})();

