// Dependencies: prototype.js and bluecoast.js

var Global = {
    setup: function() {
        if ($(document.body).hasClassName('hasProtectedLinks')) Login.setup();
        if ($(document.body).hasClassName('isProtected')) Login.checkCredential();
        
        Login.removeProtectedOptions();
    }
}

var Login = {
    requestedLink: null, // anchor element of the protected resource that user requested
    
    // Setup for page containing protected links. 
    setup: function() {
        $$('a.protected').each(function(protected_link) {
            if (Login.areResourcesUnlocked()) {
                protected_link.removeClassName('protected');
                Login.reconstructUrl(protected_link);
            } else {
                protected_link.observe('click', Login.showLoginDialog);                
            }
        }); 
        
        $$('#login-dialog form')[0].observe('submit', Login.login);
        $$('#login-dialog #close-button')[0].observe('click', Login.hideLoginDialog);
        $$('#login-dialog #small-close-button')[0].observe('click', Login.hideLoginDialog);

        // Fixes problem in IE where pressing enter doesn't submit the form        
        if (Prototype.Browser.IE) {
            $$('#login-dialog form input').each(function(input) { 
                input.observe('keydown', Login.submitFormOnEnter)})  
        }         
    }, 
    
    showLoginDialog: function(event) {
        event.stop(); 
        Login.requestedLink = event.element();  

        var documentDimensions = $$('.bg-wrap')[0].getDimensions();
        $('model-layer').style.width = documentDimensions.width + 'px'; 
        $('model-layer').style.height = documentDimensions.height + 'px'; 
        $('model-layer').show(); 

        var viewportDimensions = document.viewport.getDimensions();
        var left = (viewportDimensions.width - $('login-dialog').getWidth()) / 2;
        var top = (viewportDimensions.height - $('login-dialog').getHeight()) / 2 
                  + document.viewport.getScrollOffsets().top;
        $('login-dialog').style.left = left + 'px'; 
        $('login-dialog').style.top = top + 'px'; 
        $('login-dialog').show(); 
        
        $$('#login-dialog form')[0].focusFirstElement();
    }, 
    
    hideLoginDialog: function(event) {
        $('model-layer').hide(); 
        $('login-dialog').hide(); 
    },
    
    // The main login logic, invoked when the login form is submitted. 
    login: function(event) {
        event.stop(); 
        var form = $$('#login-dialog form')[0];
        
        // To generate a new pair of obfuscated username and password, 
        // invoke obfuscate() from the Firebug console. 
        if (Login.obfuscate($F(form.username)) == "2115333921276360357512766" && 
            Login.obfuscate($F(form.password)) == "3927927546276665712336") {
            Cookie.set('resourcesUnlocked', 'true', 30, '/');
            
            Login.hideLoginDialog();
            
            $$('a.protected').each(function(protected_link) {
                protected_link.removeClassName('protected');
                protected_link.select('img')[0].hide();
                protected_link.stopObserving('click', Login.showLoginDialog);                
                Login.reconstructUrl(protected_link);
            });
            
            location = Login.requestedLink.href; 
        } else { 
            alert("The user name and password are incorrect");
        }
    }, 
    
    areResourcesUnlocked: function() {
        return Cookie.get('resourcesUnlocked') == 'true';
    },
    
    // Reconstruct URL for the given link from its DOM ID.  
    reconstructUrl: function(link) {
      var isRoot = $(document.body).hasClassName('isRoot')
      var prefix = isRoot ? 'solutions/' : ''
    
      link.href = prefix + link.id.split('_url_').last() + '.htm'
    },
    
    // For pages that have a select drop down to solutions, remove options from the
    // select that are off limit
    removeProtectedOptions: function() {
        var select = $$('select#sel-quicklinks')[0];
        if (select && !this.areResourcesUnlocked()) {
            select.select('option.protected').each(function(option) { option.hide(); });
        } 
    },
    
    // Invoked by protected page to check for user credential on load. 
    checkCredential: function() {
        if (!Login.areResourcesUnlocked()) {
            location = '../no_permission.html';
        }
    },
    
    // Workaround for IE form not submitting on enter
    submitFormOnEnter: function(event) {
        if (event.keyCode == 13) Login.login(event);
    },
    
    // This is an optimization so the lock image wouldn't show and hide itself 
    // quickly on page load, or vice versa. 
    lockImage: function(isRoot) {
        var prefix = isRoot? '' : '../';
        
        if (Login.areResourcesUnlocked()) {
            document.write('<img src="' + prefix + 'images/icn-lock.gif" alt="locked" style="display:none" />');
        } else {
            document.write('<img src="' + prefix + 'images/icn-lock.gif" alt="locked" />');
        }
    },
    
    // Simple obfuscator used to mask the username and password in source code
    obfuscate: function(string) {
        var components = []
        for (var i = 0; i < string.length; i++) {
            components.push(string.charCodeAt(i) % 23 * 3);
        }
        return components.join(''); 
    }
}

Event.observe(window, 'load', Global.setup);